web-dev-qa-db-ja.com

プレーンなOAuth2ではなくOpenID Connectを使用する理由

ユーザーを認証する方法として OAuth 2. を使い始めました。それは素晴らしい働きをします-私は各プロバイダーのアイデンティティ/プロファイルAPIを使用して、ユーザーの検証されたメールアドレスを取得します。

今、私は OpenID Connect について読み、少し混乱しています。

OpenID ConnectとOAuth2を介したID APIの使用の違いは何ですか?私が標準のプロファイルAPIを持っているだけで、"email"または"emails" JSONが返されるかどうかを心配する必要はありませんか?

それとも、OpenID Connectアプローチが私の最初のアプローチよりも安全になる、それ以上のものがありますか?

117
rdmueller

OpenID Connectは、アクセストークンと idトークン を提供します。 idトークンは [〜#〜] jwt [〜#〜] であり、認証されたユーザーに関する情報が含まれています。 IDプロバイダーによって署名され、IDプロバイダーにアクセスしなくても読み取りと検証が可能です。

さらに、OpenID Connectは、oauth2が自由に選択できるかなり多くのことを標準化します。たとえば、スコープ、エンドポイントの検出、クライアントの動的登録などです。

これにより、ユーザーが複数のIDプロバイダーから選択できるコードを簡単に記述できます。

81
flup

OAuthは、アクセストークンを使用した認証のみを提供します。 OpenID接続は、ユーザー認証情報を提供するためにOAuth 2に基づいて構築されています。ただし、OAuthよりも堅牢な実装は提供されません(OAuthを使用し、OpenIDプロバイダーとの対話を追加するため)。

OpenID Connect 1.0は、OAuth 2.0 [RFC6749]プロトコルの上にあるシンプルなIDレイヤーです。これにより、クライアントは、承認サーバーによって実行された認証に基づいてエンドユーザーの身元を確認し、相互運用可能なRESTのような方法でエンドユーザーに関する基本的なプロファイル情報を取得できます。 OpenID Connect Core 1.0-ドラフト17

OpenID Connectは、ユーザーIDを取得する「標準」の方法を提供します。 OAuthとAPIを使用する場合は、リソースごとにリクエストを調整する必要があります。これにより、常に同じ情報が提供されるとは限らず、時間とともに変化する可能性があります。また、概念的には、OAuthを使用して、ユーザーの認証ではなくAPIの使用を許可します。

背景として、OAuth 2.0 Authorization Framework [RFC6749]およびOAuth 2.0 Bearer Token Usage [RFC6750]仕様は、サードパーティアプリケーションがHTTPリソースへの制限付きアクセスを取得および使用するための一般的なフレームワークを提供します。それらは、リソースにアクセスするためにアクセストークンを取得して使用するメカニズムを定義しますが、ID情報を提供するための標準的な方法は定義しません。特に、OAuth 2.0をプロファイリングしないと、エンドユーザーの認証に関する情報を提供できません。 OpenID Connect Core 1.0-ドラフト17

OpenID connectはid_tokenにユーザーに関する情報を提供することに注意してください。ただし、すべての情報が必要な場合でも、access_tokenでOpenIDプロバイダーにユーザー情報を取得するように要求する必要があります(これは初めて見たときに混乱しました)。これは、APIまたはOpenIDプロバイダーからのユーザー情報の要求がほぼ同じ方法を使用することを示しています。下書きの5.3.1. userinfo requestを参照してください。

30
Nereis

OAuthは認証プロトコルであり、保護されたリソースへのアクセスを認証する方法を提供します。承認プロセスの副産物は、ユーザーが認証されることです。

技術的には、OAuthはユーザーに関する情報を提供する必要はありません。提供されるのは、ユーザーがアプリケーションに一部のデータにアクセスする権限を付与したことの検証です。これはスコープによって管理されます認可付与の。

OpenID Connectは、認証されたユーザーに関する情報をアプリケーションが取得する方法を提供します。最も重要なことは、情報が有効であることを保証するレベルを提供します(とにかく、承認サーバーに関する限り)。これは、IDフェデレーションを容易にするために使用できます。

以前は、OAuthを使用して、ユーザーのID情報へのアクセスを許可するスコープを付与することでフェデレーションを実現していました。OpenIDConnectはそのスコープを標準化しています。

16
Tim

OpenID ConnectはOAuth2のプロファイルです... IDプロバイダーが特定のユーザーのクレームをクライアント(ウェブサイト/モバイルアプリケーション)にリリースすることを許可する人を許可するアーキテクチャを定義しています。

OAuth2は、IAMの専門家によって「悪魔」として不当に扱われているリソース所有者パスワード資格情報付与を提供します。

OpenID Connect APIの一般的なパターンは3つのステップです。
1)コードを取得
2)access_tokenrefresh_tokenid_tokenなどのトークンを取得します
3)ユーザー名、メールなどのクレームを含むユーザー情報を取得します。
JWTであるid_tokenのスキーマは、他の多くの詳細と同様に、OpenID Connectスコープで定義されます。

OpenID Connectを使用するもう1つの理由は、モバイルソフトウェアの集中認証に安全なソリューションがあることです(少なくともIOSおよびAndroid)。Googleが定義している現在のベストプラクティスは、モバイルアプリケーションがWebビューにCookieまたは資格情報を表示しないようにブロックします。GoogleはAppAuth IOS and Androidライブラリを公開しました。 Googleの資格情報!これを書いている時点では、Google、OKTA、Ping、および私の製品Gluuなど、Google OpenID Connect AppAuthソフトウェアをサポートするOpenIDプロバイダー(IDPとも呼ばれます)がいくつかあります。

関連項目:

  • ネイティブアプリ用OAuth 2.0 draft-wdenniss-oauth-native-apps-02
  • IOSのAppAuth
  • Android用AppAuth
8
Mike Schwartz

認証方法としてOAuthを使用することはお勧めしません。委任された承認方法として明示的に設計されています。

Facebookは認証方法としてOAuthを使用していましたが、企業家がFacebookからaccess_tokenを盗む方法を発見しました- 完全なブログエントリ

OpenID Connectは、このようなメカニズムを通じてアクセストークンを盗むことをはるかに困難にします。

5
Alex White

オープンID接続は、OAuthの上に構築されているため、より堅牢です。OAuthは、認証にのみ使用されるプロトコルであり、オープンID接続はOAuthと非常に似ていますが、OAuthの機能も組み合わせています。このプロトコルを使用してRPとIPの間の通信を開始できます。 OAuthプロトコルなので、Open Id Connectを使用する方が良いでしょう。

1
Utsav