web-dev-qa-db-ja.com

IdentityServerフロー

IdentityServerは、 Flows enumで定義され、クライアントに設定されたさまざまなOpenId Connectフローをサポートします。また、ドキュメントにはフローの各タイプのサンプルとそれらへの多くの参照がありますが、 documentation にあるフローの簡単な定義リストを見つけることができませんでした。しかし、そうではないと思います。これらの違いについて詳しく教えてください。おそらくドキュメントに追加できますか?

だから何ですか:implicitflow、resource owner password credentialflow、認証コードフロー、クライアント認証情報フロー、カスタム許可フロー、およびハイブリッドフロー?また、どのフローがOAuthフローであり、どのフローがOpenID Connectフローですか?

ありがとう!

53
orad

私は同じ問題に直面しました。現在、作業はまだ進行中です。ドキュメントを完成したら、ここに投稿するかもしれません。当分の間:下書きを確認してください:

OIDCおよびOAuth2 Flowsセクション#73でIdentityServerドキュメントを充実させる

更新:OIDCおよびOAuth2フロー

38
Jawad Al Shaikh

leastPrivilageの最初のリンクから:および Aharon Paretzki's OAuth 2 Simplified

フローは、IDトークン(認証コード)と- アクセストークン(つまり「トークン」)がクライアントに返されます。

認証コードフロー:OAuth 2.0 flow

  • 承認エンドポイントから承認コードが返されます
  • すべてのトークン(第2段階として、認証コードと引き換えに)がトークンエンドポイントから返されます
  • クライアントシークレットの機密性を維持できるサーバーベースの呼び出し(API)に使用されます。 「クライアントシークレット」に誰もアクセスできない限り、セキュリティを強化できます。

暗黙的なフロー:OAuth 2.0 flow

  • すべてのトークンは承認エンドポイントから直接返されます
  • トークンエンドポイントも認証コードも使用されません。
  • クライアントシークレットの機密性を維持できないモバイルおよびWebベースのアプリに使用されるため、認証サーバー自体によってトークンを発行する必要があります。これは安全性が低いため、APIの使用について暗黙的なフロー呼び出しを拒否し、ブラウザベースおよびモバイルベースのアプリに対してのみ許可するようにサーバーを設定することをお勧めします。

ハイブリッドフロー:OAuth 2.0 flow

  • 承認エンドポイントから承認コードが返されます。
  • 一部のトークンは承認エンドポイントから直接返され、他のトークンはトークンエンドポイントから(承認コードと引き換えに第2段階として)返されます。
  • 両方のフローが必要な場所で使用されます。
20
pashute

仕様を参照してください-すでにすべて書き留められています:

http://openid.net/specs/openid-connect-core-1_0.html および http://tools.ietf.org/html/rfc6749

さらに、私は最近、さまざまなアプリケーションタイプに分類する要約を書きました。

http://leastprivilege.com/2016/01/17/which-openid-connectoauth-2-o-flow-is-the-right-one/

10
leastprivilege

OAuth2 で定義されているフローは、クライアントがIDプロバイダーサーバーからaccess tokenを受信するいくつかの方法にすぎません。この場合はIdentityServerResource OwnerUser AgentResource Serverなどの フロー図 で指定されたエンティティを完全に理解しない限り、フローを理解することは容易ではありません。 here には、これらのエンティティ(貴重な役割)に関する簡単な説明があります。


認証コードフローauthorization codeを発行する前にaccess tokenを発行します。

  • クライアントがauthorization code.を要求します
  • IdentityServerクライアントを検証し、リソース所有者にauthorization codeを発行するための承認を許可するように依頼します。
  • 次に、クライアントは、指定されたaccess tokenauthorization codeを要求します
  • 認可サーバーは、access tokenをクライアントに直接発行します。

暗黙のコードフローaccess tokenが提供されていなくてもauthorization codeを発行します。

  • クライアントがaccess tokenを直接要求します。
  • IdentityServerはクライアントの検証をスキップします(一部のシナリオでは、部分的に実行します)が、リソース所有者にaccess tokenを発行するための承認を許可するように要求します
  • このフローはauthorization codeを発行しません。

暗黙的なフローは、javascriptなどのスクリプト言語を使用するクライアントにとって、クライアントがauthorization codeaccess tokenを個別に要求する必要がないため、理想的なフローと見なされます、順番に、クライアントの1つのネットワークラウンドトリップを削減します。


クライアント資格情報フロー:リソース所有者の許可なしにaccess tokenを発行します。

  • クライアントがアクセストークンを直接要求します。
  • IdentityServerはクライアントを検証し、すぐにaccess tokenを発行します。

これは、クライアントがリソース所有者でもある場合に理想的であるため、access tokenまでの承認権限は必要ありません。


リソース所有者フロー:クライアントがリソース所有者の資格情報(例:Id/Password)を持っている場合はaccess tokenを発行

  • クライアントがaccess tokenを直接要求します。
  • IdentityServerはクライアントを検証し、リソース所有者のIDを確認します。
  • 有効な場合、クライアントはaccess tokenを即座に取得します。

このフローは、IDおよびパスワードを共有することが絶対に安全であると考えているクライアントに最適です。


ハイブリッドフロー(OIDCフロー)authorization codeおよびaccess tokenを発行します。

これは、Authorization code flowImplicit code flowの組み合わせです。それがHybridと呼ばれる理由です。


カスタムフロー

これは文字通りカスタマイズ可能なフローです。これは、OAuth2のすべてのプロトコル仕様に加えて、ビジネスで特定の認証/検証プロセスが必要な場合に使用できます。

IdentityServerはこの種の状況を十分に認識しており、設計により拡張性をサポートしています。ファクトリパターン、デコレータパターン、およびIoC/DIにより、IdentityServerに追加機能を実装しやすくなります。

6
hina10531