Skriv din första anpassade Azure Active Directory B2C-princip – Hello World!
I ditt program kan du använda användarflöden som gör det möjligt för användare att registrera sig, logga in eller hantera sin profil. När användarflöden inte täcker alla dina affärsspecifika behov kan du använda anpassade principer.
Du kan använda det färdiga startpaketet för anpassad princip för att skriva anpassade principer, men det är viktigt att du förstår hur en anpassad princip skapas. I den här artikeln får du lära dig hur du skapar din första anpassade princip från grunden.
Förutsättningar
Om du inte redan har en skapar du en Azure AD B2C-klientorganisation som är länkad till din Azure-prenumeration.
Registrera ett webbprogram och aktivera implicit beviljande av ID-token. För omdirigerings-URI använder du https://jwt.ms.
Visual Studio Code (VS Code) måste vara installerat på datorn.
Kommentar
Den här artikeln är en del av guideserien Skapa och köra egna anpassade principer i Azure Active Directory B2C. Vi rekommenderar att du startar den här serien från den första artikeln.
Steg 1 – Konfigurera signerings- och krypteringsnycklarna
Om du inte redan har gjort det skapar du följande krypteringsnycklar. Om du vill automatisera genomgången nedan går du till IEF-installationsappen och följer anvisningarna:
Använd stegen i Lägg till signerings- och krypteringsnycklar för Identity Experience Framework-program för att skapa signeringsnyckeln.
Använd stegen i Lägg till signerings- och krypteringsnycklar för Identity Experience Framework-program för att skapa krypteringsnyckeln.
Steg 2 – Skapa den anpassade principfilen
I VS Code skapar och öppnar du filen
ContosoCustomPolicy.XML
.ContosoCustomPolicy.XML
Lägg till följande kod i filen:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0" TenantId="yourtenant.onmicrosoft.com" PolicyId="B2C_1A_ContosoCustomPolicy" PublicPolicyUri="http://yourtenant.onmicrosoft.com/B2C_1A_ContosoCustomPolicy"> <BuildingBlocks> <!-- Building Blocks Here--> </BuildingBlocks> <ClaimsProviders> <!-- Claims Providers Here--> </ClaimsProviders> <UserJourneys> <!-- User Journeys Here--> </UserJourneys> <RelyingParty> <!-- Relying Party Here that's your policy’s entry point Specify the User Journey to execute Specify the claims to include in the token that is returned when the policy runs --> </RelyingParty> </TrustFrameworkPolicy>
Ersätt
yourtenant
med underdomändelen av klientorganisationens namn, till exempelcontoso
. Lär dig hur du hämtar ditt klientnamn.XML-elementen definierar elementet på den översta nivån
TrustFrameworkPolicy
i en principfil med dess princip-ID och klientnamn. Elementet TrustFrameworkPolicy innehåller andra XML-element som du ska använda i den här serien.Om du vill deklarera ett anspråk lägger du till följande kod i
BuildingBlocks
avsnittet iContosoCustomPolicy.XML
filen:<ClaimsSchema> <ClaimType Id="objectId"> <DisplayName>unique object Id for subject of the claims being returned</DisplayName> <DataType>string</DataType> </ClaimType> <ClaimType Id="message"> <DisplayName>Will hold Hello World message</DisplayName> <DataType>string</DataType> </ClaimType> </ClaimsSchema>
Ett anspråk är som en variabel. Anspråkets deklaration visar också anspråkets datatyp.
I avsnittet
ClaimsProviders
iContosoCustomPolicy.XML
filen lägger du till följande kod:<ClaimsProvider> <DisplayName>Token Issuer</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="JwtIssuer"> <DisplayName>JWT Issuer</DisplayName> <Protocol Name="None" /> <OutputTokenFormat>JWT</OutputTokenFormat> <Metadata> <Item Key="client_id">{service:te}</Item> <Item Key="issuer_refresh_token_user_identity_claim_type">objectId</Item> <Item Key="SendTokenResponseBodyWithJsonNumbers">true</Item> </Metadata> <CryptographicKeys> <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" /> <Key Id="issuer_refresh_token_key" StorageReferenceId="B2C_1A_TokenEncryptionKeyContainer" /> </CryptographicKeys> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider> <ClaimsProvider> <!-- The technical profile(s) defined in this section is required by the framework to be included in all custom policies. --> <DisplayName>Trustframework Policy Engine TechnicalProfiles</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="TpEngine_c3bd4fe2-1775-4013-b91d-35f16d377d13"> <DisplayName>Trustframework Policy Engine Default Technical Profile</DisplayName> <Protocol Name="None" /> <Metadata> <Item Key="url">{service:te}</Item> </Metadata> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
Vi har deklarerat en utfärdare av JWT-token.
CryptographicKeys
Om du i avsnittet använde olika namn för att konfigurera signerings- och krypteringsnycklarna i steg 1 kontrollerar du att du använder rätt värde förStorageReferenceId
.I avsnittet
UserJourneys
iContosoCustomPolicy.XML
filen lägger du till följande kod:<UserJourney Id="HelloWorldJourney"> <OrchestrationSteps> <OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" /> </OrchestrationSteps> </UserJourney>
Vi har lagt till en UserJourney. Användarresan anger affärslogik som slutanvändaren går igenom när Azure AD B2C bearbetar en begäran. Den här användarresan har bara ett steg som utfärdar en JTW-token med de anspråk som du definierar i nästa steg.
I avsnittet
RelyingParty
iContosoCustomPolicy.XML
filen lägger du till följande kod:<DefaultUserJourney ReferenceId="HelloWorldJourney"/> <TechnicalProfile Id="HelloWorldPolicyProfile"> <DisplayName>Hello World Policy Profile</DisplayName> <Protocol Name="OpenIdConnect" /> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" DefaultValue="abcd-1234-efgh-5678-ijkl-etc."/> <OutputClaim ClaimTypeReferenceId="message" DefaultValue="Hello World!"/> </OutputClaims> <SubjectNamingInfo ClaimType="sub" /> </TechnicalProfile>
Avsnittet RelyingParty är startpunkten för principen. Den anger vilken UserJourney som ska köras och anspråken som ska inkluderas i den token som returneras när principen körs.
När du har slutfört steg 2ContosoCustomPolicy.XML
bör filen se ut ungefär som följande kod:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0" TenantId="Contosob2c2233.onmicrosoft.com" PolicyId="B2C_1A_ContosoCustomPolicy" PublicPolicyUri="http://Contosob2c2233.onmicrosoft.com/B2C_1A_ContosoCustomPolicy">
<BuildingBlocks>
<ClaimsSchema>
<ClaimType Id="objectId">
<DisplayName>unique object Id for subject of the claims being returned</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="message">
<DisplayName>Will hold Hello World message</DisplayName>
<DataType>string</DataType>
</ClaimType>
</ClaimsSchema>
</BuildingBlocks>
<ClaimsProviders><!--Claims Providers Here-->
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="JwtIssuer">
<DisplayName>JWT Issuer</DisplayName>
<Protocol Name="None"/>
<OutputTokenFormat>JWT</OutputTokenFormat>
<Metadata>
<Item Key="client_id">{service:te}</Item>
<Item Key="issuer_refresh_token_user_identity_claim_type">objectId</Item>
<Item Key="SendTokenResponseBodyWithJsonNumbers">true</Item>
</Metadata>
<CryptographicKeys>
<Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer"/>
<Key Id="issuer_refresh_token_key" StorageReferenceId="B2C_1A_TokenEncryptionKeyContainer"/>
</CryptographicKeys>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
<ClaimsProvider>
<DisplayName>Trustframework Policy Engine TechnicalProfiles</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="TpEngine_c3bd4fe2-1775-4013-b91d-35f16d377d13">
<DisplayName>Trustframework Policy Engine Default Technical Profile</DisplayName>
<Protocol Name="None" />
<Metadata>
<Item Key="url">{service:te}</Item>
</Metadata>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
</ClaimsProviders>
<UserJourneys>
<UserJourney Id="HelloWorldJourney">
<OrchestrationSteps>
<OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
</OrchestrationSteps>
</UserJourney>
</UserJourneys>
<RelyingParty><!--
Relying Party Here that's your policy’s entry point
Specify the User Journey to execute
Specify the claims to include in the token that is returned when the policy runs
-->
<DefaultUserJourney ReferenceId="HelloWorldJourney"/>
<TechnicalProfile Id="HelloWorldPolicyProfile">
<DisplayName>Hello World Policy Profile</DisplayName>
<Protocol Name="OpenIdConnect"/>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" DefaultValue="abcd-1234-efgh-5678-ijkl-etc."/>
<OutputClaim ClaimTypeReferenceId="message" DefaultValue="Hello World!"/>
</OutputClaims>
<SubjectNamingInfo ClaimType="sub"/>
</TechnicalProfile>
</RelyingParty>
</TrustFrameworkPolicy>
Steg 3 – Ladda upp anpassad principfil
- Logga in på Azure-portalen.
- Om du har åtkomst till flera klienter väljer du ikonen Inställningar på den översta menyn för att växla till din Azure AD B2C-klient från menyn Kataloger + prenumerationer.
- I Azure-portalen söker du efter och väljer Azure AD B2C.
- I den vänstra menyn, under Principer, väljer du Identity Experience Framework.
- Välj Överför anpassad princip, bläddra bland välj och ladda sedan upp
ContosoCustomPolicy.XML
filen.
När du har laddat upp filen lägger Azure AD B2C till prefixet B2C_1A_
, så namnen ser ut ungefär som B2C_1A_CONTOSOCUSTOMPOLICY.
Steg 4 – Testa den anpassade principen
- Under Anpassade principer väljer du B2C_1A_CONTOSOCUSTOMPOLICY.
- För Välj program på översiktssidan för den anpassade principen väljer du webbprogrammet, till exempel webapp1 som du tidigare registrerade. Kontrollera att värdet Välj svars-URL är inställt på
https://jwt.ms
. - Välj knappen Kör nu .
När principen har slutfört körningen omdirigeras du till https://jwt.ms
och du ser en avkodad JWT-token. Det ser ut ungefär som följande JWT-tokenfragment:
{
"typ": "JWT",
"alg": "RS256",
"kid": "pxLOMWFg...."
}.{
...
"sub": "abcd-1234-efgh-5678-ijkl-etc.",
...
"acr": "b2c_1a_contosocustompolicy",
...
"message": "Hello World!"
}.[Signature]
Observera anspråken message
och sub
som vi anger som utdataanspråk i avsnittet RelyingParty
.
Nästa steg
I den här artikeln har du lärt dig och använt fyra avsnitt som ingår i en anpassad Azure AD B2C-princip. De här avsnitten läggs till som underordnade element i TrustFrameworkPolicy
rotelementet:
- BuildingBlocks
- ClaimsProviders
- UserJourneys
- RelyingParty
Lär dig sedan:
Så här samlar du in och använder användarindata med hjälp av en anpassad princip.
Översikt över anpassade principanspråk.
Om datatypen för anpassade principanspråk.
Om användarindatatyper för anpassad princip.