Sdílet prostřednictvím


Možnosti registrace aplikace SAML v Azure AD B2C

Tento článek popisuje možnosti konfigurace, které jsou k dispozici při připojování Azure Active Directory B2C (Azure AD B2C) k aplikaci SAML (Security Assertion Markup Language).

Než začnete, pomocí selektoru Zvolit typ zásady zvolte typ zásady, kterou nastavujete. Azure Active Directory B2C nabízí dvě metody pro definování způsobu interakce uživatelů s vašimi aplikacemi: prostřednictvím předdefinovaných toků uživatelů nebo prostřednictvím plně konfigurovatelných vlastních zásad. Kroky vyžadované v tomto článku se pro každou metodu liší.

Tato funkce je dostupná jenom pro vlastní zásady. Pro kroky nastavení vyberte v předchozím selektoru vlastní zásady .

Zadání podpisu odpovědi SAML

Můžete zadat certifikát, který se má použít k podepsání zpráv SAML. Zpráva je <samlp:Response> prvek v odpovědi SAML odeslané do aplikace.

Pokud ještě nemáte klíč zásad, vytvořte ho. Potom nakonfigurujte SamlMessageSigning položku metadat v technickém profilu vystavitele tokenu SAML. StorageReferenceId musí odkazovat na název klíče zásady.

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <!-- SAML Token Issuer technical profile -->
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
        ...
      <CryptographicKeys>
        <Key Id="SamlMessageSigning" StorageReferenceId="B2C_1A_SamlMessageCert"/>
        ...
      </CryptographicKeys>
    ...
    </TechnicalProfile>

Algoritmus podpisu

Můžete nakonfigurovat algoritmus podpisu, který se používá k podepsání kontrolního výrazu SAML. Možné hodnoty jsou Sha256, , Sha512Sha384nebo Sha1. Ujistěte se, že technický profil a aplikace používají stejný algoritmus podpisu. Použijte pouze algoritmus, který váš certifikát podporuje.

Nakonfigurujte algoritmus podpisu pomocí XmlSignatureAlgorithm klíče metadat v rámci elementu předávající strany Metadata .

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="SAML2"/>
    <Metadata>
      <Item Key="XmlSignatureAlgorithm">Sha256</Item>
    </Metadata>
   ..
  </TechnicalProfile>
</RelyingParty>

Kontrola podpisu kontrolního výrazu SAML

Pokud vaše aplikace očekává podepsání oddílu kontrolního výrazu SAML, ujistěte se, že poskytovatel služby SAML nastavil WantAssertionsSigned hodnotu true. Pokud je nastavená false na nebo neexistuje, oddíl kontrolního výrazu se nepodepíše.

Následující příklad ukazuje metadata pro poskytovatele služby SAML s WantAssertionsSigned nastavenou na true.

<EntityDescriptor ID="id123456789" entityID="https://samltestapp2.azurewebsites.net" validUntil="2099-12-31T23:59:59Z" xmlns="urn:oasis:names:tc:SAML:2.0:metadata">
  <SPSSODescriptor WantAssertionsSigned="true" AuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
  ...
  </SPSSODescriptor>
</EntityDescriptor>

Podpisový certifikát

Vaše zásada musí zadat certifikát, který se použije k podepsání oddílu kontrolních výrazů SAML odpovědi SAML. Pokud ještě nemáte klíč zásad, vytvořte ho. Potom nakonfigurujte SamlAssertionSigning položku metadat v technickém profilu vystavitele tokenu SAML. StorageReferenceId musí odkazovat na název klíče zásady.

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <!-- SAML Token Issuer technical profile -->
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
        ...
      <CryptographicKeys>
        <Key Id="SamlAssertionSigning" StorageReferenceId="B2C_1A_SamlMessageCert"/>
        ...
      </CryptographicKeys>
    ...
    </TechnicalProfile>

Povolení šifrování v kontrolních výrazech SAML

Pokud vaše aplikace očekává, že kontrolní výrazy SAML budou v šifrované podobě, ujistěte se, že je v zásadách Azure AD B2C povolené šifrování.

