Azure AD B2C'de SAML uygulaması kaydetme seçenekleri

Bu makalede, Azure Active Directory B2C'yi (Azure AD B2C) Güvenlik Onaylama İşaretleme Dili (SAML) uygulamanızla bağlarken kullanılabilen yapılandırma seçenekleri açıklanmaktadır.

Başlamadan önce, ayarladığınız ilke türünü seçmek için İlke türü seçin seçicisini kullanın. Azure Active Directory B2C, kullanıcıların uygulamalarınızla nasıl etkileşim kurduğunu tanımlamak için iki yöntem sunar: önceden tanımlanmış kullanıcı akışları veya tam olarak yapılandırılabilir özel ilkeler aracılığıyla. Bu makalede gerekli adımlar her yöntem için farklıdır.

Bu özellik yalnızca özel ilkeler için kullanılabilir. Kurulum adımları için, önceki seçicide Özel ilke'yi seçin.

SAML yanıt imzası belirtme

SAML iletilerini imzalamak için kullanılacak bir sertifika belirtebilirsiniz. İleti, uygulamaya gönderilen SAML yanıtının içindeki öğedir <samlp:Response> .

İlke anahtarınız yoksa bir tane oluşturun. Ardından SAML Belirteci SamlMessageSigning Veren teknik profilinde meta veri öğesini yapılandırın. StorageReferenceId ilke anahtarı adına başvurmalıdır.

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

İmza algoritması

SAML onayını imzalamak için kullanılan imza algoritmasını yapılandırabilirsiniz. Olası değerler Sha256: , Sha384, Sha512veya Sha1. Teknik profilin ve uygulamanın aynı imza algoritmasını kullandığından emin olun. Yalnızca sertifikanızın desteklediği algoritmayı kullanın.

Bağlı olan taraf Metadata öğesindeki XmlSignatureAlgorithm meta veri anahtarını kullanarak imza algoritmasını yapılandırın.

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

SAML onay imzasını denetleme

Uygulamanız SAML onay bölümünün imzalanmasını beklediğinde, SAML hizmet sağlayıcısının olarak ayarlandığından WantAssertionsSignedtrueemin olun. Olarak ayarlandıysa false veya yoksa onay bölümü imzalı olmaz.

Aşağıdaki örnekte, WantAssertionsSigned olarak ayarlanmış bir SAML hizmet sağlayıcısının meta verileri gösterilmektedir 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>

İmza sertifikası

İlkeniz, SAML yanıtının SAML onayları bölümünü imzalamak için kullanılacak bir sertifika belirtmelidir. İlke anahtarınız yoksa bir tane oluşturun. Ardından SAML Belirteci SamlAssertionSigning Veren teknik profilinde meta veri öğesini yapılandırın. StorageReferenceId ilke anahtarı adına başvurmalıdır.

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

SAML onaylarında şifrelemeyi etkinleştirme

Uygulamanız SAML onaylarının şifrelenmiş biçimde olmasını beklediğinde, Azure AD B2C ilkesinde şifrelemenin etkinleştirildiğinden emin olun.

Azure AD B2C, SAML onayını şifrelemek için hizmet sağlayıcısının ortak anahtar sertifikasını kullanır. Ortak anahtar, aşağıdaki örnekte gösterildiği gibi SAML uygulamasının KeyDescriptoruse meta veri uç noktasında değeri olarak ayarlanmış Encryptionolmalıdır:

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

Azure AD B2C'nin şifrelenmiş onaylar göndermesini sağlamak için true bağlı olan taraf teknik profilinde meta veri öğesini olarak ayarlayınWantsEncryptedAssertion. SAML onayını şifrelemek için kullanılan algoritmayı da yapılandırabilirsiniz.

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

Şifreleme yöntemi

SAML onay verilerini şifrelemek için kullanılan şifreleme yöntemini yapılandırmak için bağlı olan taraf içinde meta veri anahtarını ayarlayın DataEncryptionMethod . Olası değerler şunlardır Aes256 : (varsayılan), Aes192, Sha512veya Aes128. Meta veriler, SAML yanıtında öğesinin değerini <EncryptedData> denetler.

SAML onay verilerini şifrelemek için kullanılan anahtarın kopyasını şifrelemek için şifreleme yöntemini yapılandırmak için, bağlı olan taraf içinde meta veri anahtarını ayarlayın KeyEncryptionMethod . Olası değerler şunlardır:

  • Rsa15 (varsayılan): RSA Ortak Anahtar Şifreleme Standardı (PKCS) Sürüm 1.5 algoritması.
  • RsaOaep: RSA Optimal Asimetrik Şifreleme Doldurma (OAEP) şifreleme algoritması.

