次の方法で共有


Azure Active Directory B2C カスタム ポリシーで OAuth2 技術プロファイルを定義する

重要

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

Azure Active Directory B2C で、カスタム ポリシーは、主に、複雑なシナリオに取り組む用途向けに設計されています。 ほとんどのシナリオで、組み込みユーザー フローを使用することをお勧めします。 まだ行っていない場合は、Active Directory B2C でのカスタム ポリシーの概要に関する記事で、カスタム ポリシー スターター パックの詳細を確認してください。

Azure Active Directory B2C (Azure AD B2C) は、OAuth2 プロトコル ID プロバイダーのサポートを提供します。 OAuth2 は、承認と委任認証の主要なプロトコルです。 詳細については、 RFC 6749 The OAuth 2.0 Authorization Framework を参照してください。 OAuth2 テクニカル プロファイルを使用すると、Facebook などの OAuth2 ベースの ID プロバイダーとフェデレーションできます。 ID プロバイダーとのフェデレーションにより、ユーザーは、既存のソーシャル ID またはエンタープライズ ID でサインインできます。

プロトコル

Protocol 要素の Name 属性は OAuth2 に設定する必要があります。 たとえば、 Facebook-OAUTH 技術プロファイルのプロトコルは OAuth2です。

<TechnicalProfile Id="Facebook-OAUTH">
  <DisplayName>Facebook</DisplayName>
  <Protocol Name="OAuth2" />
  ...

入力クレーム

InputClaimsInputClaimsTransformations の要素は不要です。 ただし、ID プロバイダーにさらに多くのパラメーターを送信したい場合があります。 次の例では、値が である contoso.com クエリ文字列パラメーターを認可要求に追加しています。

<InputClaims>
  <InputClaim ClaimTypeReferenceId="domain_hint" DefaultValue="contoso.com" />
</InputClaims>

出力クレーム

OutputClaims 要素には、OAuth2 ID プロバイダーによって返される要求の一覧が含まれています。 お使いのポリシーに定義されている要求の名前を、ID プロバイダーで定義されている名前にマップする必要があるかもしれません。 DefaultValue 属性を設定している限り、ID プロバイダーにより返されない要求を追加することもできます。

OutputClaimsTransformations 要素には、出力要求を修正したり新しい要求を生成するために使用される、OutputClaimsTransformation 要素のコレクションが含まれている場合があります。

次の例は、Facebook ID プロバイダーによって返される要求を示しています。

  • first_name要求は、givenName 要求にマップされます。
  • last_name要求は要求にマップされます。
  • 名前マッピングのない displayName 要求。
  • どの名前にもマップされていない email 要求。

技術プロファイルは、ID プロバイダーによって返されない要求も返します。

  • ID プロバイダーの名前を含む identityProvider 要求。
  • authenticationSource クレームの既定値は socialIdpAuthentication です。
<OutputClaims>
  <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="id" />
  <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="first_name" />
  <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="last_name" />
  <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
  <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
  <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="facebook.com" />
  <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
</OutputClaims>

認証エンドポイントのメタデータ

承認フローは、Azure AD B2C がユーザーを OAuth2 ID プロバイダーの /authorize エンドポイントに誘導したときに開始されます。 認証エンドポイントへの呼び出しは、フローの対話型部分であり、ユーザーはここでアクションを実行します。 この時点で、ユーザーは OAuth2 ID プロバイダーでサインインを完了するように求められます。 たとえば、ユーザー名とパスワードを入力します。

Azure AD B2C は、クライアント ID、スコープ、リダイレクト URI、および ID プロバイダーからアクセス トークンを取得するために必要なその他のパラメーターを提供することで、承認要求を作成します。 このセクションでは、ID プロバイダーの /authorize エンドポイントへの要求を構成できるようにする認証エンドポイントのメタデータについて説明します。

認証エンドポイントへの要求は、常に HTTP GET です。 次のサンプルは、承認エンドポイントの呼び出しを示しています。

GET https://login.contoso.com/oauth/v2/authorization?
client_id=12345
&response_type=code
&response_mode=query
&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob
&scope=profile%20offline_access
&redirect_uri=https%3a%2f%2fabrikam.b2clogin.com%2fabrikam.onmicrosoft.com%2foauth2%2fauthresp
&state=...

次の表に、認証エンドポイントのメタデータを示します。

