web-dev-qa-db-ja.com

OAuth 2 access_token vs OpenId Connect id_token

私は以前にOAuth 2で作業したことがありますが、Open ID Connectの初心者です。

access_tokenid_tokenの両方に遭遇したチュートリアルとドキュメントを読んでいますaccess_tokenは、OAuth = 2およびid_tokenはJSON Web Tokenですこれには、ユーザーのID、アルゴリズム、発行者、およびそれを検証するために使用できるその他のさまざまな情報が含まれます。APIプロバイダーも見ています。 access_tokenとid_tokenの両方を提供します。私が知る限り、下位互換性のためです。

私の質問は保護されたリソースへのアクセスにaccess_tokenとid_tokenの両方を使用することは可能ですか?または、id_tokenは検証目的だけであり、access_tokenは保護されたリソースへのアクセスを取得するために使用されますか?

28
ajaybc

元々、OAuthとOpenIdは異なる目的のために設計されています:認証用のOpenIdとOAuth承認用です。OpenIdConnectは2つの統合であり、両方に役立ちます。ただし、元の機能は変更されません。このことを念頭に置いて、自分自身を見つけることができるはずです。;-)

Id_tokenは、認証されたユーザーを識別するために使用されます。 SSOの場合。保護されたリソースへのアクセス権を証明するには、access_tokenを使用する必要があります。 OpenId Connectのuserinfoエンドポイント用。

40

access_tokenは、Auth0で特定のAPI(/ userinfoなど)またはAuth0で定義したAPIを呼び出すのに役立ちます。

id_tokenはJWTであり、ログインしているユーザーを表します。多くの場合、アプリで使用されます。

保護されたリソースへのアクセスにaccess_tokenとid_tokenの両方を使用することは可能ですか?

完全ではありませんが、最初に、id_tokenを使用してログインする必要があります。
2番目に、accessTokenを取得します。
最後に、accessTokenを使用してデータにアクセスします。

2
Yang

答えを提供する別の角度:

id_token

  • Id_tokenはJWTです-注意してください!
  • ユーザー/リソース所有者のIDに関するクレームが含まれています
  • 有効なid_tokenがあることは、ユーザーが認証されていることを意味します

アクセストークン

  • Access_tokenは無記名トークンです
  • ベアラートークンは、ベアラーがそれ以上の識別なしでリソースにアクセスできることを意味します
  • Access_tokenはJWT(付録ポイント1を参照)または不透明にすることができます

もっと読みたい場合: oidcとoauthのトーク​​ンのタイプ

0
human

Id_tokenが導入された理由とその最初の目的を説明した記事は次のとおりです: OpenID ConnectとFacebook Connectでid_tokenが必要な理由 。つまり、Facebookで使用されている Hybrid Flow を標準化しようとしました。

Id_tokenをaccess_tokenとして使用することを検討しました。次の理由により、このオプションを拒否しました。

  • 多くのプロバイダーは既存のOAuth変更が難しいエンドポイントのトークン形式を持っています。
  • ブラウザーに長期アクセストークンがCookieとして保存されることは望ましくありません。
  • 2つのトークンのセマンティクスをオーバーロードしている2つのトークンの受信者が明らかに異なるため、長期的には柔軟性が低下し、複雑さが増します。
0