Meta veriler, SAML yanıtında öğesinin değerini <EncryptedKey> denetler.

Aşağıdaki örnekte, SAML onaylama işleminin bölümü gösterilmektedir EncryptedAssertion . Şifrelenmiş veri yöntemi şeklindedir Aes128ve şifrelenmiş anahtar yöntemi ise şeklindedir 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>

Şifrelenmiş onayların biçimini değiştirebilirsiniz. Şifreleme biçimini yapılandırmak için bağlı olan taraf içindeki meta veri anahtarını ayarlayın UseDetachedKeys . Olası değerler: true veya false (varsayılan). Değeri olarak ayarlandığındatrue, ayrılmış anahtarlar şifrelenmiş onayları yerine EncryptedDataalt EncryptedAssertion öğesi olarak ekler.

Bağlı olan taraf teknik profilindeki meta veri anahtarlarını kullanarak şifreleme yöntemini ve biçimini yapılandırın:

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

IdP tarafından başlatılan akışı yapılandırma

Uygulamanız önce kimlik sağlayıcısına (IdP) SAML AuthN isteği göndermeden saml onayını almayı beklediğinde, IdP tarafından başlatılan akış için Azure AD B2C'yi yapılandırmanız gerekir.

IdP tarafından başlatılan akışta kimlik sağlayıcısı (Azure AD B2C) oturum açma işlemini başlatır. Kimlik sağlayıcısı, hizmet sağlayıcısına (bağlı olan taraf uygulamanız) istenmeyen bir SAML yanıtı gönderir.

Şu anda, başlatan kimlik sağlayıcısının Active Directory Federasyon Hizmetleri (AD FS) veya Salesforce gibi Azure AD B2C ile birleştirilmiş bir dış kimlik sağlayıcısı olduğu senaryoları desteklemiyoruz. IdP tarafından başlatılan akış yalnızca Azure AD B2C'de yerel hesap kimlik doğrulaması için desteklenir.

IdP tarafından başlatılan akışı etkinleştirmek için meta veri öğesini true bağlı olan taraf teknik profilinde olarak ayarlayınIdpInitiatedProfileEnabled.

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

IdP tarafından başlatılan akış aracılığıyla oturum açmak veya bir kullanıcıya kaydolmak için aşağıdaki URL'yi kullanın:

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

Aşağıdaki değerleri değiştirin:

  • değerini kiracı adınız ile değiştirin <tenant-name> .
  • değerini SAML bağlı olan taraf ilkenizin adıyla değiştirin <policy-name> .
  • değerini meta veri dosyasındaki https://contoso.onmicrosoft.com/app-namegibi bir değerle identifierUris değiştirin<app-identifier-uri>.
  • [İsteğe bağlı] değerini, yetkilendirme isteğinde bulunan ve belirteç yanıtında da döndürülen bir değerle değiştirin <relay-state> . relay-state parametresi, kimlik doğrulama isteği gerçekleşmeden önce kullanıcının uygulamadaki durumuyla ilgili bilgileri (örneğin, bulunduğu sayfa) kodlamak için kullanılır.

Örnek ilke

SAML test uygulamasıyla test için eksiksiz bir örnek ilke kullanabilirsiniz:

  1. SAML-SP tarafından başlatılan oturum açma örnek ilkesini indirin.
  2. Kiracınızın adıyla eşleşecek şekilde güncelleştirin TenantId . Bu makalede örnek contoso.b2clogin.com kullanılır.
  3. İlke adını B2C_1A_signup_signin_saml tutun.

SAML yanıt ömrünü yapılandırma

SAML yanıtının geçerli kalacağı süreyi yapılandırabilirsiniz. SAML Belirteci Veren teknik profilindeki TokenLifeTimeInSeconds meta veri öğesini kullanarak yaşam süresi ayarlayın. Bu değer, belirteç verme zamanında hesaplanan zaman damgasından NotBefore geçen saniye sayısıdır. Varsayılan yaşam süresi 300 saniyedir (beş dakika).

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

SAML yanıtının zaman dengesizliklerini yapılandırma

SAML yanıt NotBefore zaman damgasına uygulanan zaman dengesizliği yapılandırabilirsiniz. Bu yapılandırma, iki platform arasındaki sürelerin eşitlenmemesi durumunda SAML onaylama işleminin bu zaman dengesizliği içinde geçerli olarak kabul edilmesini sağlar.