特性 必須 説明
authorization_endpoint イエス RFC 6749 に準拠した認証エンドポイントの URL。
client_id イエス ID プロバイダーのアプリケーション識別子。
AdditionalRequestQueryParameters いいえ 追加の要求クエリ パラメーター。 たとえば、追加のパラメーターを ID プロバイダーに送信する場合があります。 コンマ区切り文字を使用して、複数のパラメーターを含めることができます。
response_mode いいえ Azure AD B2C に結果を返信するために、ID プロバイダーが使用するメソッド。 指定できる値: queryform_post (既定)、または fragment
scope いいえ OAuth2 ID プロバイダーの仕様に従って定義される要求のスコープ。 たとえば、openidprofileemail などです。
UsePolicyInRedirectUri いいえ リダイレクト URI を構築するときにポリシーを使用するかどうかを示します。 ID プロバイダーでアプリケーションを構成するときは、リダイレクト URI を指定する必要があります。 リダイレクト URI は Azure AD B2C を指します (https://{your-tenant-name}.b2clogin.com/{your-tenant-name}.onmicrosoft.com/oauth2/authresp)。 true を指定した場合は、使用するポリシーごとにリダイレクト URI を追加する必要があります。 たとえば、 https://{your-tenant-name}.b2clogin.com/{your-tenant-name}.onmicrosoft.com/{policy-name}/oauth2/authrespと指定します。

トークンエンドポイントのメタデータ

ユーザーが ID プロバイダーの承認エンドポイントで認証を完了すると、承認 code を含む応答が Azure AD B2C に返されます。 Azure AD B2C は、ID プロバイダーの /token エンドポイントに POST 要求を送信することで、アクセス トークンの認証コードを引き換えます。 このセクションでは、ID プロバイダーの /token エンドポイントへの要求を構成できるトークン エンドポイント メタデータについて説明します。

次の HTTP 要求は、ID プロバイダーのトークン エンドポイントに対する Azure AD B2C 呼び出しを示しています。

POST https://contoso/oauth2/token 
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&client_id=12345&scope=profile offline_access&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq... 

次の表に、トークン エンドポイントのメタデータを示します。

特性 必須 説明
AccessTokenEndpoint イエス トークンエンドポイントのURL。 たとえば、https://www.linkedin.com/oauth/v2/accessToken のようにします。
HttpBinding いいえ トークン エンドポイントへの予期される HTTP バインディング。 指定できる値: GET または POST
AccessTokenResponseFormat いいえ アクセス トークン エンドポイント呼び出しの形式。 たとえば、Facebook では HTTP GET メソッドが必要ですが、アクセス トークンの応答は JSON 形式です。 使用可能な値: DefaultJson、および JsonP
ExtraParamsInAccessTokenEndpointResponse いいえ 一部の ID プロバイダーによって AccessTokenEndpoint からの応答で返される可能性のある追加のパラメーターが含まれます。 たとえば、AccessTokenEndpoint からの応答には、openid 要求クエリ文字列のaccess_token以外の必須パラメーターである "" などの追加パラメーターが含まれています。 複数のパラメータ名はエスケープし、コンマ ',' 区切り文字で区切る必要があります。
token_endpoint_auth_method いいえ Azure AD B2C からトークン エンドポイントに認証ヘッダーを送信する方法を指定します。 指定できる値: client_secret_post (既定値)、および client_secret_basicprivate_key_jwt。 詳細については、OpenID Connect クライアント認証に関するセクションをご覧ください。
token_signing_algorithm いいえ token_endpoint_auth_methodprivate_key_jwt に設定されている場合に使用する署名アルゴリズムを指定します。 指定できる値: RS256 (既定値) または RS512

HTTP バインディング方法の構成

デフォルトでは、トークンエンドポイントへのリクエストは HTTP POST を使用します。

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="HttpBinding">POST</Item>

次の HTTP 呼び出しは、HTTP POST 要求を使用したトークン エンドポイントの呼び出しを示しています。

POST /oauth2/token

client_id=abcd&client_secret=1234&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

/token エンドポイントで HTTP GET メソッドを使用する必要がある ID プロバイダーの場合は、HttpBinding メタデータを GET に設定します。 次の例では、トークンエンドポイントがレスポンスを JSON 形式で返すため、 AccessTokenResponseFormatjson に設定されていることに注意してください。

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="HttpBinding">GET</Item>
<Item Key="AccessTokenResponseFormat">json</Item>
GET /oauth2/token?client_id=abcd&client_secret=1234&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

アクセストークンの応答形式を設定する

HTTP POST メソッドをサポートする ID プロバイダーの場合、 AccessTokenResponseFormat はデフォルトで json に設定されています。 ID プロバイダーが HTTP GET 要求をサポートしている場合は、アクセス トークンの応答形式を明示的に json に設定する必要があります。

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="HttpBinding">GET</Item>
<Item Key="AccessTokenResponseFormat">json</Item>

次の例は、JSON 形式のトークンエンドポイント応答を示しています。

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...",
    "token_type": "Bearer",
    "not_before": 1637924390,
    "expires_in": 960000,
}

