"invalid_grant" エラーの理解とトラブルシューティングについて探究する: OIDC の承認を探求する
OpenID Connect(OIDC)の承認の基本を学び、"invalid_grant" エラーのトラブルシューティング方法を理解します。
背景
私たちのコミュニティでは、ユーザーからの繰り返しの質問をよく耳にします: Logto の "invalid_grant" エラーって何? 例えば #503
これは一部のユーザーが Logto を自分たちのアプリケーションに統合する際の一般的な問題で、このエラーの背後にある理由は場合によります。そして、提供される文脈が限られているため、説明するのが難しいことがあります。そのため、正確な OIDC の概念を理解し、問題のトラブルシューティング方法を学ぶことがすべての人にとって必要不可欠です。
では OIDC の承認について基本的な知識を深めていきましょう。
OIDC 承認の解説
私たちが以前のブログ記事で紹介したように、OpenID Connect (OIDC)は OAuth 2.0の上に構築されたプロトコルです。
OIDC または OAuth2 の状況下では、承認はリソースオーナー(通常はユーザー)からクライアントアプリケーションに対して許可された一連の許可を指します。承認はクライアントアプリケーションがユーザーの身元情報やその他の保護されたリソースにアクセスするために必要不可欠です。OIDC には、アプリケーションがアクセスト ークンを取得する方法とそのシナリオごとに適したいくつかの承認タイプが定義されています。
以下に OIDC の承認をより理解しやすくするための一つの例えをご紹介します。
異なる国を旅行するとき、各国が入国のためのビザスタンプを要求することを想像してみてください。このシナリオでは、あなたのパスポートはあなたのユーザーアカウントとして機能し、個人情報を含んでいます。OIDC の承認は、あなたが国に入るためのビザを申請する方法のようなものです。ビザが発行されると、その国に入るための "トークン" を事実上取得することになります。
同様に、アプリケーションを使用する際、承認リクエストは、認証サーバーによるアクセスの許可を求める行為を指します。認証サーバーはあなたの身元を確認し、アプリケーションにサインインするための "ビザ"(アクセストークン)を発行します。
一般的に使用される OIDC 承認タイプ:
- 認証コード承認: これは OIDC で最も一般的に使用される承認タイプです。これには、ユーザーを認証サーバーにリダイレクトし、認証コードを取得し、アプリケーションに戻ってコードをアクセストークンと交換するという一連のプロセスが含まれます。これは、外国に入国する前に大使館からビザを申請する標準的なプロセスと考えることができます。
- リフレッシュトークン承認: OIDC では、この承認タイプを使用してクライアントアプリケーションが以前に発行されたリフレッシュトークン を使用して新たなアクセストークンを取得することができます。これは一般的に、ユーザーに資格情報を再入力させることなくユーザーセッションを延長するために使用されます。あなたのビザがあなたがもう一度税関を通らずに外国での滞在を延長できる魔法のカードを持っているように想像してみてください。
- 含蔵承認: この承認形式は、レガシーなブラウザベースのアプリケーションを使用したり、認証コード承認よりもセキュリティが低いです。これはクライアントアプリケーションに直接アクセストークンを返します。これは "ビザオンアライバル" のように動作します。事前のビザ申請は必要ありません。
- クライアント認証承認: サーバー間通信に適しており、この承認タイプを使用すると、クライアントアプリケーションはその資格情報(クライアント ID とクライアント秘密)を使用して認証サーバーと直接認証することができます。これは特別なエージェントがビザ申請プロセスを経ずに特別な仕事バッジを提示して国に入ることに似ています。
承認オブジェクトモデル:
Logto では、承認はオブジェクトエンティティとしてデータベースに保持され、ユーザーアカウント ID、アプリケーション ID、関連する OIDC リソースとスコープ、有効期限などの情報を含んでいます。それぞれのリフレッシュトークンとアクセストークンは特定の承認オブジェクトに関連付けられています。