重要
2025 年 5 月 1 日より、Azure AD B2C は新規のお客様向けに購入できなくなります。 詳細については、FAQ を参照してください。
注
Azure Active Directory B2C で、カスタム ポリシーは、主に、複雑なシナリオに取り組む用途向けに設計されています。 ほとんどのシナリオで、組み込みユーザー フローを使用することをお勧めします。 まだ行っていない場合は、Active Directory B2C でのカスタム ポリシーの概要に関する記事で、カスタム ポリシー スターター パックの詳細を確認してください。
Azure Active Directory B2C (Azure AD B2C) は、独自の RESTful サービスの統合をサポートします。 Azure AD B2C は、入力要求コレクションで RESTful サービスにデータを送信し、出力要求コレクションでデータを受信します。 詳細については、「 REST API 要求交換を Azure AD B2C カスタム ポリシーに統合する」を参照してください。
プロトコル
Protocol 要素の Name 属性は Proprietary
に設定する必要があります。
ハンドラー属性には、Azure AD B2C: Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
によって使用されるプロトコル ハンドラー アセンブリの完全修飾名が含まれている必要があります。
次の例は、RESTful 技術プロファイルを示しています。
<TechnicalProfile Id="REST-UserMembershipValidator">
<DisplayName>Validate user input data and return loyaltyNumber claim</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
...
入力クレーム
InputClaims 要素には、REST API に送信する要求の一覧が含まれています。 また、要求の名前を REST API で定義された名前にマップすることもできます。 次の例は、ポリシーと REST API の間のマッピングを示しています。 givenName 要求は firstName として REST API に送信され、surname は lastName として送信されます。 メール要求はそのまま設定されます。
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" />
<InputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="firstName" />
<InputClaim ClaimTypeReferenceId="surname" PartnerClaimType="lastName" />
</InputClaims>
InputClaimsTransformations 要素には、REST API に送信する前に入力要求を変更したり、新しい要求を生成したりするために使用される InputClaimsTransformation 要素のコレクションが含まれる場合があります。
JSON ペイロードを送信する
REST API 技術プロファイルを使用すると、複雑な JSON ペイロードをエンドポイントに送信できます。
複雑なJSONペイロードを送信するには:
- GenerateJson 要求変換を使用して JSON ペイロードをビルドします。
- REST API 技術プロファイルでは、次のようになります。
-
GenerateJson
クレーム変換への参照を使用して、入力クレーム変換を追加します。 -
SendClaimsIn
メタデータオプションをbody
-
ClaimUsedForRequestPayload
メタデータ オプションを、JSON ペイロードを含む要求の名前に設定します。 - input 要求で、JSON ペイロードを含む input 要求への参照を追加します。
-
次の例では、 TechnicalProfile
サード パーティの電子メール サービス (この場合は SendGrid) を使用して確認メールを送信します。
<TechnicalProfile Id="SendGrid">
<DisplayName>Use SendGrid's email API to send the code to the user</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://api.sendgrid.com/v3/mail/send</Item>
<Item Key="AuthenticationType">Bearer</Item>
<Item Key="SendClaimsIn">Body</Item>
<Item Key="ClaimUsedForRequestPayload">sendGridReqBody</Item>
<Item Key="DefaultUserMessageIfRequestFailed">Cannot process your request right now, please try again later.</Item>
</Metadata>
<CryptographicKeys>
<Key Id="BearerAuthenticationToken" StorageReferenceId="B2C_1A_SendGridApiKey" />
</CryptographicKeys>
<InputClaimsTransformations>
<InputClaimsTransformation ReferenceId="GenerateSendGridRequestBody" />
</InputClaimsTransformations>
<InputClaims>
<InputClaim ClaimTypeReferenceId="sendGridReqBody" />
</InputClaims>
</TechnicalProfile>
出力クレーム
OutputClaims 要素には、REST API によって返される要求の一覧が含まれています。 ポリシーで定義されている要求の名前を、REST API で定義されている名前にマップすることが必要になる場合があります。 また、 DefaultValue
属性を設定している限り、REST API によって返されない要求を含めることもできます。
OutputClaimsTransformations 要素には、出力要求を修正したり新しい要求を生成するために使用される、OutputClaimsTransformation 要素のコレクションが含まれている場合があります。
次の例は、REST API によって返される要求を示しています。
- loyaltyNumber 要求名にマップされている MembershipId 要求。
技術プロファイルは、ID プロバイダーによって返されない要求も返します。
- 既定値が に設定されている
true
要求。
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="loyaltyNumber" PartnerClaimType="MembershipId" />
<OutputClaim ClaimTypeReferenceId="loyaltyNumberIsNew" DefaultValue="true" />
</OutputClaims>
メタデータ
特性 | 必須 | 説明 |
---|---|---|
サービスURL | イエス | REST API エンドポイントの URL。 |
認証タイプ | イエス | RESTful クレーム プロバイダーによって実行される認証の種類。 使用可能な値: None 、 Basic 、 Bearer 、 ClientCertificate 、または ApiKeyHeader 。
|
AllowInsecureAuthInProduction | いいえ | 運用環境でAuthenticationType を none に設定できるかどうかを示します (DeploymentMode の が Production に設定されているか、指定されていません)。 可能な値: true または false (デフォルト)。 |
SendClaimsIn (送信クレームイン) | いいえ | 入力要求を RESTful 要求プロバイダーに送信する方法を指定します。 可能な値: Body (デフォルト)、 Form 、 Header 、 Url 、または QueryString 。 Body 値は、要求本文で JSON 形式で送信される入力要求です。 Form 値は、アンパサンド '&' で区切られたキー値形式で要求本文で送信される入力要求です。 Header 値は、要求ヘッダーで送信される入力要求です。 Url 値は、URL で送信される入力要求です (例: https://api.example.com/{claim1}/{claim2}?{claim3}={claim4} )。 URL のホスト名部分に要求を含めることはできません。 QueryString 値は、要求クエリ文字列で送信される入力要求です。 それぞれが呼び出す HTTP 動詞は次のとおりです。
|
クレーム形式 | いいえ | 現在使用されていません。無視してもかまいません。 |
ClaimUsedForRequestペイロード | いいえ | REST API に送信されるペイロードを含む文字列要求の名前。 |
デバッグモード | いいえ | 技術プロファイルをデバッグ・モードで実行します。 指定できる値: true または false (既定値)。 デバッグモードでは、REST API はより多くの情報を返すことができます。
「エラーメッセージを返す」セクションを参照してください。 |
IncludeClaimResolvingInClaimsHandling | いいえ | 入力と出力の要求について、要求の解決を技術プロファイルに含めるかどうかを指定します。 指定できる値: true または false (既定値)。 技術プロファイルでクレーム リゾルバーを使用する場合は、これを true に設定します。 |
ResolveJsonPathsInJsonTokens | いいえ | 技術プロファイルが JSON パスを解決するかどうかを示します。 指定できる値: true または false (既定値)。 このメタデータを使用して、ネストされた JSON 要素からデータを読み取ります。
OutputClaim で、出力する JSON パス要素に PartnerClaimType を設定します。 例: firstName.localized 、または data[0].to[0].email 。 |
UseClaimAsBearerToken (ClaimAsBearerToken) | いいえ | ベアラー トークンを含む要求の名前。 |
エラー処理
次のメタデータを使用して、REST API の失敗時に表示されるエラーメッセージを設定できます。 エラー メッセージは、ローカライズできます。
特性 | 必須 | 説明 |
---|---|---|
DefaultUserMessageIfRequestFailed (英語) | いいえ | すべての REST API 例外に対するデフォルトのカスタマイズされたエラーメッセージ。 |
UserMessageIfCircuitOpen (英語) | いいえ | REST API にアクセスできない場合のエラー メッセージ。 指定しない場合、DefaultUserMessageIfRequestFailed が返されます。 |
UserMessageIfDnsResolutionFailed(ユーザーメッセージIfDnsResolutionFailed) | いいえ | DNS 解決の例外のエラー メッセージ。 指定しない場合、DefaultUserMessageIfRequestFailed が返されます。 |
UserMessageIfRequestTimeout (英語) | いいえ | 接続がタイムアウトしたときのエラーメッセージ。指定しない場合、DefaultUserMessageIfRequestFailed が返されます。 |
暗号化キー
認証の種類が None
に設定されている場合、 CryptographicKeys 要素は使用されません。
<TechnicalProfile Id="REST-API-SignUp">
<DisplayName>Validate user's input data and return loyaltyNumber claim</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://your-app-name.azurewebsites.NET/api/identity/signup</Item>
<Item Key="AuthenticationType">None</Item>
<Item Key="SendClaimsIn">Body</Item>
</Metadata>
</TechnicalProfile>
認証の種類が Basic
に設定されている場合、 CryptographicKeys 要素には次の属性が含まれます。
特性 | 必須 | 説明 |
---|---|---|
BasicAuthenticationユーザー名 | イエス | 認証に使用されるユーザー名。 |
BasicAuthenticationPassword(ベーシック認証パスワード) | イエス | 認証に使用されるパスワード。 |
次の例は、基本認証を使用した技術プロファイルを示しています。
<TechnicalProfile Id="REST-API-SignUp">
<DisplayName>Validate user's input data and return loyaltyNumber claim</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://your-app-name.azurewebsites.NET/api/identity/signup</Item>
<Item Key="AuthenticationType">Basic</Item>
<Item Key="SendClaimsIn">Body</Item>
</Metadata>
<CryptographicKeys>
<Key Id="BasicAuthenticationUsername" StorageReferenceId="B2C_1A_B2cRestClientId" />
<Key Id="BasicAuthenticationPassword" StorageReferenceId="B2C_1A_B2cRestClientSecret" />
</CryptographicKeys>
</TechnicalProfile>
認証の種類が ClientCertificate
に設定されている場合、 CryptographicKeys 要素には次の属性が含まれます。
特性 | 必須 | 説明 |
---|---|---|
クライアント証明書 | イエス | 認証に使用する X509 証明書 (RSA キー セット)。 |
<TechnicalProfile Id="REST-API-SignUp">
<DisplayName>Validate user's input data and return loyaltyNumber claim</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://your-app-name.azurewebsites.NET/api/identity/signup</Item>
<Item Key="AuthenticationType">ClientCertificate</Item>
<Item Key="SendClaimsIn">Body</Item>
</Metadata>
<CryptographicKeys>
<Key Id="ClientCertificate" StorageReferenceId="B2C_1A_B2cRestClientCertificate" />
</CryptographicKeys>
</TechnicalProfile>
認証の種類が Bearer
に設定されている場合、 CryptographicKeys 要素には次の属性が含まれます。
特性 | 必須 | 説明 |
---|---|---|
ベアラー認証トークン | いいえ | OAuth 2.0 ベアラー トークン。 |
<TechnicalProfile Id="REST-API-SignUp">
<DisplayName>Validate user's input data and return loyaltyNumber claim</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://your-app-name.azurewebsites.NET/api/identity/signup</Item>
<Item Key="AuthenticationType">Bearer</Item>
<Item Key="SendClaimsIn">Body</Item>
</Metadata>
<CryptographicKeys>
<Key Id="BearerAuthenticationToken" StorageReferenceId="B2C_1A_B2cRestClientAccessToken" />
</CryptographicKeys>
</TechnicalProfile>
認証の種類が ApiKeyHeader
に設定されている場合、 CryptographicKeys 要素には次の属性が含まれます。
特性 | 必須 | 説明 |
---|---|---|
HTTP ヘッダーの名前 ( x-functions-key や x-api-key など)。 |
イエス | 認証に使用されるキー。 |
注
現時点では、Azure AD B2C では、認証用の HTTP ヘッダーが 1 つだけサポートされています。 RESTful 呼び出しにクライアント ID やクライアント シークレット値など、複数のヘッダーが必要な場合は、何らかの方法で要求をプロキシする必要があります。
<TechnicalProfile Id="REST-API-SignUp">
<DisplayName>Validate user's input data and return loyaltyNumber claim</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://your-app-name.azurewebsites.NET/api/identity/signup</Item>
<Item Key="AuthenticationType">ApiKeyHeader</Item>
<Item Key="SendClaimsIn">Body</Item>
</Metadata>
<CryptographicKeys>
<Key Id="x-functions-key" StorageReferenceId="B2C_1A_RestApiKey" />
</CryptographicKeys>
</TechnicalProfile>
検証エラーメッセージを返す
REST API は、「CRM システムでユーザーが見つかりませんでした」などのエラーメッセージを返す必要がある場合があります。 エラーが発生した場合、REST API は HTTP 4xx エラー メッセージ (400 (無効な要求) や 409 (競合) 応答状態コードなど) を返す必要があります。 応答本文には、JSON 形式のエラー メッセージが含まれています。
{
"version": "1.0.0",
"status": 409,
"code": "API12345",
"requestId": "50f0bd91-2ff4-4b8f-828f-00f170519ddb",
"userMessage": "Message for the user",
"developerMessage": "Verbose description of problem and how to fix it.",
"moreInfo": "https://restapi/error/API12345/moreinfo"
}
特性 | 必須 | 説明 |
---|---|---|
バージョン | イエス | REST API のバージョン。 たとえば、1.0.1 のようになります。 |
ステータス | イエス | HTTP 応答ステータス コードのような番号で、409 である必要があります。 REST サービスは HTTP 4XX ステータスコードを返すことができますが、JSON 形式のレスポンス本文にファイルされる status の値は 409 である必要があります。 |
コード | いいえ | RESTful エンドポイント プロバイダーからのエラー コード ( DebugMode が有効になっているときに表示されます)。 |
リクエストID | いいえ | RESTful エンドポイント プロバイダーからの要求識別子で、 DebugMode が有効になっているときに表示されます。 |
ユーザーメッセージ | イエス | ユーザーに表示されるエラー メッセージ。 |
開発者メッセージ | いいえ | 問題の詳細な説明とその修正方法 ( DebugMode が有効になっているときに表示されます)。 |
詳細情報 | いいえ | 追加情報を指す URI で、 DebugMode が有効になっているときに表示されます。 |
次の例は、エラー メッセージを返す C# クラスを示しています。
public class ResponseContent
{
public string Version { get; set; }
public int Status { get; set; }
public string Code { get; set; }
public string UserMessage { get; set; }
public string DeveloperMessage { get; set; }
public string RequestId { get; set; }
public string MoreInfo { get; set; }
}
次のステップ
RESTful 技術プロファイルの使用例については、次の記事を参照してください。