認証方法を構成する

トークン エンドポイントへの要求には、常に認証が必要です。 既定では、Azure AD B2C は ID プロバイダーにクライアント資格情報を提供します。 デフォルトでは、認証方法は client_secret_postで、要求本文にクライアント資格情報 (client_idclient_secret) が含まれます。

トークン エンドポイントに対する次の HTTP 要求には、POST データの client_idclient_secret が含まれています。 GET 要求の場合、 client_idclient_secret はクエリ文字列パラメーターに含まれます。

POST /oauth2/token

client_id=abcd&client_secret=1234&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

/tokenエンドポイントで HTTP 基本認証を使用する必要がある ID プロバイダーの場合は、token_endpoint_auth_method メタデータを client_secret_basic に設定します。 このタイプの認証方法では、クライアント資格情報は HTTP 基本認証スキームを使用して ID プロバイダーに渡されます。

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="token_endpoint_auth_method">client_secret_basic</Item>

次の HTTP 要求は、HTTP 基本認証を使用したトークン エンドポイントの呼び出しを示しています。 認証ヘッダーには、クライアント ID とクライアント シークレットが client_ID:client_secret (base64 エンコード) の形式で含まれています。

POST /oauth2/token

Authorization: Basic YWJjZDoxMjM0

redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

秘密鍵 JWT 認証をサポートする ID プロバイダーの場合は、 token_endpoint_auth_method メタデータを private_key_jwt に設定します。 この種類の認証方法では、Azure AD B2C に提供された証明書を使用して署名付きアサーションが生成され、 client_assertion パラメーターを介して ID プロバイダーに渡されます。 client_assertion_typeurn:ietf:params:oauth:client-assertion-type:jwt-bearer に設定されます。 token_signing_algorithmメタデータは、JWT の署名アルゴリズムを指定します。

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="token_endpoint_auth_method">private_key_jwt</Item>
<Item Key="token_signing_algorithm">RS256</Item>

次の HTTP 要求は、秘密キー JWT 認証を使用したトークン エンドポイントの呼び出しを示しています。

POST /oauth2/token

client_assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImtpZCI6IjJFRFg0dWRYeDIxbXNoaXdJVzczMUY3OUZSbFJiUDZXVXJyZmktR1RFeVkifQ.eyJpc3MiOiJhYmNkIiwiZXhwIjoxNjM3OTI5ODY0LCJuYmYiOjE2Mzc5Mjk1NjQsImF1ZCI6Imh0dHBzOi8vNWRlNC0xMDktNjQtMTI0LTUzLm5ncm9rLmlvL2FjY2Vzc190b2tlbiIsImp0aSI6IjVxQWlGV2lEODNDbU1KWWNrejBRdGc9PSIsInN1YiI6ImFiY2QiLCJpYXQiOjE2Mzc5Mjk1NjR9.C4OtRnrLaQatpT5LP45O5Nb418S4v8yZi_C42ld440w&client_id=abcd&client_assertion_type=urn%3aietf%3aparams%3aoauth%3aclient-assertion-type%3ajwt-bearer&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

ユーザー情報エンドポイントのメタデータ

Azure AD B2C は、OAuth2 ID プロバイダーからアクセス トークンを取得した後、ユーザー情報エンドポイントを呼び出します。 ユーザー情報エンドポイント (要求エンドポイントとも呼ばれます) は、認証されたユーザーに関する要求を取得するように設計されています。 Azure AD B2C では、 ベアラー トークン認証 を使用して、ID プロバイダーのユーザー情報エンドポイントに対する認証を行います。 ベアラー トークンは、Azure AD B2C が ID プロバイダー /token エンドポイントから取得するアクセス トークンです。

