1

私はこのことについて何ヶ月も読んできましたが、私が下に要約していることにすべてが収斂するようでした。私が最も理想的な到着しようとしています:クッキーを使用せずに認証コードを使用する?

  • のOAuth2
  • OpenIDの接続
  • SPA /モバイルクライアント
  • JWT上記のように銀行レベルのセキュリティ品質を有する

ソリューションコンポーネントが関係しています。だからこれは意味をなさないと思われるものです。

  • このOAuthのフローは、暗黙的な流れよりも安全であるため、サーバー側のセッションとクッキーを使用せずにAuthorization Code Grantを使用してください。
  • サーバーサイドのセッションやクッキーを作成しないでください。クライアントが以前に認証されたかどうかを確認するために、クッキーを覚えておいてください。これはスケーリングと全体的な単純化にとってより優れています。
  • JWT/OpenID接続トークンをクライアントに返します。これにより、クライアントはAPIを使用してクライアントでAPI要求を行い、クライアント内で認可の決定を行うことができます。 (これは、OAuth2ハイブリッド認証コード許可/暗黙のフローとは何ですか?)クライアントセッションストレージにJWT/OpenID接続トークンを格納します。
  • 短命のJWTトークンを使用し、ユーザーがログアウトするまでリフレッシュトークンを提供します。クライアントは、タイムアウト/クライアント側のセッションが満了するか、ユーザーがログアウトしない限り、リフレッシュトークンを自動的に受信します。リフレッシュトークンは、SPA /モバイルアプリケーションが話している/ OAuthクライアントのエッジサーバーによって取得され、処理されます。
  • ログアウト(またはタイムアウト)時に、ブラウザのセッションストレージからトークンを削除します。

これは狂った/妥当なものですか?トークンを無効にすることはスキップしますが、トークンの寿命が非常に短く、クライアントがリフレッシュトークンを取得できる場合は、これを行うのがOKです。私はこれをSpring-Boot/Spring SecurityとAngular 4/5を使って実装したいと思います。もし私が何かを見逃したり、セキュリティを低下させないもっと簡単なアプローチがあるのだろうか?

また、これは「バンキング」レベルのセキュリティ基準のチェックに合格すると思いますか?クリアする

+0

まず読む:https://stackoverflow.com/help/how-to-ask しかし、私は使用を推測:認定ライブラリと OpenIDの接続:https://openid.net/certification/ OpenIDの接続 https://openid.net/specs/openid-connect-basic-1_0.html https://openid.net/specs/openid-connect-implicit-1_0.html – jwilleke

+0

うんためのベスト・プラクティスに従ってください私はあなたが「尋ねる方法」のヒントの意味を知っています。私は上記のアプローチで少し「箱の外側を歩いている」ような気がしています。 .. – Ole

答えて

1

いくつかのこと、

1.あなたはこのようなアプリケーションが機密にすることはできません、それはrecievesリフレッシュトークンを保護することはできませんbecuaseこれは、ブラウザベースのアプリケーション

ためimplicit flowを使用する必要があります。 OAuth2.0 RFCも流れについて説明しています。

また、OAuth2.0 Refresh token definitionによれば、リフレッシュトークンは信任状の一種です。

更新トークンは、このようにbroweserベースのアプリケーションのための暗黙のフローを使用する必要性を説明し、

10.4 of RFC6749は、リフレッシュトークンのセキュリティについての詳細を説明してアクセストークンを取得するために使用される資格情報です。

2.暗黙の流れが

暗黙の許可タイプの流れを利用して、リフレッシュトークンがないOAuth2.0 RFCから

リフレッシュトークンを送信しない は、を返されました アクセストークンが期限切れになると、承認プロセスを繰り返す必要があります。

ので、アクセストークンの有効期限が切れたとき、あなたは新しいトークンを取るために同じ流れを通過する必要が

3. IDトークンの使用状況に

を設定specficiationに応じvlaidate必要があります。 IDトークンが有効な場合、ユーザーが認証され

4. APIは、アクセストークンまたはユーザーIDトークンを使用するか、

つのオプションを呼び出します。

APIエンドポイントと通信するためのアクセストークンの使用が一般的です。これは、アクセストークンの意図された使用法です。 APIエンドポイントから、introspection endpoint(IDプロバイダがIDをサポートしている場合)を使用してアクセストークンを無効にすることができます。

しかし、IDトークンJWTは、ベアラトークンとしても使用できます。これを行うには、IDトークンを検証するためのAPIエンドポイントが必要です。 Thisブログ/ドキュメントには、考慮すべき点がいくつか含まれています。

+1

wrt。 1:技術的には認可コード付与を使用することもできますが、パブリッククライアントのみで行うことができます。no client_secret –

+0

ありがとうございます - 偉大な回答 - 私が質問した理由の1つを示しています。リフレッシュトークン、セッションなし(他のセッショントークン/クッキーなし)、リソースサーバー認証のためにjwtトークンまたはリフレッシュトークンをクライアント/ SPAに返す際に、認可コード許可フローを使用したいと思います。このタイプのシナリオはOAuth2の標準/青色の印刷の外にありますが、認可サーバーを少し修正することで実装できると思います。 – Ole

+0

「サーバーセッションなしでブラウザベースのアプリケーションに認証コード許可フローを使用する方法...」 – Ole

関連する問題