Azure AD B2C používá certifikát veřejného klíče poskytovatele služeb k šifrování kontrolního výrazu SAML. Veřejný klíč musí existovat v koncovém bodu metadat aplikace SAML s hodnotou nastavenou KeyDescriptoruse na Encryption, jak je znázorněno v následujícím příkladu:

<KeyDescriptor use="encryption">
  <KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
    <X509Data>
      <X509Certificate>valid certificate</X509Certificate>
    </X509Data>
  </KeyInfo>
</KeyDescriptor>

Pokud chcete službě Azure AD B2C povolit odesílání šifrovaných kontrolních výrazů, nastavte WantsEncryptedAssertion položku metadat na true v technickém profilu předávající strany. Můžete také nakonfigurovat algoritmus, který se používá k šifrování kontrolního výrazu SAML.

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="SAML2"/>
    <Metadata>
      <Item Key="WantsEncryptedAssertions">true</Item>
    </Metadata>
   ..
  </TechnicalProfile>
</RelyingParty>

Metoda šifrování

Pokud chcete nakonfigurovat metodu šifrování, která se používá k šifrování dat kontrolního výrazu SAML, nastavte DataEncryptionMethod klíč metadat v rámci předávající strany. Možné hodnoty jsou Aes256 (výchozí), Aes192, Sha512nebo Aes128. Metadata řídí hodnotu elementu <EncryptedData> v odpovědi SAML.

Pokud chcete nakonfigurovat metodu šifrování pro šifrování kopie klíče použitého k šifrování dat kontrolního výrazu SAML, nastavte KeyEncryptionMethod klíč metadat v rámci předávající strany. Možné hodnoty jsou:

  • Rsa15 (výchozí): Algoritmus PKCS (Public Key Cryptography Standard) RSA Verze 1.5
  • RsaOaep: Algoritmus šifrování OAEP (Optimal Asymetrické šifrování OAEP).

Metadata řídí hodnotu elementu <EncryptedKey> v odpovědi SAML.

Následující příklad ukazuje EncryptedAssertion část kontrolního výrazu SAML. Šifrovaná datová metoda je Aes128a šifrovaná metoda klíče je Rsa15.

<saml:EncryptedAssertion>
  <xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
    xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" Type="http://www.w3.org/2001/04/xmlenc#Element">
    <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" />
    <dsig:KeyInfo>
      <xenc:EncryptedKey>
        <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
        <xenc:CipherData>
          <xenc:CipherValue>...</xenc:CipherValue>
        </xenc:CipherData>
      </xenc:EncryptedKey>
    </dsig:KeyInfo>
    <xenc:CipherData>
      <xenc:CipherValue>...</xenc:CipherValue>
    </xenc:CipherData>
  </xenc:EncryptedData>
</saml:EncryptedAssertion>

Formát šifrovaných kontrolních výrazů můžete změnit. Pokud chcete nakonfigurovat formát šifrování, nastavte UseDetachedKeys klíč metadat v rámci předávající strany. Možné hodnoty: true nebo false (výchozí). Pokud je hodnota nastavena na true, odpojené klíče přidávají šifrovaný kontrolní výraz jako podřízený EncryptedAssertion EncryptedDatamísto .

Nakonfigurujte metodu šifrování a formát pomocí klíčů metadat v rámci technického profilu předávající strany:

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="SAML2"/>
    <Metadata>
      <Item Key="DataEncryptionMethod">Aes128</Item>
      <Item Key="KeyEncryptionMethod">Rsa15</Item>
      <Item Key="UseDetachedKeys">false</Item>
    </Metadata>
   ..
  </TechnicalProfile>
</RelyingParty>

Konfigurace toku iniciovaného zprostředkovatele identity

Pokud vaše aplikace očekává přijetí kontrolního výrazu SAML bez prvního odeslání požadavku SAML AuthN na zprostředkovatele identity (IDP), musíte nakonfigurovat Azure AD B2C pro tok iniciovaný zprostředkovatelem identity.

V toku iniciovaného zprostředkovatelem identity (Azure AD B2C) spustí proces přihlašování. Zprostředkovatel identity odešle nevyžádanou odpověď SAML poskytovateli služby (vaší aplikaci předávající strany).