ユーザー情報エンドポイントへの要求は、常に HTTP GET です。 アクセス トークンは、 access_token という名前のクエリ文字列パラメーターで送信されます。 次の HTTP 要求は、クエリ文字列パラメーターのアクセス トークンを使用したユーザー情報エンドポイントへの呼び出しを示しています。

GET /oauth2/claims?access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5... 

次の表に、ユーザー情報エンドポイントのメタデータを示します。

特性 必須 説明
ClaimsEndpoint イエス ユーザー情報エンドポイントの URL。 たとえば、https://api.linkedin.com/v2/me のようにします。
ClaimsEndpointAccessTokenName いいえ アクセス トークンのクエリ文字列パラメータの名前。 既定値: access_token
ClaimsEndpointFormatName いいえ 書式指定クエリ文字列パラメータの名前。 たとえば、この LinkedIn クレーム エンドポイント formatで名前を https://api.linkedin.com/v1/people/~?format=json として設定できます。
ClaimsEndpointFormat いいえ フォーマット照会文字列パラメータの値。 たとえば、この LinkedIn 請求エンドポイント jsonで値を https://api.linkedin.com/v1/people/~?format=json として設定できます。
BearerTokenTransmissionMethod いいえ トークンの送信方法を指定します。 デフォルトのメソッドはクエリ文字列です。 トークンを要求ヘッダーとして送信するには、 AuthorizationHeaderに設定します。
ExtraParamsInClaimsEndpointRequest いいえ 一部の ID プロバイダーによって ClaimsEndpoint 要求で返される可能性のある追加のパラメーターが含まれます。 複数のパラメータ名はエスケープし、コンマ ',' 区切り文字で区切る必要があります。

アクセス トークンのクエリ文字列パラメーターを構成する

ユーザー情報エンドポイントでは、特定のクエリ文字列パラメーターでアクセストークンを送信する必要がある場合があります。 アクセス トークンを含むクエリ文字列パラメーターの名前を変更するには、 ClaimsEndpointAccessTokenName メタデータを使用します。 次の例では、アクセス トークンのクエリ文字列パラメーターを token に設定しています。

<Item Key="ClaimsEndpoint">https://contoso.com/oauth2/claims</Item>
<Item Key="ClaimsEndpointAccessTokenName">token</Item>

次の HTTP 呼び出しは、 ClaimsEndpointAccessTokenNametoken に設定したユーザー情報エンドポイントの呼び出しを示しています。

GET /oauth2/claims?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

要求の形式を構成する

ClaimsEndpointFormatNameClaimsEndpointFormat を使用すると、キーと値のペアのクエリ文字列パラメーターをユーザー情報エンドポイントに送信できます。 次の例では、 format という名前のクエリ文字列パラメーターを、値を json で構成します。

<Item Key="ClaimsEndpoint">https://contoso.com/oauth2/claims</Item>
<Item Key="ClaimsEndpointFormatName">format</Item>
<Item Key="ClaimsEndpointFormat">json</Item>

次の HTTP 要求は、 ClaimsEndpointFormatNameClaimsEndpointFormat が構成されたユーザー情報エンドポイントへの呼び出しを示しています。

GET /oauth2/claims?format=json&access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

ベアラートークンの送信方法を構成する

デフォルトでは、アクセストークンはクエリ文字列パラメータを介して ID プロバイダのユーザー情報エンドポイントに送信されます。 HTTP Authorization ヘッダー内でトークンを送信するには、 BearerTokenTransmissionMethod メタデータを AuthorizationHeader に設定します。

<Item Key="ClaimsEndpoint">https://contoso.com/oauth2/claims</Item>
<Item Key="BearerTokenTransmissionMethod">AuthorizationHeader</Item>

次の HTTP 要求は、 BearerTokenTransmissionMethodAuthorizationHeader に設定されている場合にアクセス トークンがどのように渡されるかを示しています。

GET /oauth2/claims

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

トークンエンドポイントから返されたパラメータを渡す

一部の ID プロバイダーでは、トークン エンドポイントから返される追加のパラメーターをユーザー情報エンドポイントに渡す必要があります。 たとえば、トークンエンドポイントからの応答には、ユーザー情報エンドポイントの必須パラメーターである resource という名前のパラメーターが含まれています (アクセス トークン以外)。 ExtraParamsInClaimsEndpointRequestメタデータを使用して、渡す追加のパラメーターを指定します。 複数のパラメータ名はエスケープし、コンマ ',' 区切り文字で区切る必要があります。

