アイデンティティ管理
Identity-as-a-Service (「IDaaS」) は、アイデンティティ管理とアクセス管理のためのクラウドベースのサービスです。提供されるサービスには、通常、シングルサインオン (SSO) 、フェデレーション、パスワード管理などが含まれます。
どのプロトコルを使うか
Auth0 は、コンシューマー向け Web プロダクト (OAuth 2.0、OAuth 1.0、OpenID) にも、エンタープライズ向け導入 (SAML、WS-Federation、LDAP) にも対応する、実績ある一般的で広く使われている ID プロトコルを実装しています。ビジネスニーズに最も適したものを自由に選んで利用できます。
OAuth と OpenID Connect (OIDC) の違い
認証フロー
- Web アプリ (OIDC の用語では Client) は、ユーザーエージェント (ブラウザー) を Auth0 (OIDC の用語では Authorization Server) にリダイレクトして、認証リクエストを開始します。
- Auth0 は (ユーザーエージェント経由で) ユーザーを認証します。ユーザーが初めてこのフローを実行する場合は、アプリケーションに付与される権限 (たとえば、メッセージの投稿や連絡先の一覧表示) が示された同意画面が表示されます。ユーザーはサービスにログインし (まだログインしていない場合) 、アプリケーションへのアクセスを承認します。
- ユーザーがアクセスを許可すると、Auth0 はクエリー文字列に認可コードを付与して、ユーザーエージェントをアプリケーションにリダイレクトします。
- アプリケーションは認可コードとアプリケーションの認証情報 (client_id と client_secret) を Auth0 に送信し、トークンを要求します。
- Auth0 はアプリケーションを認証し (client_id と client_secret を使用) 、認可コードを検証します。有効であれば、Auth0 は ID Token を返します。

Form Post Response Mode
response_type=id_token&response_mode=form_post を指定した OAuth 2.0 Form Post Response Mode を使用することもできます。response_type=id_token リクエストパラメーターにより、レスポンスには認可コードではなく ID Token が直接含まれます。一方、response_mode=form_post では、ID Token と残りの Authorization Response パラメーターが HTML フォームの値としてエンコードされ、User Agent で自動送信されます。この方法を使うと、認可コードを ID Token に交換する必要がないため、認証フローを最適化できます。ただし、アプリの実装に使用している技術がこれをサポートしている必要があります (ASP .NET Core middleware はサポートしています) 。詳しくは、OAuth 2.0 Form Post Response Mode specification を参照してください。id_token と表記されます) は、ID 情報を含む JSON Web Token (JWT) です。アプリケーションはこれを利用して、ユーザー名やメールアドレスなどのユーザー情報を取得し、通常は UI に表示します。
トークンについてさらに詳しく
- ヘッダーには、トークンの種類と、トークンの内容に対して使用されたハッシュアルゴリズムが含まれます。
- 本文は payload とも呼ばれ、ユーザーに関する ID クレームを含みます。クレームの中には登録済みの名前を持つものがあり、たとえばトークンの発行者、トークンの主体 (クレームの対象者) 、発行時刻などがあります。そのほかの名前を持つ追加のクレームも任意に加えられますが、JWT がブラウザーの URL サイズ制限を超えないよう注意が必要です。
- 署名は、JWT の受信者が JWT に含まれる情報の完全性を検証するために使用されます。
ID Token を検証する方法
- ID Token が暗号化されている場合は、アプリケーションが指定した鍵とアルゴリズムを使用して復号します。
- OpenID Provider の Issuer Identifier は、
iss(issuer) クレームの値と一致している必要があります。 aud(audience) クレームには、アプリケーションのclient_id値が含まれている必要があります。ID Token にアプリケーションが有効な audience として記載されていない場合、またはアプリケーションが信頼していない別の audience が含まれている場合は、その ID Token を拒否しなければなりません。- ID Token に複数の audience が含まれている場合、アプリケーションは
azpクレームが存在することを確認する必要があります。 azp(authorized party) クレームが存在する場合、アプリケーションは、その値が自身のclient_idであることを確認する必要があります。- アプリケーションは、JWT の
algヘッダーパラメータで指定されたアルゴリズムを使用し、JWS に従って ID Token の署名を検証しなければなりません。アプリケーションは、Issuer から提供された鍵を使用する必要があります。 algの値は、デフォルトのRS256、または登録時にアプリケーションがid_token_signed_response_algパラメータで送信したアルゴリズムである必要があります。- JWT の
algヘッダーパラメータでHS256、HS384、HS512などの MAC ベースのアルゴリズムが使用されている場合は、aud(audience) クレームに含まれるclient_idに対応するclient_secretの UTF-8 表現のオクテット列を、署名検証用の鍵として使用します。MAC ベースのアルゴリズムについては、audが複数の値を持つ場合、またはaudの値と異なるazp値が存在する場合の動作は規定されていません。 - 現在時刻は、
expクレームが表す時刻より前でなければなりません。 iatクレームは、現在時刻から大きく離れた時刻に発行されたトークンを拒否するために使用できます。これにより、攻撃を防ぐために nonce を保持しておく必要がある期間を制限できます。許容範囲はアプリケーションごとに異なります。- Authentication Request で
nonce値が送信されていた場合は、nonceクレームが存在し、その値が Authentication Request で送信された値と同一であることを確認する必要があります。アプリケーションは、リプレイ攻撃に対してnonce値を確認する必要があります。リプレイ攻撃を検出する具体的な方法は、アプリケーションごとに異なります。 acrクレームが要求されていた場合、アプリケーションは、表明されたクレーム値が適切であることを確認する必要があります。auth_timeクレームが、このクレームに対する明示的な要求またはmax_ageパラメータの使用によって要求されていた場合、アプリケーションはauth_timeクレーム値を確認し、最後の End-User 認証から長時間が経過していると判断した場合は、再認証を要求する必要があります。
ID Token をサーバーに保存する場合は、必ず安全に保存してください。