Sdílet prostřednictvím


Napište své první vlastní zásady Azure Active Directory B2C – Hello World!

V aplikaci můžete použít toky uživatelů, které uživatelům umožňují zaregistrovat se, přihlásit se nebo spravovat svůj profil. Pokud toky uživatelů nepokrývají všechny vaše obchodní potřeby, můžete použít vlastní zásady.

I když k psaní vlastních zásad můžete použít předpřipravený balíček vlastních zásad, je důležité pochopit, jak se vytvářejí vlastní zásady. V tomto článku se dozvíte, jak vytvořit první vlastní zásady od začátku.

Předpoklady

Poznámka:

Tento článek je součástí řady s návody k vytvoření a spuštění vlastních zásad v Azure Active Directory B2C. Doporučujeme spustit tuto řadu z prvního článku.

Krok 1 : Konfigurace podpisových a šifrovacích klíčů

Pokud jste to ještě neudělali, vytvořte následující šifrovací klíče. Pokud chcete průvodce automatizovat níže, navštivte instalační aplikaci IEF a postupujte podle pokynů:

  1. Pomocí kroků v části Přidání podpisových a šifrovacích klíčů pro aplikace Identity Experience Framework vytvořte podpisový klíč.

  2. Pomocí kroků v tématu Přidání podpisových a šifrovacích klíčů pro aplikace Identity Experience Framework vytvořte šifrovací klíč.

Krok 2 : Sestavení souboru vlastních zásad

  1. Ve VS Code vytvořte a otevřete soubor ContosoCustomPolicy.XML.

  2. ContosoCustomPolicy.XML Do souboru přidejte následující kód:

        <?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>
    
    

    Nahraďte yourtenant subdoménou části vašeho názvu tenanta, například contoso. Zjistěte, jak získat název tenanta.

    Elementy XML definují prvek nejvyšší úrovně TrustFrameworkPolicy souboru zásad s ID zásady a názvem tenanta. Element TrustFrameworkPolicy obsahuje další elementy XML, které použijete v této řadě.

  3. Pokud chcete deklarovat deklaraci identity, přidejte do BuildingBlocks části ContosoCustomPolicy.XML souboru následující kód:

      <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>
    

    Deklarace identity je jako proměnná. Deklarace deklarace identity také zobrazuje datový typ deklarace identity.

  4. ClaimsProviders V části ContosoCustomPolicy.XML souboru přidejte následující kód:

        <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>
    

    Deklarovali jsme vystavitele tokenu JWT. CryptographicKeys Pokud jste v části použili různé názvy ke konfiguraci podpisových a šifrovacích klíčů v kroku 1, ujistěte se, že používáte správnou hodnotu .StorageReferenceId

  5. UserJourneys V části ContosoCustomPolicy.XML souboru přidejte následující kód:

      <UserJourney Id="HelloWorldJourney">
        <OrchestrationSteps>
          <OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
        </OrchestrationSteps>
      </UserJourney>
    

    Přidali jsme UserJourney. Cesta uživatele určuje obchodní logiku, kterou koncový uživatel prochází, protože Azure AD B2C zpracovává požadavek. Tato cesta uživatele má pouze jeden krok, který vydává token JTW s deklaracemi identity, které definujete v dalším kroku.

  6. RelyingParty V části ContosoCustomPolicy.XML souboru přidejte následující kód:

      <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>
    

    Oddíl RelyingParty je vstupním bodem vaší zásady. Určuje, že má uživatelJourney provést a deklarace identity, které se mají zahrnout do tokenu, který se vrátí při spuštění zásady.

Po dokončení kroku 2ContosoCustomPolicy.XML by měl soubor vypadat podobně jako následující kód:

    <?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>

Krok 3 : Nahrání souboru vlastních zásad

  1. Přihlaste se k portálu Azure.
  2. Pokud máte přístup k více tenantům, v horní nabídce vyberte ikonu Nastavení a v nabídce Adresáře a předplatná přepněte do svého tenanta Azure AD B2C.
  3. Na webu Azure Portal vyhledejte a vyberte Azure AD B2C.
  4. V nabídce vlevo v části Zásady vyberte Architekturu prostředí identit.
  5. Vyberte Nahrát vlastní zásady, vyberte a pak soubor nahrajte ContosoCustomPolicy.XML .

Po nahrání souboru přidá Azure AD B2C předponu B2C_1A_, takže názvy vypadají podobně jako B2C_1A_CONTOSOCUSTOMPOLICY.

Krok 4 – Testování vlastních zásad

  1. V části Vlastní zásady vyberte B2C_1A_CONTOSOCUSTOMPOLICY.
  2. V části Vybrat aplikaci na stránce přehledu vlastních zásad vyberte webovou aplikaci, například webovou aplikaci1 , kterou jste předtím zaregistrovali. Ujistěte se, že je nastavená https://jwt.mshodnota Vybrat adresu URL odpovědi.
  3. Vyberte tlačítko Spustit.

Po dokončení provádění zásady budete přesměrováni na https://jwt.msa zobrazí se dekódovaný token JWT. Vypadá podobně jako následující fragment kódu tokenu JWT:

    {
      "typ": "JWT",
      "alg": "RS256",
      "kid": "pxLOMWFg...."
    }.{
      ...
      "sub": "abcd-1234-efgh-5678-ijkl-etc.",
      ...
      "acr": "b2c_1a_contosocustompolicy",
      ...
      "message": "Hello World!"
    }.[Signature]

message Všimněte si deklarací identity a sub deklarací identity, které jsme v RelyingParty části nastavili jako výstupní deklarace identity.

Další kroky

V tomto článku jste se dozvěděli a použili čtyři části, které jsou součástí vlastních zásad Azure AD B2C. Tyto oddíly se přidají jako podřízené prvky kořenového elementu TrustFrameworkPolicy :

  • BuildingBlocks
  • ClaimsProviders
  • UserJourneys
  • RelyingParty

Dále se dozvíte: