Gebruikersinvoer verzamelen en bewerken met behulp van aangepast Azure Active Directory B2C-beleid
Met aangepaste beleidsregels voor Azure Active Directory B2C (Azure AD B2C) kunt u gebruikersinvoer verzamelen. Vervolgens kunt u ingebouwde methoden gebruiken om de invoer van de gebruiker te manipuleren.
In dit artikel leert u hoe u een aangepast beleid schrijft waarmee gebruikersinvoer wordt verzameld via een grafische gebruikersinterface. Vervolgens opent u de invoer, verwerkt en retourneert u deze als claims in een JWT-token. Als u deze taak wilt voltooien, gaat u als volgt te werk:
Claims declareren. Een claim maakt tijdelijke opslag van gegevens mogelijk tijdens de uitvoering van een Azure AD B2C-beleid. Het kan informatie over de gebruiker opslaan, zoals voornaam, achternaam of een andere claim die is verkregen van de gebruiker of andere systemen. Meer informatie over claims vindt u in het overzicht van aangepast azure AD B2C-beleid.
Technische profielen definiëren. Een technisch profiel biedt een interface om te communiceren met verschillende soorten partijen. Hiermee kunt u bijvoorbeeld communiceren met de gebruiker om gegevens te verzamelen.
Configureer claimtransformaties die u gebruikt om de claims te bewerken die u declareert.
Inhoudsdefinities configureren. Een inhoudsdefinitie definieert de gebruikersinterface die moet worden geladen. Later kunt u de gebruikersinterface aanpassen door uw eigen aangepaste HTML-inhoud op te geven.
Configureer en toon gebruikersinterfaces voor de gebruiker met behulp van zelf-asserted technische profielen en DisplayClaims.
Roep technische profielen in een bepaalde volgorde aan met behulp van indelingsstappen.
Vereisten
Als u er nog geen hebt, maakt u een Azure AD B2C-tenant die is gekoppeld aan uw Azure-abonnement.
Registreer een webtoepassing en schakel impliciete toekenning van id-token in. Gebruik voor de omleidings-URI https://jwt.ms.
Visual Studio Code (VS Code) moet op uw computer zijn geïnstalleerd.
Voltooi de stappen in Uw eerste aangepaste Azure AD B2C-beleid schrijven - Hallo wereld!. Dit artikel maakt deel uit van de reeks instructies voor het maken en uitvoeren van uw eigen aangepaste beleidsregels.
Notitie
Dit artikel maakt deel uit van de reeks instructies voor het maken en uitvoeren van uw eigen aangepaste beleidsregels in Azure Active Directory B2C. We raden u aan deze reeks te starten vanuit het eerste artikel.
Stap 1: Claims declareren
Aanvullende claims declareren naast objectId en bericht:
Open het
ContosoCustomPolicy.XML
bestand in VS Code.Voeg in de
ClaimsSchema
sectie de volgende ClaimType-declaraties toe:<ClaimType Id="givenName"> <DisplayName>Given Name</DisplayName> <DataType>string</DataType> <UserHelpText>Your given name (also known as first name).</UserHelpText> <UserInputType>TextBox</UserInputType> </ClaimType> <ClaimType Id="surname"> <DisplayName>Surname</DisplayName> <DataType>string</DataType> <UserHelpText>Your surname (also known as family name or last name).</UserHelpText> <UserInputType>TextBox</UserInputType> </ClaimType> <ClaimType Id="displayName"> <DisplayName>Display Name</DisplayName> <DataType>string</DataType> <UserHelpText>Your display name.</UserHelpText> <UserInputType>TextBox</UserInputType> </ClaimType>
We hebben drie claimtypen, givenName, achternaam en displayName gedeclareerd. Deze declaraties omvatten DataType
, UserInputType
en DisplayName
elementen:
- DataType geeft het gegevenstype op van de waarde die de claims bevatten. Meer informatie over de gegevenstypen die door de DataType-elementen worden ondersteund.
- UserInputType geeft het ui-besturingselement op dat wordt weergegeven op de gebruikersinterface als u de waarde van de claim van de gebruiker wilt verzamelen. Meer informatie over de gebruikersinvoertypen die door Azure AD B2C worden ondersteund.
- DisplayName geeft het label op voor het ui-besturingselement dat wordt weergegeven op de gebruikersinterface als u de waarde van de claim van de gebruiker wilt verzamelen.
Stap 2: claimtransformaties definiëren
Een ClaimsTransformation bevat een functie die u gebruikt om een bepaalde claim te converteren naar een andere. U kunt bijvoorbeeld een tekenreeksclaim wijzigen van kleine letters in hoofdletters. Meer informatie over claimtransformaties die worden ondersteund door Azure AD B2C.
Voeg in het
ContosoCustomPolicy.XML
bestand een<ClaimsTransformations>
element toe als onderliggend element van deBuildingBlocks
sectie.<ClaimsTransformations> </ClaimsTransformations>
Voeg de volgende code toe in het
ClaimsTransformations
element:<ClaimsTransformation Id="GenerateRandomObjectIdTransformation" TransformationMethod="CreateRandomString"> <InputParameters> <InputParameter Id="randomGeneratorType" DataType="string" Value="GUID"/> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" TransformationClaimType="outputClaim"/> </OutputClaims> </ClaimsTransformation> <ClaimsTransformation Id="CreateDisplayNameTransformation" TransformationMethod="FormatStringMultipleClaims"> <InputClaims> <InputClaim ClaimTypeReferenceId="givenName" TransformationClaimType="inputClaim1"/> <InputClaim ClaimTypeReferenceId="surname" TransformationClaimType="inputClaim2"/> </InputClaims> <InputParameters> <InputParameter Id="stringFormat" DataType="string" Value="{0} {1}"/> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="outputClaim"/> </OutputClaims> </ClaimsTransformation> <ClaimsTransformation Id="CreateMessageTransformation" TransformationMethod="FormatStringClaim"> <InputClaims> <InputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="inputClaim"/> </InputClaims> <InputParameters> <InputParameter Id="stringFormat" DataType="string" Value="Hello {0}"/> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="message" TransformationClaimType="outputClaim"/> </OutputClaims> </ClaimsTransformation>
We hebben drie claimtransformaties geconfigureerd:
GenerateRandomObjectIdTransformation genereert een willekeurige tekenreeks zoals opgegeven door de methode CreateRandomString . De objectId-claim wordt bijgewerkt met de gegenereerde tekenreeks zoals opgegeven door het
OutputClaim
element.CreateDisplayNameTransformation voegt givenName en achternaam samen om displayName te vormen.
CreateMessageTransformation voegt Hello en displayName samen aan het formulierbericht.
Stap 3: inhoudsdefinities configureren
Met ContentDefinitions kunt u URL's opgeven voor HTML-sjablonen die de indeling van de webpagina's bepalen die u aan uw gebruikers weergeeft. U kunt specifieke gebruikersinterfaces opgeven voor elke stap, zoals aanmelden of registreren, wachtwoordherstel of foutpagina's.
Als u inhoudsdefinitie wilt toevoegen, voegt u de volgende code toe in BuildingBlocks
de sectie van het ContosoCustomPolicy.XML
bestand:
<ContentDefinitions>
<ContentDefinition Id="SelfAssertedContentDefinition">
<LoadUri>~/tenant/templates/AzureBlue/selfAsserted.cshtml</LoadUri>
<RecoveryUri>~/common/default_page_error.html</RecoveryUri>
<DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.7</DataUri>
</ContentDefinition>
</ContentDefinitions>
Stap 4: technische profielen configureren
In een aangepast beleid is een TechnicalProfile het element dat functionaliteit implementeert. Nu u claims en claimstransformaties hebt gedefinieerd, hebt u technische profielen nodig om uw definities uit te voeren. Een technisch profiel wordt gedeclareerd binnen de ClaimsProvider
elementen.
Azure AD B2C biedt een set technische profielen. Elk technisch profiel voert een specifieke rol uit. U gebruikt bijvoorbeeld een TECHNISCH REST-profiel om een HTTP-aanroep naar een service-eindpunt te maken. U kunt een technisch profiel voor claimtransformatie gebruiken om de bewerking uit te voeren die u in een claimtransformatie definieert. Meer informatie over de typen technische profielen die aangepaste Azure AD B2C-beleidsregels bieden.
Waarden instellen voor uw claims
Als u waarden wilt instellen voor objectId, displayName en berichtclaims, configureert u een technisch profiel waarmee de transformaties GenerateRandomObjectIdTransformation, CreateDisplayNameTransformation en CreateMessageTransformation-claims worden uitgevoerd. De claimtransformaties worden uitgevoerd door de volgorde die in het OutputClaimsTransformations
element is gedefinieerd. Er wordt bijvoorbeeld eerst de weergavenaam gemaakt en vervolgens het bericht.
Voeg het volgende
ClaimsProvider
toe als onderliggend element van deClaimsProviders
sectie.<ClaimsProvider> <DisplayName>Technical Profiles to generate claims</DisplayName> </ClaimsProvider>
Als u waarden wilt instellen voor objectId, displayName en berichtclaims, voegt u de volgende code toe binnen het
ClaimsProvider
element dat u zojuist hebt gemaakt:<!--<ClaimsProvider>--> <TechnicalProfiles> <TechnicalProfile Id="ClaimGenerator"> <DisplayName>Generate Object ID, displayName and message Claims Technical Profile.</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId"/> <OutputClaim ClaimTypeReferenceId="displayName"/> <OutputClaim ClaimTypeReferenceId="message"/> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="GenerateRandomObjectIdTransformation"/> <OutputClaimsTransformation ReferenceId="CreateDisplayNameTransformation"/> <OutputClaimsTransformation ReferenceId="CreateMessageTransformation"/> </OutputClaimsTransformations> </TechnicalProfile> </TechnicalProfiles> <!--</ClaimsProvider>-->
Gebruikersinvoer verzamelen
U genereert de displayName-claim van givenName en achternaam, dus u moet deze verzamelen als gebruikersinvoer. Als u een gebruikersinvoer wilt verzamelen, gebruikt u een type technisch profiel met de naam Self-Asserted. Wanneer u een zelf-asserted technisch profiel configureert, moet u verwijzen naar de inhoudsdefinities als zelf-asserted technisch profiel is verantwoordelijk voor het weergeven van een gebruikersinterface.
Voeg het volgende
ClaimsProvider
toe als onderliggend element van deClaimsProviders
sectie.<ClaimsProvider> <DisplayName>Technical Profiles to collect user's details </DisplayName> </ClaimsProvider>
Voeg de volgende code toe in het
ClaimsProvider
element dat u zojuist hebt gemaakt:<TechnicalProfiles> <TechnicalProfile Id="UserInformationCollector"> <DisplayName>Collect User Input Technical Profile</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> <Metadata> <Item Key="ContentDefinitionReferenceId">SelfAssertedContentDefinition</Item> </Metadata> <DisplayClaims> <DisplayClaim ClaimTypeReferenceId="givenName" Required="true"/> <DisplayClaim ClaimTypeReferenceId="surname" Required="true"/> </DisplayClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="givenName"/> <OutputClaim ClaimTypeReferenceId="surname"/> </OutputClaims> </TechnicalProfile> </TechnicalProfiles>
Let op de twee weergaveclaims voor de claims givenName en achternaam . Beide claims worden gemarkeerd als vereist, zodat de gebruiker de waarden moet invoeren voordat het formulier wordt weergegeven. De claims worden weergegeven op het scherm in de volgorde die is gedefinieerd in het element DisplayClaims , zoals de opgegeven naam en vervolgens de achternaam.
Stap 5: Gebruikersbelevingen definiëren
U gebruikt gebruikerstrajecten om de volgorde te definiëren waarin de technische profielen worden aangeroepen. U gebruikt het OrchestrationSteps
element om de stappen in een gebruikerstraject op te geven.
Vervang de bestaande inhoud van de HelloWorldJourney
User Journey door de volgende code:
<OrchestrationSteps>
<OrchestrationStep Order="1" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="GetUserInformationClaimsExchange" TechnicalProfileReferenceId="UserInformationCollector"/>
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="GetMessageClaimsExchange" TechnicalProfileReferenceId="ClaimGenerator"/>
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer"/>
</OrchestrationSteps>
Volgens de indelingsstappen verzamelen we gebruikersinvoer, stellen we waarden in voor objectId, displayName en berichtclaims en verzenden we het Jwt-token.
Stap 6: Relying Party bijwerken
Vervang de inhoud van het OutputClaims
element van de RelyingParty
sectie door de volgende code:
<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
<OutputClaim ClaimTypeReferenceId="displayName"/>
<OutputClaim ClaimTypeReferenceId="message"/>
Nadat u stap 6 hebt voltooid, ziet het ContosoCustomPolicy.XML
bestand er ongeveer als volgt uit:
<?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>
<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>
<ClaimType Id="givenName">
<DisplayName>Given Name</DisplayName>
<DataType>string</DataType>
<UserHelpText>Your given name (also known as first name).</UserHelpText>
<UserInputType>TextBox</UserInputType>
</ClaimType>
<ClaimType Id="surname">
<DisplayName>Surname</DisplayName>
<DataType>string</DataType>
<UserHelpText>Your surname (also known as family name or last name).</UserHelpText>
<UserInputType>TextBox</UserInputType>
</ClaimType>
<ClaimType Id="displayName">
<DisplayName>Display Name</DisplayName>
<DataType>string</DataType>
<UserHelpText>Your display name.</UserHelpText>
<UserInputType>TextBox</UserInputType>
</ClaimType>
</ClaimsSchema>
<ClaimsTransformations>
<ClaimsTransformation Id="GenerateRandomObjectIdTransformation" TransformationMethod="CreateRandomString">
<InputParameters>
<InputParameter Id="randomGeneratorType" DataType="string" Value="GUID"/>
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="objectId" TransformationClaimType="outputClaim"/>
</OutputClaims>
</ClaimsTransformation>
<ClaimsTransformation Id="CreateDisplayNameTransformation" TransformationMethod="FormatStringMultipleClaims">
<InputClaims>
<InputClaim ClaimTypeReferenceId="givenName" TransformationClaimType="inputClaim1"/>
<InputClaim ClaimTypeReferenceId="surname" TransformationClaimType="inputClaim2"/>
</InputClaims>
<InputParameters>
<InputParameter Id="stringFormat" DataType="string" Value="{0} {1}"/>
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="outputClaim"/>
</OutputClaims>
</ClaimsTransformation>
<ClaimsTransformation Id="CreateMessageTransformation" TransformationMethod="FormatStringClaim">
<InputClaims>
<InputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="inputClaim"/>
</InputClaims>
<InputParameters>
<InputParameter Id="stringFormat" DataType="string" Value="Hello {0}"/>
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="message" TransformationClaimType="outputClaim"/>
</OutputClaims>
</ClaimsTransformation>
</ClaimsTransformations>
<ContentDefinitions>
<ContentDefinition Id="SelfAssertedContentDefinition">
<LoadUri>~/tenant/templates/AzureBlue/selfAsserted.cshtml</LoadUri>
<RecoveryUri>~/common/default_page_error.html</RecoveryUri>
<DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.7</DataUri>
</ContentDefinition>
</ContentDefinitions>
</BuildingBlocks>
<!--Claims Providers Here-->
<ClaimsProviders>
<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>
<ClaimsProvider>
<DisplayName>Claim Generator Technical Profiles</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="ClaimGenerator">
<DisplayName>Generate Object ID, displayName and message Claims Technical Profile.</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="objectId"/>
<OutputClaim ClaimTypeReferenceId="displayName"/>
<OutputClaim ClaimTypeReferenceId="message"/>
</OutputClaims>
<OutputClaimsTransformations>
<OutputClaimsTransformation ReferenceId="GenerateRandomObjectIdTransformation"/>
<OutputClaimsTransformation ReferenceId="CreateDisplayNameTransformation"/>
<OutputClaimsTransformation ReferenceId="CreateMessageTransformation"/>
</OutputClaimsTransformations>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
<ClaimsProvider>
<DisplayName>Technical Profiles to collect user's details</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="UserInformationCollector">
<DisplayName>Collect User Input Technical Profile</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
<Metadata>
<Item Key="ContentDefinitionReferenceId">SelfAssertedContentDefinition</Item>
</Metadata>
<DisplayClaims>
<DisplayClaim ClaimTypeReferenceId="givenName" Required="true"/>
<DisplayClaim ClaimTypeReferenceId="surname" Required="true"/>
</DisplayClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="givenName"/>
<OutputClaim ClaimTypeReferenceId="surname"/>
</OutputClaims>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
</ClaimsProviders>
<UserJourneys>
<UserJourney Id="HelloWorldJourney">
<OrchestrationSteps>
<OrchestrationStep Order="1" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="GetUserInformationClaimsExchange" TechnicalProfileReferenceId="UserInformationCollector"/>
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="GetMessageClaimsExchange" TechnicalProfileReferenceId="ClaimGenerator"/>
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="3" 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"/>
<OutputClaim ClaimTypeReferenceId="displayName"/>
<OutputClaim ClaimTypeReferenceId="message"/>
</OutputClaims>
<SubjectNamingInfo ClaimType="sub"/>
</TechnicalProfile>
</RelyingParty>
</TrustFrameworkPolicy>
Als u dit nog niet hebt gedaan, vervangt yourtenant
u het subdomeingedeelte van uw tenantnaam, zoals contoso
. Meer informatie over het ophalen van uw tenantnaam.
Stap 3: Aangepast beleidsbestand uploaden
Volg de stappen in het bestand Aangepast beleid uploaden. Als u een bestand met dezelfde naam uploadt als het bestand dat zich al in de portal bevindt, moet u het aangepaste beleid overschrijven selecteren als dit al bestaat.
Stap 4: het aangepaste beleid testen
Selecteer onder Aangepast beleid B2C_1A_CONTOSOCUSTOMPOLICY.
Selecteer voor Toepassing selecteren op de overzichtspagina van het aangepaste beleid de webtoepassing, zoals web-app1 die u eerder hebt geregistreerd. Zorg ervoor dat de waarde antwoord-URL selecteren is ingesteld op
https://jwt.ms
.Knop Nu uitvoeren selecteren.
Voer de opgegeven naam en achternaam in en selecteer Vervolgens Doorgaan.
Nadat het beleid is uitgevoerd, wordt u omgeleid naar https://jwt.ms
en ziet u een gedecodeerd JWT-token. Het lijkt op het volgende JWT-tokenfragment:
{
"typ": "JWT",
"alg": "RS256",
"kid": "pxLOMWFg...."
}.{
...
"sub": "c7ae4515-f7a7....",
...
"acr": "b2c_1a_contosocustompolicy",
...
"name": "Maurice Paulet",
"message": "Hello Maurice Paulet"
}.[Signature]
Volgende stappen
Vervolgens leert u:
Over typen technische profielen in het aangepaste beleid van Azure AD B2C.