V současné době nepodporujeme scénáře, kdy je iniciační zprostředkovatel identity externím zprostředkovatelem identity federovaným s Azure AD B2C, jako je Active Directory Federation Services (AD FS) nebo Salesforce. Tok iniciovaný zprostředkovatelem identity se podporuje jenom pro ověřování místních účtů v Azure AD B2C.

Pokud chcete povolit tok iniciovaný zprostředkovatelem identity, nastavte IdpInitiatedProfileEnabled položku metadat do true technického profilu předávající strany.

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="SAML2"/>
    <Metadata>
      <Item Key="IdpInitiatedProfileEnabled">true</Item>
    </Metadata>
   ..
  </TechnicalProfile>
</RelyingParty>

Pokud se chcete přihlásit nebo zaregistrovat uživatele prostřednictvím toku iniciovaného zprostředkovatele identity, použijte následující adresu URL:

https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/generic/login?EntityId=<app-identifier-uri>&RelayState=<relay-state> 

Nahraďte následující hodnoty:

  • Nahraďte <tenant-name> názvem vašeho tenanta.
  • Nahraďte <policy-name> názvem zásad předávající strany SAML.
  • Nahraďte <app-identifier-uri> hodnotou v souboru metadat, například https://contoso.onmicrosoft.com/app-name.identifierUris
  • [Volitelné] nahraďte <relay-state> hodnotou obsaženou v autorizační žádosti, která se vrátí také v odpovědi tokenu. Parametr relay-state se používá ke kódování informací o stavu uživatele v aplikaci před tím, než došlo k žádosti o ověření, například ke stránce, na které se nacházel.

Ukázková zásada

K testování pomocí testovací aplikace SAML můžete použít úplnou ukázkovou zásadu:

  1. Stáhněte si ukázkovou zásadu přihlášení iniciovanou samL-SP.
  2. Aktualizujte TenantId ho tak, aby odpovídal názvu vašeho tenanta. Tento článek používá příklad contoso.b2clogin.com.
  3. Ponechte název zásady B2C_1A_signup_signin_saml.

Konfigurace doby života odpovědi SAML

Můžete nakonfigurovat dobu, po kterou zůstane odpověď SAML platná. Nastavte životnost pomocí TokenLifeTimeInSeconds položky metadat v technickém profilu vystavitele tokenu SAML. Tato hodnota je počet sekund, které mohou uplynuly z NotBefore časového razítka vypočítaného v době vystavení tokenu. Výchozí životnost je 300 sekund (pět minut).

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
      <Metadata>
        <Item Key="TokenLifeTimeInSeconds">400</Item>
      </Metadata>
      ...
    </TechnicalProfile>

Konfigurace nerovnoměrné distribuce času odpovědi SAML

Můžete nakonfigurovat nerovnoměrnou distribuci času použitou na časové razítko odpovědi NotBefore SAML. Tato konfigurace zajišťuje, že pokud se časy mezi dvěma platformami nesynchronizují, bude kontrolní výraz SAML stále považován za platný, pokud je v této době nerovnoměrná distribuce.

Nastavte nerovnoměrnou distribuci času pomocí TokenNotBeforeSkewInSeconds položky metadat v technickém profilu vystavitele tokenu SAML. Šikmá hodnota je uvedena v sekundách s výchozí hodnotou 0. Maximální hodnota je 3600 (jedna hodina).

Pokud je například TokenNotBeforeSkewInSeconds nastavená hodnota 120 sekund:

  • Token se vydává v 13:05:10 UTC.
  • Token je platný od 13:03:10 UTC.
<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
      <Metadata>
        <Item Key="TokenNotBeforeSkewInSeconds">120</Item>
      </Metadata>
      ...
    </TechnicalProfile>

Odebrání milisekund z data a času

Můžete určit, jestli se v odpovědi SAML odeberou milisekundy z hodnot data a času. (Mezi tyto hodnoty patří IssueInstant, NotBefore, NotOnOrAftera AuthnInstant.) Pokud chcete odebrat milisekundy, nastavte RemoveMillisecondsFromDateTime klíč metadat v rámci předávající strany. Možné hodnoty: false (výchozí) nebo true.

  <RelyingParty>
    <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="SAML2" />
      <Metadata>
        <Item Key="RemoveMillisecondsFromDateTime">true</Item>
      </Metadata>
      <OutputClaims>
             ...
      </OutputClaims>
      <SubjectNamingInfo ClaimType="objectId" ExcludeAsClaim="true" />
    </TechnicalProfile>
  </RelyingParty>

