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
, Sha512
veya 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 WantAssertionsSigned
true
emin 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 KeyDescriptor
use
meta veri uç noktasında değeri olarak ayarlanmış Encryption
olmalı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
, Sha512
veya 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 Aes128
ve ş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 EncryptedData
alt 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-name
gibi bir değerleidentifierUris
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:
- SAML-SP tarafından başlatılan oturum açma örnek ilkesini indirin.
- Kiracınızın adıyla eşleşecek şekilde güncelleştirin
TenantId
. Bu makalede örnek contoso.b2clogin.com kullanılır. - İ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 , IssueInstant
NotBefore
, NotOnOrAfter
ve 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 ForceAuthn
true
olarak 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.