Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Important
À compter du 1er mai 2025, Azure AD B2C ne sera plus disponible pour les nouveaux clients. Pour plus d’informations, consultez notre FAQ.
Remarque
Dans Active Directory B2C, les stratégies personnalisées sont principalement conçues pour gérer des scénarios complexes. Pour la plupart des scénarios, nous vous recommandons de recourir à des flux d’utilisateurs intégrés. Si vous ne l’avez pas fait, découvrez le Pack de démarrage de stratégie personnalisée dans Prise en main des stratégies personnalisées dans Active Directory B2C.
Azure Active Directory B2C (Azure AD B2C) prend en charge l’intégration de votre propre service RESTful. Azure AD B2C envoie des données au service RESTful dans une collection de revendications d’entrée et reçoit des données dans une collection de revendications de sortie. Pour plus d’informations, consultez Intégrer des échanges de revendications d’API REST dans votre stratégie personnalisée Azure AD B2C.
Protocole
L’attribut Name de l’élément Protocol doit être défini sur Proprietary
. L’attribut du gestionnaire doit contenir le nom complet de l’assembly de gestionnaire de protocole utilisé par Azure AD B2C : Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
.
L’exemple suivant montre un profil technique 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" />
...
Revendications d’entrée
L’élément InputClaims contient une liste de revendications à envoyer à l’API REST. Vous pouvez également mapper le nom de votre revendication au nom défini dans l’API REST. L’exemple suivant montre le mappage entre votre stratégie et l’API REST. La revendication givenName est envoyée à l’API REST en tant que firstName, tandis que le nom de famille est envoyé en tant que lastName. La revendication d’e-mail est définie comme c’est le cas.
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" />
<InputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="firstName" />
<InputClaim ClaimTypeReferenceId="surname" PartnerClaimType="lastName" />
</InputClaims>
L’élément InputClaimsTransformations peut contenir une collection d’éléments InputClaimsTransformation utilisés pour modifier les revendications d’entrée ou en générer de nouvelles avant l’envoi à l’API REST.
Envoyer une charge utile JSON
Le profil technique de l’API REST vous permet d’envoyer une charge utile JSON complexe à un point de terminaison.
Pour envoyer une charge utile JSON complexe :
- Générez votre charge utile JSON avec la transformation de revendications GenerateJson .
- Dans le profil technique de l’API REST :
- Ajoutez une transformation de revendications d’entrée avec une référence à la
GenerateJson
transformation de revendications. - Définir l’option de métadonnées sur
SendClaimsIn
body
- Définissez l’option
ClaimUsedForRequestPayload
de métadonnées sur le nom de la revendication contenant la charge utile JSON. - Dans la revendication d’entrée, ajoutez une référence à la revendication d’entrée contenant la charge utile JSON.
- Ajoutez une transformation de revendications d’entrée avec une référence à la
L’exemple TechnicalProfile
suivant envoie un e-mail de vérification à l’aide d’un service de messagerie tiers (dans ce cas, 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>
Revendications de sortie
L’élément OutputClaims contient une liste de revendications retournées par l’API REST. Vous devrez peut-être mapper le nom de la revendication définie dans votre stratégie au nom défini dans l’API REST. Vous pouvez également inclure des revendications qui ne sont pas retournées par l’API REST, tant que vous définissez l’attribut DefaultValue
.
L’élément OutputClaimsTransformations peut contenir une collection d’éléments OutputClaimsTransformation qui sont utilisés pour modifier les revendications de sortie ou en générer de nouvelles.
L’exemple suivant montre la revendication retournée par l’API REST :
- Revendication MembershipId mappée au nom de la revendication loyaltyNumber .
Le profil technique retourne également des revendications qui ne sont pas retournées par le fournisseur d’identité :
- La revendication loyaltyNumberIsNew qui a une valeur par défaut définie sur
true
.
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="loyaltyNumber" PartnerClaimType="MembershipId" />
<OutputClaim ClaimTypeReferenceId="loyaltyNumberIsNew" DefaultValue="true" />
</OutputClaims>
Métadonnées
Caractéristique | Obligatoire | Descriptif |
---|---|---|
ServiceUrl | Oui | URL du point de terminaison de l’API REST. |
Type d'authentification | Oui | Type d’authentification effectuée par le fournisseur de revendications RESTful. Valeurs possibles : None , , Basic Bearer , ClientCertificate , ou ApiKeyHeader .
|
AllowInsecureAuthInProduction | Non | Indique si la AuthenticationType valeur peut être définie none dans l’environnement de production (DeploymentMode de TrustFrameworkPolicy est définie Production sur , ou non spécifiée). Valeurs possibles : true ou false (valeur par défaut). |
SendClaimsIn | Non | Spécifie la façon dont les revendications d’entrée sont envoyées au fournisseur de revendications RESTful. Valeurs possibles : Body (par défaut), Form , Header Url ou QueryString . La Body valeur est la revendication d’entrée envoyée dans le corps de la requête au format JSON. La Form valeur est la revendication d’entrée qui est envoyée dans le corps de la requête dans un format de valeur de clé séparée par '&' ampersand. La Header valeur est la revendication d’entrée envoyée dans l’en-tête de requête. La Url valeur est la revendication d’entrée envoyée dans l’URL, par exemple https://api.example.com/{claim1}/{claim2}?{claim3}={claim4} . La partie nom d’hôte de l’URL ne peut pas contenir de revendications. La QueryString valeur est la revendication d’entrée envoyée dans la chaîne de requête de requête. Les verbes HTTP appelés par chacun sont les suivants :
|
Format des réclamations | Non | Non utilisé actuellement, peut être ignoré. |
ClaimUsedForRequestPayload | Non | Nom d’une revendication de chaîne qui contient la charge utile à envoyer à l’API REST. |
DebugMode | Non | Exécute le profil technique en mode débogage. Valeurs possibles : true ou false (par défaut). En mode débogage, l’API REST peut retourner plus d’informations. Consultez la section Retour du message d’erreur . |
InclureRéclamationRésoudreInClaimsHandling | Non | Pour les revendications d’entrée et de sortie, spécifie si la résolution des revendications est incluse dans le profil technique. Valeurs possibles : true ou false (par défaut). Si vous souhaitez utiliser un programme de résolution des revendications dans le profil technique, définissez cette valeur sur true . |
ResolveJsonPathsInJsonTokens | Non | Indique si le profil technique résout les chemins JSON. Valeurs possibles : true ou false (par défaut). Utilisez ces métadonnées pour lire des données à partir d’un élément JSON imbriqué. Dans un OutputClaim, définissez l’élément PartnerClaimType de chemin d’accès JSON que vous souhaitez générer. Par exemple : firstName.localized ou data[0].to[0].email . |
UseClaimAsBearerToken | Non | Nom de la revendication qui contient le jeton du porteur. |
Gestion des erreurs
Les métadonnées suivantes peuvent être utilisées pour configurer les messages d’erreur affichés lors de l’échec de l’API REST. Les messages d’erreur peuvent être localisés.
Caractéristique | Obligatoire | Descriptif |
---|---|---|
DefaultUserMessageIfRequestFailed | Non | Message d’erreur personnalisé par défaut pour toutes les exceptions d’API REST. |
UserMessageIfCircuitOpen | Non | Message d’erreur lorsque l’API REST n’est pas accessible. S’il n’est pas spécifié, DefaultUserMessageIfRequestFailed est retourné. |
UserMessageIfDnsResolutionFailed | Non | Message d’erreur pour l’exception de résolution DNS. S’il n’est pas spécifié, DefaultUserMessageIfRequestFailed est retourné. |
UserMessageIfRequestTimeout | Non | Message d’erreur lorsque la connexion est expirée. S’il n’est pas spécifié, DefaultUserMessageIfRequestFailed est retourné. |
Clés de chiffrement
Si le type d’authentification est défini None
sur , l’élément CryptographicKeys n’est pas utilisé.
<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>
Si le type d’authentification est défini Basic
sur , l’élément CryptographicKeys contient les attributs suivants :
Caractéristique | Obligatoire | Descriptif |
---|---|---|
BasicAuthenticationNom d’utilisateur | Oui | Nom d’utilisateur utilisé pour l’authentification. |
BasicAuthenticationPassword | Oui | Mot de passe utilisé pour l’authentification. |
L’exemple suivant montre un profil technique avec l’authentification de base :
<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>
Si le type d’authentification est défini ClientCertificate
sur , l’élément CryptographicKeys contient l’attribut suivant :
Caractéristique | Obligatoire | Descriptif |
---|---|---|
ClientCertificate | Oui | Certificat X509 (jeu de clés RSA) à utiliser pour l’authentification. |
<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>
Si le type d’authentification est défini Bearer
sur , l’élément CryptographicKeys contient l’attribut suivant :
Caractéristique | Obligatoire | Descriptif |
---|---|---|
BearerAuthenticationToken | Non | Jeton du porteur 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>
Si le type d’authentification est défini ApiKeyHeader
sur , l’élément CryptographicKeys contient l’attribut suivant :
Caractéristique | Obligatoire | Descriptif |
---|---|---|
Nom de l’en-tête HTTP, tel que x-functions-key , ou x-api-key . |
Oui | Clé utilisée pour l’authentification. |
Remarque
À ce stade, Azure AD B2C ne prend en charge qu’un seul en-tête HTTP pour l’authentification. Si votre appel RESTful nécessite plusieurs en-têtes, tels qu’un ID client et une valeur de clé secrète client, vous devrez proxyr la requête d’une certaine manière.
<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>
Retour d’un message d’erreur de validation
Votre API REST peut avoir besoin de renvoyer un message d’erreur, par exemple « L’utilisateur n’a pas été trouvé dans le système CRM ». Si une erreur se produit, l’API REST doit retourner un message d’erreur HTTP 4xx, tel que 400 (requête incorrecte) ou 409 (conflit). Le corps de la réponse contient un message d’erreur mis en forme au format 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"
}
Caractéristique | Obligatoire | Descriptif |
---|---|---|
Version | Oui | Version de votre API REST. Par exemple : 1.0.1 |
statut | Oui | Un numéro de type code d’état de réponse HTTP et doit être 409. Votre service REST peut retourner un code d’état HTTP 4XX, mais la valeur du corps de status réponse au format JSON doit être 409 . |
code | Non | Code d’erreur du fournisseur de points de terminaison RESTful, qui s’affiche lorsqu’il DebugMode est activé. |
requestId | Non | Identificateur de demande du fournisseur de point de terminaison RESTful, qui s’affiche quand DebugMode il est activé. |
message utilisateur | Oui | Message d’erreur affiché à l’utilisateur. |
developerMessage | Non | Description détaillée du problème et comment la résoudre, qui s’affiche quand DebugMode elle est activée. |
plus d’infos | Non | URI qui pointe vers des informations supplémentaires, qui s’affiche quand DebugMode elle est activée. |
L’exemple suivant montre une classe C# qui retourne un message d’erreur :
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; }
}
Étapes suivantes
Consultez les articles suivants pour obtenir des exemples d’utilisation d’un profil technique RESTful :
- Intégrer des échanges de revendications d’API REST dans votre stratégie personnalisée Azure AD B2C
- Procédure pas à pas : ajouter un connecteur d’API à un flux d’utilisateur d’inscription
- Procédure pas à pas : ajouter des échanges de revendications d’API REST à des stratégies personnalisées dans Azure Active Directory B2C
- Sécuriser vos services d’API REST