SAML Belirteci Veren teknik profilindeki TokenNotBeforeSkewInSeconds meta veri öğesini kullanarak zaman dengesizliği ayarlayın. Eğriltme değeri, varsayılan değeri 0 olan saniyeler içinde verilir. En yüksek değer 3600'dür (bir saat).

Örneğin, saniye TokenNotBeforeSkewInSeconds olarak 120 ayarlandığında:

  • Belirteç 13:05:10 UTC saatinde verilir.
  • Belirteç 13:03:10 UTC'den itibaren geçerlidir.
<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>

Tarih ve saatten milisaniyeleri kaldırma

SAML yanıtı içindeki tarih ve saat değerlerinden milisaniyelerin kaldırılıp kaldırılmayacağını belirtebilirsiniz. (Bu değerler , IssueInstantNotBefore, NotOnOrAfterve AuthnInstant.) Milisaniyeleri kaldırmak için bağlı olan taraf içindeki meta veri anahtarını ayarlayınRemoveMillisecondsFromDateTime. Olası değerler: false (varsayılan) veya 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>

Veren URI'sini geçersiz kılmak için veren kimliği kullanma

Farklı entityID değerlere bağımlı birden çok SAML uygulamanız varsa, bağlı olan taraf dosyanızdaki değeri geçersiz kılabilirsiniz IssuerUri . Veren URI'sini geçersiz kılmak için, temel dosyadaki kimlikle Saml2AssertionIssuer teknik profili kopyalayın ve değeri geçersiz kılın IssuerUri .

Bahşiş

temel bölümünden <ClaimsProviders> bölümünü kopyalayın ve şu öğeleri talep sağlayıcısında koruyun: <DisplayName>Token Issuer</DisplayName>, <TechnicalProfile Id="Saml2AssertionIssuer">ve <DisplayName>Token Issuer</DisplayName>.

Örnek:

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

Oturumu yönetme

Azure AD B2C ile SAML bağlı olan taraf uygulaması arasındaki oturumu, öğesini ve SamlSSOSessionProvider'ı kullanarak UseTechnicalProfileForSessionManagement yönetebilirsiniz.

Kullanıcıları yeniden kimlik doğrulaması yapmaya zorlama

Kullanıcıları yeniden kimlik doğrulamaya zorlamak için, uygulama SAML kimlik doğrulama isteğine özniteliğini ForceAuthn ekleyebilir. ForceAuthn Özniteliği bir Boole değeridir. olarak ayarlandığında true, kullanıcının oturumu Azure AD B2C'de geçersiz kılınacak ve kullanıcı yeniden kimlik doğrulaması yapmaya zorlanır.

Aşağıdaki SAML kimlik doğrulama isteği özniteliğinin ForceAuthntrueolarak nasıl ayarlandığını gösterir.

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

Azure AD B2C IdP SAML meta verilerini imzalama

Uygulama gerektiriyorsa Azure AD B2C'ye SAML kimlik sağlayıcısı için meta veri belgesini imzalamasını sağlayabilirsiniz. İlke anahtarınız yoksa bir tane oluşturun. Ardından SAML Belirteci MetadataSigning Veren teknik profilinde meta veri öğesini yapılandırın. StorageReferenceId ilke anahtarı adına başvurmalıdır.

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

SAML protokolünde hata ayıklama

Hizmet sağlayıcınızla tümleştirmeyi yapılandırmaya ve hatalarını ayıklamaya yardımcı olmak için SAML protokolü için bir tarayıcı uzantısı kullanabilirsiniz. Tarayıcı uzantıları Chrome için SAML DevTools uzantısını, Firefox için SAML izlemesini ve Edge veya Internet Explorer için Geliştirici araçları içerir.

Bu araçları kullanarak uygulamanızla Azure AD B2C arasındaki tümleştirmeyi de kontrol edebilirsiniz. Örnek:

  • SAML isteğinin imza içerip içermediğini denetleyin ve yetkilendirme isteğinde oturum açmak için hangi algoritmanın kullanıldığını belirleyin.
  • Azure AD B2C'nin bir hata iletisi döndürip döndürmediğini denetleyin.
  • Onay bölümünün şifrelenip şifrelenmediğini denetleyin.

Sonraki adımlar

  • OASIS web sitesinde SAML protokolü hakkında daha fazla bilgi bulabilirsiniz.
  • Azure AD B2C GitHub topluluk deposundan SAML test web uygulamasını edinin.