2

認証と承認のためにサーバー側で Stormpath を使用するモバイル アプリケーションに取り組んでいます。複数のデバイスで同じユーザーのサインインをサポートする必要がありますが、それを追跡し、必要に応じて制限できるようにしたいと考えています。

私のアプリケーションは現在、Stormpath を使用して、電子メール/パスワードまたは MDN/パスワードを使用してユーザーをサインインさせ、ログインに成功すると、サーバーへの API アクセスに使用する JWT トークンを返します。

私は次のアプローチを考えています:

  • ユーザーのアカウントにセッションのリストを保持します。ユーザーがサインインするたびに、device_id と提供された JWT を使用して新しいエントリが追加されます。ユーザーがサインオフすると、エントリは削除されるか、非アクティブとマークされます。
  • ユーザーが別のデバイスでサインインしようとしたときに、アクティブなデバイスを 1 つだけに制限したい場合は、他のエントリを無効に設定し、JWT を期限切れにして、アプリケーションがそれを検出して再度ログインを要求できるようにします。
  • ユーザーを最大 n セッションに制限したい場合は、エントリを数えて、ユーザーが新しいデバイスにサインインできるようにする前に、他のセッションのいずれかでサインオフするよう強制することができます。

これは良いアプローチですか?それを行うより良い方法はありますか?この方法の問題点は何ですか?

4

1 に答える 1

1

私はモバイル SDK の Stormpath で働いています。これを達成するために必要なアクセス/リフレッシュ トークン機能を使用できます。

  • ユーザーがサインインするたびに、アクセス トークンと更新トークンが作成されます。ユーザーがサインオフすると、更新トークンとアクセス トークンが削除されます。
  • ユーザーが別のデバイスでサインインしようとしたときに、アクティブなデバイスを 1 つだけに制限したい場合は、他のすべてのアクセス トークンと更新トークンを削除できます。
  • ユーザーを最大 n セッションに制限したい場合は、エントリを数えて、ユーザーが新しいデバイスにサインインできるようにする前に、更新トークンの 1 つを削除するよう強制することができます。次に、アクセス トークンを調べて、一致する "rti" (トークン ID の更新) を持つトークンを削除します。

これを実装する際のいくつかの注意事項:

  • Stormpath Framework 統合を使用している場合、既定では、アクセス トークンをローカルで検証します (検証のために Stormpath に送信するのではなく)。これは、SDK によって検証できる署名があるためです。ただし、ユーザーをログアウトするには、これをリモート検証に設定するか、短いアクセス トークンの寿命を使用する必要があります (そして、リフレッシュ トークンを使用して各「セッション」を制御します)。
  • 更新トークンは「customData」を保存できないため、更新トークンに関するメタデータをアカウントの customData または独自のデータベースに保持する必要があります。
  • または、各ユーザーの API キーを「作成」し、各ユーザーのセッションの代わりにそれを使用することもできます。API キーの name または description 属性を使用して、ユーザーがどこからサインインしたかなどを追跡できます。
于 2016-09-09T03:55:36.040 に答える