次の JSON は、トークンエンドポイントによって返される JSON ペイロードと、 resource という名前のパラメータを示しています。

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...",
    "token_type": "Bearer",
    "not_before": 1549647431,
    "expires_in": 960000,
    "resource": "f2a76e08-93f2-4350-833c-965c02483b11"
}

resource パラメーターをユーザー情報エンドポイントに渡すには、次のメタデータを追加します。

<Item Key="ExtraParamsInClaimsEndpointRequest">resource</Item>

次の HTTP 要求は、 resource パラメーターがユーザー情報エンドポイントに渡される方法を示しています。

GET /oauth2/claims?resource=f2a76e08-93f2-4350-833c-965c02483b11&access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

セッション終了エンドポイント

アプリケーションをサインアウトするには、ユーザーを Azure AD B2C サインアウト エンドポイント (OAuth2 と OpenID Connect の両方) にリダイレクトするか、 LogoutRequest (SAML の場合) を送信します。 Azure AD B2C は、ブラウザーからユーザーのセッションをクリアします。 サインアウト要求が発生すると、Azure AD B2C は、ユーザーがサインインに使用した可能性のあるフェデレーション ID プロバイダーからのサインアウトを試みます。 OAuth2 ID プロバイダーのサインアウト URI は、 end_session_endpoint メタデータで構成されます。 ユーザーが Azure AD B2C 経由でアプリケーションからログアウトすると、非表示の iframe が作成され、Azure AD B2C サインアウト ページで end_session_endpoint が呼び出されます。

次の表に、ユーザー情報エンドポイントのメタデータを示します。

特性 必須 説明
end_session_endpoint イエス RFC 6749 に従った終了セッション エンドポイントの URL。
SingleLogoutEnabled いいえ サインイン中に技術プロファイルがフェデレーション ID プロバイダーからサインアウトを試行しているかどうかを示します。 詳しくは、Azure AD B2C のセッション サインアウトに関する記事をご覧ください。指定できる値は true(既定値) またはfalseです。

OAuth2 汎用メタデータ

次の表に、OAuth2 ID プロバイダーの汎用メタデータを示します。 メタデータは、OAuth2 技術プロファイルがトークンの検証を処理し、要求を取得し、エラー メッセージに対応する方法を記述します。

特性 必須 説明
IdTokenAudience いいえ id_token の対象ユーザー。 指定した場合、Azure AD B2C は、トークンが ID プロバイダーによって返される要求に含まれており、指定されたものと等しいかどうかを確認します。
ProviderName いいえ ID プロバイダーの名前。
ResponseErrorCodeParamName いいえ HTTP 200 (Ok) 経由で返されるエラー メッセージを含むパラメーターの名前。
IncludeClaimResolvingInClaimsHandling   いいえ 入力と出力の要求について、要求の解決を技術プロファイルに含めるかどうかを指定します。 指定できる値: true または false (既定値)。 技術プロファイルでクレーム リゾルバーを使用する場合は、これを trueに設定します。
ResolveJsonPathsInJsonTokens いいえ 技術プロファイルが JSON パスを解決するかどうかを示します。 指定できる値: true または false (既定値)。 このメタデータを使用して、ネストされた JSON 要素からデータを読み取ります。 OutputClaim で、出力する JSON パス要素に PartnerClaimType を設定します。 例: firstName.localized、または data[0].to[0].email

暗号化キー

CryptographicKeys 要素には次の属性が存在します。

特性 必須 説明
client_secret イエス ID プロバイダー アプリケーションのクライアント シークレット。 暗号化キーは、 response_types メタデータが code に設定されている場合にのみ必要です。 この場合、Azure AD B2C は、アクセス トークンの認証コードを交換するために、別の呼び出しを行います。 メタデータが id_token に設定されている場合は、暗号化キーを省略できます。
assertion_signing_key いいえ token_endpoint_auth_method メタデータが private_key_jwt に設定されている場合は、JWT キーの署名に使用する X509 証明書を提供します。 このキーは、OAuth2 ID プロバイダーによって提供される必要があります。

リダイレクト URI

ID プロバイダーのリダイレクト URI を構成する場合は、https://{tenant-name}.b2clogin.com/{tenant-name}.onmicrosoft.com/oauth2/authresp を入力します。 {tenant-name} をテナントの名前 (contosob2c など) に置き換えてください。 リダイレクト URI は、すべて小文字である必要があります。