次の方法で共有


Azure Active Directory B2C でアクセス トークンを要求する

重要

2025 年 5 月 1 日より、Azure AD B2C は新規のお客様向けに購入できなくなります。 詳細については、FAQ を参照してください

アクセス トークンには、API に付与されたアクセス許可を識別するために Azure Active Directory B2C (Azure AD B2C) で使用できる要求が含まれています。 リソース サーバーを呼び出すには、HTTP 要求にアクセス トークンを含める必要があります。 アクセス トークンは、Azure AD B2C からの応答で access_token として示されます。

この記事では、Web アプリケーションと Web API のアクセス トークンを要求する方法について説明します。 Azure AD B2C のトークンの詳細については、Azure Active Directory B2C のトークンの概要を参照してください。

Web API チェーン (On-Behalf-Of) は Azure AD B2C ではサポートされていません 。 多くのアーキテクチャには、Azure AD B2C によってセキュリティ保護された別のダウンストリーム Web API を呼び出す必要がある Web API が含まれています。 このシナリオは、Web API バックエンドを持つクライアントで一般的であり、別のサービスを呼び出します。 このチェーン Web API シナリオは、OAuth 2.0 JWT ベアラー資格情報の付与 (オンBehalf-Of フローとも呼ばれます) を使用してサポートできます。 ただし、現在、オンBehalf-Of フローは Azure AD B2C には実装されていません。 On-Behalf-Of は Microsoft Entra ID に登録されているアプリケーションでは機能しますが、トークンを発行しているテナント (Microsoft Entra ID または Azure AD B2C) に関係なく、Azure AD B2C に登録されているアプリケーションでは機能しません。

[前提条件]

スコープ

スコープは、保護されたリソースへのアクセス許可を管理する方法を提供します。 アクセス トークンが要求されると、クライアント アプリケーションは要求の スコープ パラメーターで目的のアクセス許可を指定する必要があります。 たとえば、 を持つ API のreadのスコープを指定するには、スコープがhttps://contoso.onmicrosoft.com/apiされます。

スコープは、スコープベースのアクセス制御を実装するために Web API によって使用されます。 たとえば、Web API のユーザーが読み取りと書き込みの両方のアクセス権を持つ場合や、Web API のユーザーが読み取りアクセス権のみを持っている場合があります。 同じ要求で複数のアクセス許可を取得するには、要求の 1 つの スコープ パラメーターに複数のエントリをスペースで区切って追加します。

次の例は、URL でデコードされたスコープを示しています。

scope=https://contoso.onmicrosoft.com/api/read openid offline_access

次の例は、URL でエンコードされたスコープを示しています。

scope=https%3A%2F%2Fcontoso.onmicrosoft.com%2Fapi%2Fread%20openid%20offline_access

クライアント アプリケーションに付与されているスコープよりも多くのスコープを要求した場合、少なくとも 1 つのアクセス許可が付与されている場合、呼び出しは成功します。 結果のアクセス トークンの scp 要求には、正常に付与されたアクセス許可のみが設定されます。

OpenID Connect のスコープ

OpenID Connect 標準では、いくつかの特殊なスコープ値が指定されています。 次のスコープは、ユーザーのプロファイルにアクセスするためのアクセス許可を表します。

  • openid - ID トークンを要求します。
  • offline_access - 認証コード フローを使用して更新トークンを要求します。
  • 00000000-0000-0000-0000-0000000000000 - スコープとしてクライアント ID を使用すると、同じクライアント ID で表される独自のサービスまたは Web API に対して使用できるアクセス トークンがアプリに必要であることが示されます。

要求の/authorize パラメーターにtokenが含まれている場合、スコープ パラメーターには、付与されるopenidおよびoffline_access以外のリソース スコープが少なくとも 1 つ含まれている必要があります。 それ以外の場合、 /authorize 要求は失敗します。

トークンを要求する

アクセス トークンを要求するには、承認コードが必要です。 承認コードの /authorize エンドポイントへの要求の例を次に示します。

GET https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/authorize?
client_id=<application-ID>
&nonce=anyRandomValue
&redirect_uri=https://jwt.ms
&scope=<application-ID-URI>/<scope-name>
&response_type=code

クエリ文字列の値を次のように置き換えます。

  • <tenant-name> - Azure AD B2C テナントの名前。 カスタム ドメインを使用している場合は、 tenant-name.b2clogin.com をドメイン ( contoso.com など) に置き換えます。
  • <policy-name> - カスタム ポリシーまたはユーザー フローの名前。
  • <application-ID> - ユーザー フローをサポートするために登録した Web アプリケーションのアプリケーション識別子。
  • <application-ID-URI> - クライアント アプリケーションの [API の公開 ] ブレードで設定したアプリケーション識別子 URI。
  • <scope-name> - クライアント アプリケーションの [ API の公開 ] ブレードで追加したスコープの名前。
  • <redirect-uri> - クライアント アプリケーションを登録したときに入力した リダイレクト URI

要求がどのように動作するかを理解するには、要求をブラウザーに貼り付けて実行してください。

これは、アクションを実行するフローの対話型部分です。 ユーザー フローのワークフローを完了するように求められます。 これには、サインイン フォームまたはその他の数の手順でユーザー名とパスワードを入力する必要があります。 実行する手順は、ユーザー フローの定義方法によって異なります。

承認コードを含む応答は、次の例のようになります。

https://jwt.ms/?code=eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMC...

承認コードを正常に受信したら、それを使用してアクセス トークンを要求できます。 パラメーターは、HTTP POST 要求の本文にあります。

POST <tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/token HTTP/1.1
Host: <tenant-name>.b2clogin.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&client_id=<application-ID>
&scope=<application-ID-URI>/<scope-name>
&code=eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMC...
&redirect_uri=https://jwt.ms
&client_secret=2hMG2-_:y12n10vwH...

この POST HTTP 要求をテストする場合は、 Microsoft PowerShell などの任意の HTTP クライアントを使用できます。

成功したトークン応答は次のようになります。

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrN...",
    "token_type": "Bearer",
    "not_before": 1549647431,
    "expires_in": 3600,
    "expires_on": 1549651031,
    "resource": "f2a76e08-93f2-4350-833c-965c02483b11",
    "profile_info": "eyJ2ZXIiOiIxLjAiLCJ0aWQiOiJjNjRhNGY3ZC0zMDkxLTRjNzMtYTcyMi1hM2YwNjk0Z..."
}

https://jwt.msを使用して返されたアクセス トークンを調べると、次の例のようになります。

{
  "typ": "JWT",
  "alg": "RS256",
  "kid": "X5eXk4xyojNFum1kl2Ytv8dl..."
}.{
  "iss": "https://contoso0926tenant.b2clogin.com/c64a4f7d-3091-4c73-a7.../v2.0/",
  "exp": 1549651031,
  "nbf": 1549647431,
  "aud": "f2a76e08-93f2-4350-833c-965...",
  "oid": "1558f87f-452b-4757-bcd1-883...",
  "sub": "1558f87f-452b-4757-bcd1-883...",
  "name": "David",
  "tfp": "B2C_1_signupsignin1",
  "nonce": "anyRandomValue",
  "scp": "read",
  "azp": "38307aee-303c-4fff-8087-d8d2...",
  "ver": "1.0",
  "iat": 1549647431
}.[Signature]

次のステップ