Přepsání identifikátoru URI vystavitele pomocí ID vystavitele

Pokud máte více aplikací SAML, které závisí na různých entityID hodnotách, můžete hodnotu v souboru předávající strany přepsat IssuerUri . Pokud chcete přepsat identifikátor URI vystavitele, zkopírujte technický profil s Saml2AssertionIssuer ID ze základního souboru a přepište IssuerUri hodnotu.

Tip

<ClaimsProviders> Zkopírujte oddíl ze základu a zachovejte tyto prvky v rámci zprostředkovatele deklarací identity: <DisplayName>Token Issuer</DisplayName>, <TechnicalProfile Id="Saml2AssertionIssuer">a <DisplayName>Token Issuer</DisplayName>.

Příklad:

   <ClaimsProviders>   
    <ClaimsProvider>
      <DisplayName>Token Issuer</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Saml2AssertionIssuer">
          <DisplayName>Token Issuer</DisplayName>
          <Metadata>
            <Item Key="IssuerUri">customURI</Item>
          </Metadata>
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
  </ClaimsProviders>
  <RelyingParty>
    <DefaultUserJourney ReferenceId="SignUpInSAML" />
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="SAML2" />
      <Metadata>
     …

Správa relace

Relaci mezi Azure AD B2C a aplikací předávající strany SAML můžete spravovat pomocí UseTechnicalProfileForSessionManagement elementu a SamlSSOSessionProvider.

Vynucení opětovného ověření uživatelů

Aby se uživatelé mohli znovu ověřit, může aplikace do žádosti o ověření SAML zahrnout ForceAuthn atribut. Atribut ForceAuthn je logická hodnota. Pokud je nastavená na truehodnotu , relace uživatele se v Azure AD B2C zneplatní a uživatel bude nucen znovu provést ověření.

Následující požadavek na ověření SAML ukazuje, jak nastavit ForceAuthn atribut na true.

<samlp:AuthnRequest 
       Destination="https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1A_SAML2_signup_signin/samlp/sso/login"
       ForceAuthn="true" ...>
    ...
</samlp:AuthnRequest>

Podepsání metadat SAML zprostředkovatele identity Azure AD B2C

Pokud to aplikace vyžaduje, můžete azure AD B2C instruovat dokument metadat pro zprostředkovatele identity SAML. Pokud ještě nemáte klíč zásad, vytvořte ho. Potom nakonfigurujte MetadataSigning položku metadat v technickém profilu vystavitele tokenu SAML. StorageReferenceId musí odkazovat na název klíče zásady.

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <!-- SAML Token Issuer technical profile -->
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
        ...
      <CryptographicKeys>
        <Key Id="MetadataSigning" StorageReferenceId="B2C_1A_SamlMetadataCert"/>
        ...
      </CryptographicKeys>
    ...
    </TechnicalProfile>

Ladění protokolu SAML

Pokud chcete pomoct s konfigurací a laděním integrace s vaším poskytovatelem služeb, můžete použít rozšíření prohlížeče pro protokol SAML. Rozšíření prohlížeče zahrnují rozšíření SAML DevTools pro Chrome, SAML-tracer pro Firefox a Vývojářské nástroje pro Edge nebo Internet Explorer.

Pomocí těchto nástrojů můžete zkontrolovat integraci mezi vaší aplikací a Azure AD B2C. Příklad:

  • Zkontrolujte, jestli požadavek SAML obsahuje podpis, a zjistěte, jaký algoritmus se používá k přihlášení k žádosti o autorizaci.
  • Zkontrolujte, jestli Azure AD B2C vrací chybovou zprávu.
  • Zkontrolujte, jestli je oddíl kontrolního výrazu zašifrovaný.

Další kroky

  • Další informace o protokolu SAML najdete na webu OASIS.
  • Získejte testovací webovou aplikaci SAML z úložiště komunity Azure AD B2C na GitHubu.