Definiera en RESTful-teknisk profil i en anpassad Azure Active Directory B2C-princip
Kommentar
I Azure Active Directory B2C är anpassade principer främst utformade för att hantera komplexa scenarier. I de flesta scenarier rekommenderar vi att du använder inbyggda användarflöden. Om du inte har gjort det kan du läsa mer om startpaketet för anpassad princip i Kom igång med anpassade principer i Active Directory B2C.
Azure Active Directory B2C (Azure AD B2C) ger stöd för integrering av din egen RESTful-tjänst. Azure AD B2C skickar data till RESTful-tjänsten i en insamling av indataanspråk och tar emot data i en insamling av utdataanspråk. Mer information finns i Integrera REST API-anspråksutbyten i din anpassade Azure AD B2C-princip.
Protokoll
Attributet Namn för protokollelementet måste anges till Proprietary
. Hanterarattributet måste innehålla det fullständigt kvalificerade namnet på protokollhanterarsammansättningen som används av Azure AD B2C: Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
.
I följande exempel visas en RESTful-teknisk profil:
<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" />
...
Indataanspråk
Elementet InputClaims innehåller en lista över anspråk som ska skickas till REST-API:et. Du kan också mappa namnet på anspråket till det namn som definierats i REST-API:et. I följande exempel visas mappningen mellan din princip och REST-API:et. GivenName-anspråket skickas till REST-API:et som firstName, medan efternamn skickas som efternamn. E-postanspråket anges som det är.
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" />
<InputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="firstName" />
<InputClaim ClaimTypeReferenceId="surname" PartnerClaimType="lastName" />
</InputClaims>
Elementet InputClaimsTransformations kan innehålla en samling InputClaimsTransformation-element som används för att ändra indataanspråken eller generera nya innan de skickas till REST-API:et.
Skicka en JSON-nyttolast
Med den tekniska REST API-profilen kan du skicka en komplex JSON-nyttolast till en slutpunkt.
Så här skickar du en komplex JSON-nyttolast:
- Skapa din JSON-nyttolast med GenerateJson-anspråkstransformeringen .
- I den tekniska REST API-profilen:
- Lägg till en transformering av indataanspråk med en referens till
GenerateJson
anspråkstransformeringen. - Ange metadataalternativet
SendClaimsIn
tillbody
ClaimUsedForRequestPayload
Ange metadataalternativet till namnet på anspråket som innehåller JSON-nyttolasten.- I indataanspråket lägger du till en referens till det indataanspråk som innehåller JSON-nyttolasten.
- Lägg till en transformering av indataanspråk med en referens till
I följande exempel TechnicalProfile
skickas ett e-postmeddelande med verifiering med hjälp av en e-posttjänst från tredje part (i det här fallet 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>
Utdataanspråk
OutputClaims-elementet innehåller en lista över anspråk som returneras av REST-API:et. Du kan behöva mappa namnet på anspråket som definierats i principen till det namn som definierats i REST-API:et. Du kan också inkludera anspråk som inte returneras av REST-API:et så länge du anger DefaultValue
attributet.
Elementet OutputClaimsTransformations kan innehålla en samling OutputClaimsTransformation-element som används för att ändra utdataanspråken eller generera nya.
I följande exempel visas anspråket som returneras av REST-API:et:
- MembershipId-anspråket som mappas till anspråksnamnet loyaltyNumber.
Den tekniska profilen returnerar också anspråk som inte returneras av identitetsprovidern:
- loyaltyNumberIsNyt anspråk som har ett standardvärde inställt på
true
.
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="loyaltyNumber" PartnerClaimType="MembershipId" />
<OutputClaim ClaimTypeReferenceId="loyaltyNumberIsNew" DefaultValue="true" />
</OutputClaims>
Metadata
Attribut | Obligatoriskt | Beskrivning |
---|---|---|
ServiceUrl | Ja | URL:en för REST API-slutpunkten. |
AuthenticationType | Ja | Den typ av autentisering som utförs av RESTful-anspråksprovidern. Möjliga värden: None , Basic , Bearer , ClientCertificate eller ApiKeyHeader .
|
AllowInsecureAuthInProduction | Nej | Anger om AuthenticationType kan anges till none i produktionsmiljön (DeploymentMode för TrustFrameworkPolicy har angetts till Production , eller inte angetts). Möjliga värden: sant eller falskt (standard). |
SendClaimsIn | Nej | Anger hur indataanspråken skickas till RESTful-anspråksprovidern. Möjliga värden: Body (standard), Form , Header eller Url QueryString . Värdet Body är det indataanspråk som skickas i begärandetexten i JSON-format. Värdet Form är det indataanspråk som skickas i begärandetexten i ett &ersoch avgränsat nyckelvärdeformat. Värdet Header är det indataanspråk som skickas i begärandehuvudet. Värdet Url är det indataanspråk som skickas i URL:en, till exempel https://api.example.com/{claim1}/{claim2}?{claim3}={claim4} . Värdnamnets del av URL:en får inte innehålla anspråk. Värdet QueryString är det indataanspråk som skickas i frågesträngen för begäran. HTTP-verben som anropas av var och en är följande:
|
ClaimsFormat | Nej | Används inte för närvarande, kan ignoreras. |
ClaimUsedForRequestPayload | Nej | Namnet på ett stränganspråk som innehåller nyttolasten som ska skickas till REST-API:et. |
FelsökaMode | Nej | Kör den tekniska profilen i felsökningsläge. Möjliga värden: true , eller false (standard). I felsökningsläge kan REST-API:et returnera mer information. Se avsnittet Returnera felmeddelande. |
IncludeClaimResolvingInClaimsHandling | Nej | För indata- och utdataanspråk anger om anspråksmatchning ingår i den tekniska profilen. Möjliga värden: true , eller false (standard). Om du vill använda en anspråkslösare i den tekniska profilen anger du detta till true . |
ResolveJsonPathsInJsonTokens | Nej | Anger om den tekniska profilen löser JSON-sökvägar. Möjliga värden: true , eller false (standard). Använd dessa metadata för att läsa data från ett kapslat JSON-element. I en OutputClaim anger du PartnerClaimType till det JSON-sökvägselement som du vill mata ut. Till exempel: firstName.localized , eller data[0].to[0].email . |
UseClaimAsBearerToken | Nej | Namnet på anspråket som innehåller ägartoken. |
Felhantering
Följande metadata kan användas för att konfigurera felmeddelandena som visas vid REST API-fel. Felmeddelandena kan lokaliseras.
Attribut | Obligatoriskt | Beskrivning |
---|---|---|
DefaultUserMessageIfRequestFailed | Nej | Ett standardanpassat felmeddelande för alla REST API-undantag. |
UserMessageIfCircuitOpen | Nej | Felmeddelande när REST-API:et inte kan nås. Om det inte anges returneras DefaultUserMessageIfRequestFailed. |
UserMessageIfDnsResolutionFailed | Nej | Felmeddelande för DNS-matchningsfelet. Om det inte anges returneras DefaultUserMessageIfRequestFailed. |
UserMessageIfRequestTimeout | Nej | Felmeddelande när tidsgränsen för anslutningen har överskrids. Om det inte anges returneras DefaultUserMessageIfRequestFailed. |
Krypteringsnycklar
Om typen av autentisering är inställd på None
används inte cryptographicKeys-elementet.
<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>
Om typen av autentisering är inställd på Basic
innehåller cryptographicKeys-elementet följande attribut:
Attribut | Obligatoriskt | Beskrivning |
---|---|---|
BasicAuthenticationUsername | Ja | Användarnamnet som används för att autentisera. |
BasicAuthenticationPassword | Ja | Lösenordet som används för att autentisera. |
I följande exempel visas en teknisk profil med grundläggande autentisering:
<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>
Om typen av autentisering är inställd på ClientCertificate
innehåller cryptographicKeys-elementet följande attribut:
Attribut | Obligatoriskt | Beskrivning |
---|---|---|
ClientCertificate | Ja | X509-certifikatet (RSA-nyckeluppsättningen) som ska användas för att autentisera. |
<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>
Om typen av autentisering är inställd på Bearer
innehåller cryptographicKeys-elementet följande attribut:
Attribut | Obligatoriskt | Beskrivning |
---|---|---|
BearerAuthenticationToken | Nej | OAuth 2.0-ägartoken. |
<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>
Om typen av autentisering är inställd på ApiKeyHeader
innehåller cryptographicKeys-elementet följande attribut:
Attribut | Obligatoriskt | Beskrivning |
---|---|---|
Namnet på HTTP-huvudet, till exempel x-functions-key , eller x-api-key . |
Ja | Nyckeln som används för att autentisera. |
Kommentar
För närvarande stöder Azure AD B2C endast ett HTTP-huvud för autentisering. Om ditt RESTful-anrop kräver flera huvuden, till exempel ett klient-ID och ett klienthemlighetsvärde, måste du proxy-överföra begäran på något sätt.
<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>
Returnerar valideringsfelmeddelande
Rest-API:et kan behöva returnera ett felmeddelande, till exempel "Användaren hittades inte i CRM-systemet". Om ett fel uppstår ska REST API returnera ett HTTP 4xx-felmeddelande, till exempel 400 (felaktig begäran) eller 409 (konflikt) svarsstatuskod. Svarstexten innehåller felmeddelandet formaterat i 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"
}
Attribut | Obligatoriskt | Beskrivning |
---|---|---|
version | Ja | Din REST API-version. Till exempel: 1.0.1 |
status | Ja | Ett HTTP-svarsstatuskodsliknande nummer och måste vara 409. Rest-tjänsten kan returnera en HTTP 4XX-statuskod, men värdet för den status inlämnade i den JSON-formaterade svarstexten måste vara 409 . |
kod | Nej | En felkod från RESTful-slutpunktsprovidern, som visas när DebugMode är aktiverad. |
requestId | Nej | En begärandeidentifierare från RESTful-slutpunktsprovidern, som visas när DebugMode är aktiverad. |
userMessage | Ja | Ett felmeddelande som visas för användaren. |
developerMessage | Nej | Den utförliga beskrivningen av problemet och hur du åtgärdar det, som visas när DebugMode är aktiverat. |
moreInfo | Nej | En URI som pekar på ytterligare information, som visas när DebugMode är aktiverad. |
I följande exempel visas en C#-klass som returnerar ett felmeddelande:
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; }
}
Nästa steg
I följande artiklar finns exempel på hur du använder en RESTful-teknisk profil: