Definiowanie profilu technicznego dostawcy tożsamości SAML w zasadach niestandardowych usługi Azure Active Directory B2C
Uwaga
W usłudze Azure Active Directory B2C zasady niestandardowe są przeznaczone głównie do rozwiązywania złożonych scenariuszy. W przypadku większości scenariuszy zalecamy używanie wbudowanych przepływów użytkownika. Jeśli nie zostało to zrobione, dowiedz się więcej o niestandardowym pakiecie startowym zasad w temacie Wprowadzenie do zasad niestandardowych w usłudze Active Directory B2C.
Usługa Azure Active Directory B2C (Azure AD B2C) zapewnia obsługę dostawcy tożsamości SAML 2.0. W tym artykule opisano specyfikę profilu technicznego na potrzeby interakcji z dostawcą oświadczeń, który obsługuje ten standardowy protokół. Profil techniczny SAML umożliwia federację z dostawcą tożsamości opartym na protokole SAML, takim jak usługi ADFS i Salesforce. Ta federacja umożliwia użytkownikom logowanie się przy użyciu istniejących tożsamości społecznościowych lub przedsiębiorstwa.
Wymiana metadanych
Metadane są informacjami używanymi w protokole SAML w celu uwidocznienia konfiguracji jednostki SAML, takiej jak dostawca usług lub dostawca tożsamości. Metadane definiują lokalizację usług, takich jak logowanie i wylogowywanie, certyfikaty, metoda logowania i inne. Dostawca tożsamości używa metadanych, aby wiedzieć, jak komunikować się z usługą Azure AD B2C. Metadane są konfigurowane w formacie XML i mogą być podpisane przy użyciu podpisu cyfrowego, aby inna strona mogła zweryfikować integralność metadanych. Gdy usługa Azure AD B2C sfederuje się z dostawcą tożsamości SAML, działa jako dostawca usług inicjujący żądanie SAML i czekając na odpowiedź SAML. W niektórych przypadkach akceptuje niechciane uwierzytelnianie SAML, które jest również znane jako inicjowane przez dostawcę tożsamości.
Metadane można skonfigurować w obu partiach jako "Metadane statyczne" lub "Metadane dynamiczne". W trybie statycznym skopiujesz całe metadane z jednej strony i ustawisz je w innej stronie. W trybie dynamicznym należy ustawić adres URL na metadane, podczas gdy inna strona odczytuje konfigurację dynamicznie. Zasady są takie same, ustawiasz metadane profilu technicznego usługi Azure AD B2C u dostawcy tożsamości i ustawiasz metadane dostawcy tożsamości w usłudze Azure AD B2C.
Każdy dostawca tożsamości SAML ma różne kroki uwidaczniania i ustawiania dostawcy usług, w tym przypadku usługi Azure AD B2C i ustawiania metadanych usługi Azure AD B2C u dostawcy tożsamości. Zapoznaj się z dokumentacją dostawcy tożsamości, aby uzyskać wskazówki dotyczące tego, jak to zrobić.
Poniższy przykład przedstawia adres URL metadanych SAML profilu technicznego usługi Azure AD B2C:
https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com/your-policy/samlp/metadata?idptp=your-technical-profile
Zastąp następujące wartości zmiennych:
- nazwa-dzierżawy z nazwą dzierżawy, taką jak fabrikam.b2clogin.com.
- Twoje zasady o nazwie zasad. Użyj zasad, w których konfigurujesz profil techniczny dostawcy SAML lub zasady dziedziczone z tych zasad.
- Twój profil techniczny z nazwą profilu technicznego dostawcy tożsamości SAML.
Wymiana certyfikatów podpisywania cyfrowego
Aby utworzyć zaufanie między usługą Azure AD B2C i dostawcą tożsamości SAML, musisz podać prawidłowy certyfikat X509 z kluczem prywatnym. Certyfikat jest przekazywany z kluczem prywatnym (plik pfx) do magazynu kluczy zasad usługi Azure AD B2C. Usługa Azure AD B2C cyfrowo podpisuje żądanie logowania SAML przy użyciu podanego certyfikatu.
Certyfikat jest używany w następujący sposób:
- Usługa Azure AD B2C generuje i podpisuje żądanie SAML przy użyciu klucza prywatnego usługi Azure AD B2C certyfikatu. Żądanie SAML jest wysyłane do dostawcy tożsamości, który weryfikuje żądanie przy użyciu klucza publicznego usługi Azure AD B2C certyfikatu. Publiczny certyfikat usługi Azure AD B2C jest dostępny za pośrednictwem metadanych profilu technicznego. Alternatywnie możesz ręcznie przekazać plik .cer do dostawcy tożsamości SAML.
- Dostawca tożsamości podpisuje dane wysyłane do usługi Azure AD B2C przy użyciu klucza prywatnego dostawcy tożsamości certyfikatu. Usługa Azure AD B2C weryfikuje dane przy użyciu certyfikatu publicznego dostawcy tożsamości. Każdy dostawca tożsamości ma inne kroki konfiguracji, zapoznaj się z dokumentacją dostawcy tożsamości, aby uzyskać wskazówki dotyczące tego, jak to zrobić. W usłudze Azure AD B2C zasady wymagają dostępu do klucza publicznego certyfikatu przy użyciu metadanych dostawcy tożsamości.
Certyfikat z podpisem własnym jest akceptowalny w większości scenariuszy. W środowiskach produkcyjnych zaleca się użycie certyfikatu X509 wystawionego przez urząd certyfikacji. Ponadto, zgodnie z opisem w dalszej części tego dokumentu, w środowisku nieprodukcyjnym można wyłączyć podpisywanie SAML po obu stronach.
Na poniższym diagramie przedstawiono metadane i wymianę certyfikatów:
Szyfrowanie cyfrowe
Aby zaszyfrować asercję odpowiedzi SAML, dostawca tożsamości zawsze używa klucza publicznego certyfikatu szyfrowania w profilu technicznym usługi Azure AD B2C. Gdy usługa Azure AD B2C musi odszyfrować dane, używa prywatnej części certyfikatu szyfrowania.
Aby zaszyfrować asercję odpowiedzi SAML:
- Przekaż prawidłowy certyfikat X509 z kluczem prywatnym (plik pfx) do magazynu kluczy zasad usługi Azure AD B2C.
- Dodaj element CryptographicKey z identyfikatorem
SamlAssertionDecryption
do kolekcji CryptographicKeys profilu technicznego. Ustaw wartość StorageReferenceId na nazwę klucza zasad utworzonego w kroku 1. - Ustaw metadane profilu technicznego WantsEncryptedAssertions na
true
wartość . - Zaktualizuj dostawcę tożsamości przy użyciu nowych metadanych profilu technicznego usługi Azure AD B2C. Powinna zostać wyświetlona właściwość KeyDescriptor z ustawioną właściwością use zawierającą
encryption
klucz publiczny certyfikatu.
W poniższym przykładzie przedstawiono sekcję Deskryptor kluczy metadanych JĘZYKA SAML używanych do szyfrowania:
<KeyDescriptor use="encryption">
<KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
<X509Data>
<X509Certificate>valid certificate</X509Certificate>
</X509Data>
</KeyInfo>
</KeyDescriptor>
Protokół
Atrybut Name elementu Protocol musi być ustawiony na SAML2
.
Oświadczenia wejściowe
Element InputClaims służy do wysyłania identyfikatora NameId w temacie żądania SAML AuthN. Aby to osiągnąć, dodaj oświadczenie wejściowe z ustawioną wartością PartnerClaimType , jak subject
pokazano poniżej.
<InputClaims>
<InputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="subject" />
</InputClaims>
Oświadczenia wyjściowe
Element OutputClaims zawiera listę oświadczeń zwróconych przez dostawcę tożsamości SAML w AttributeStatement
sekcji . Może być konieczne zamapować nazwę oświadczenia zdefiniowanego w zasadach na nazwę zdefiniowaną w dostawcy tożsamości. Można również uwzględnić oświadczenia, które nie są zwracane przez dostawcę tożsamości, o ile ustawisz DefaultValue
atrybut.
Oświadczenie wyjściowe nazwy podmiotu
Aby odczytać identyfikator NameId asercji SAML w temacie jako znormalizowane oświadczenie, ustaw wartość atrybutu PartnerClaimType oświadczeniaSPNameQualifier
. SPNameQualifier
Jeśli atrybut nie jest przedstawiony, ustaw wartość atrybutu PartnerClaimType oświadczeniaNameQualifier
.
Asercji SAML:
<saml:Subject>
<saml:NameID SPNameQualifier="http://your-idp.com/unique-identifier" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">david@contoso.com</saml:NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData InResponseTo="_cd37c3f2-6875-4308-a9db-ce2cf187f4d1" NotOnOrAfter="2020-02-15T16:23:23.137Z" Recipient="https://your-tenant.b2clogin.com/your-tenant.onmicrosoft.com/B2C_1A_TrustFrameworkBase/samlp/sso/assertionconsumer" />
</SubjectConfirmation>
</saml:SubjectConfirmation>
</saml:Subject>
Oświadczenie wyjściowe:
<OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="http://your-idp.com/unique-identifier" />
Jeśli oba SPNameQualifier
atrybuty lub NameQualifier
nie są prezentowane w asercji SAML, ustaw dla oświadczenia PartnerClaimType wartość assertionSubjectName
. Upewnij się, że identyfikator NameId jest pierwszą wartością w pliku XML asercji. Podczas definiowania więcej niż jednej asercji usługa Azure AD B2C wybiera wartość podmiotu z ostatniej asercji.
W poniższym przykładzie pokazano oświadczenia zwrócone przez dostawcę tożsamości SAML:
- Oświadczenie issuerUserId jest mapowane na oświadczenie assertionSubjectName .
- Oświadczenie first_name jest mapowane na oświadczenie givenName .
- Roszczenie last_name jest mapowane na roszczenie o nazwisko .
- Oświadczenie displayName jest mapowane na oświadczenie nazwy .
- Oświadczenie e-mail bez mapowania nazwy.
Profil techniczny zwraca również oświadczenia, które nie są zwracane przez dostawcę tożsamości:
- Oświadczenie identityProvider , które zawiera nazwę dostawcy tożsamości.
- Oświadczenie authenticationSource z wartością domyślną socialIdpAuthentication.
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="assertionSubjectName" />
<OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="first_name" />
<OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="last_name" />
<OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
<OutputClaim ClaimTypeReferenceId="email" />
<OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="contoso.com" />
<OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
</OutputClaims>
Element OutputClaimsTransformations może zawierać kolekcję elementów OutputClaimsTransformation , które są używane do modyfikowania oświadczeń wyjściowych lub generowania nowych.
Metadane
Atrybut | Wymagania | opis |
---|---|---|
PartnerEntity | Tak | Adres URL metadanych dostawcy tożsamości SAML. Możesz też skopiować metadane dostawcy tożsamości i osadzić je w elemecie <![CDATA[Your IDP metadata]]> CDATA . Osadzanie metadanych dostawcy tożsamości nie jest zalecane. Dostawca tożsamości może zmienić ustawienia lub zaktualizować certyfikat. Jeśli metadane dostawcy tożsamości zostały zmienione, pobierz nowe metadane i zaktualizuj zasady przy użyciu nowego. |
WantsSignedRequests | Nie. | Wskazuje, czy profil techniczny wymaga podpisania wszystkich wychodzących żądań uwierzytelniania. Możliwe wartości: true lub false . Domyślna wartość to true . Gdy wartość jest ustawiona na true wartość , należy określić klucz kryptograficzny SamlMessageSigning , a wszystkie wychodzące żądania uwierzytelniania są podpisane. Jeśli wartość jest ustawiona na false wartość , parametry SigAlg i Signature (ciąg zapytania lub parametr post) zostaną pominięte z żądania. Te metadane steruje również atrybutem AuthnRequestsSigned , który jest danymi wyjściowymi metadanych profilu technicznego usługi Azure AD B2C udostępnionego dostawcy tożsamości. Usługa Azure AD B2C nie podpisuje żądania, jeśli wartość Polecenia WantsSignedRequests w metadanych profilu technicznego jest ustawiona na wartość , a metadane dostawcy tożsamości WantAuthnRequestsSigned są ustawione false na false wartość lub nie są określone. |
XmlSignatureAlgorithm | Nie. | Metoda używana przez usługę Azure AD B2C do podpisania żądania SAML. Te metadane steruje wartością parametru SigAlg (ciągu zapytania lub parametru post) w żądaniu SAML. Możliwe wartości: Sha256 , , Sha512 Sha384 lub Sha1 (ustawienie domyślne). Upewnij się, że algorytm podpisu został skonfigurowany po obu stronach o tej samej wartości. Użyj tylko algorytmu obsługiwanego przez certyfikat. |
WantsSignedAssertions | Nie. | Wskazuje, czy profil techniczny wymaga podpisania wszystkich asercji przychodzących. Możliwe wartości: true lub false . Domyślna wartość to true . Jeśli wartość jest ustawiona na true wartość , należy podpisać wszystkie sekcje saml:Assertion asercji wysyłane przez dostawcę tożsamości do usługi Azure AD B2C. Jeśli wartość jest ustawiona na false , dostawca tożsamości nie powinien podpisać asercji, ale nawet jeśli tak, usługa Azure AD B2C nie zweryfikuje podpisu. Te metadane steruje również flagą metadanych WantsAssertionsSigned, która jest wynikiem w metadanych profilu technicznego usługi Azure AD B2C udostępnionego dostawcy tożsamości. Jeśli wyłączysz walidację asercji, możesz również wyłączyć walidację podpisu odpowiedzi (aby uzyskać więcej informacji, zobacz ResponsesSigned). |
OdpowiedziPodpisane | Nie. | Możliwe wartości: true lub false . Domyślna wartość to true . Jeśli wartość jest ustawiona na false , dostawca tożsamości nie powinien podpisać odpowiedzi SAML, ale nawet jeśli tak, usługa Azure AD B2C nie zweryfikuje podpisu. Jeśli wartość jest ustawiona na true , odpowiedź SAML wysłana przez dostawcę tożsamości do usługi Azure AD B2C jest podpisana i musi zostać zweryfikowana. Jeśli wyłączysz walidację odpowiedzi SAML, możesz również wyłączyć walidację podpisu asercji (aby uzyskać więcej informacji, zobacz WantsSignedAssertions). |
WantsEncryptedAssertions | Nie. | Wskazuje, czy profil techniczny wymaga szyfrowania wszystkich asercji przychodzących. Możliwe wartości: true lub false . Domyślna wartość to false . Jeśli wartość jest ustawiona na true , asercje wysyłane przez dostawcę tożsamości do usługi Azure AD B2C muszą być podpisane, a klucz kryptograficzny SamlAssertionDecryption musi zostać określony. Jeśli wartość jest ustawiona na true , metadane profilu technicznego usługi Azure AD B2C zawierają sekcję szyfrowania . Dostawca tożsamości odczytuje metadane i szyfruje asercję odpowiedzi SAML przy użyciu klucza publicznego podanego w metadanych profilu technicznego usługi Azure AD B2C. Jeśli włączysz szyfrowanie asercji, może być również konieczne wyłączenie weryfikacji podpisu odpowiedzi (aby uzyskać więcej informacji, zobacz ResponsesSigned). |
NameIdPolicyFormat | Nie. | Określa ograniczenia dotyczące identyfikatora nazwy, który ma być używany do reprezentowania żądanego podmiotu. W przypadku pominięcia można użyć dowolnego typu identyfikatora obsługiwanego przez dostawcę tożsamości dla żądanego tematu. Na przykład urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified . NameIdPolicyFormat może być używany z NameIdPolicyAllowCreate. Zapoznaj się z dokumentacją dostawcy tożsamości, aby uzyskać wskazówki dotyczące obsługiwanych zasad identyfikatorów nazw. |
NameIdPolicyAllowCreate | Nie. | W przypadku korzystania z elementu NameIdPolicyFormat można również określić AllowCreate właściwość NameIDPolicy. Wartość tych metadanych to true lub false wskazuje, czy dostawca tożsamości może utworzyć nowe konto podczas przepływu logowania. Zapoznaj się z dokumentacją dostawcy tożsamości, aby uzyskać wskazówki dotyczące tego, jak to zrobić. |
AuthenticationRequestExtensions | Nie. | Opcjonalne elementy rozszerzenia komunikatów protokołu uzgodnione między usługą Azure AD B2C i dostawcą tożsamości. Rozszerzenie jest prezentowane w formacie XML. Dane XML są dodawane wewnątrz elementu <![CDATA[Your IDP metadata]]> CDATA . Sprawdź dokumentację dostawcy tożsamości, aby sprawdzić, czy element rozszerzeń jest obsługiwany. |
IncludeAuthnContextClassReferences | Nie. | Określa co najmniej jedną dokumentację identyfikatora URI identyfikującą klasy kontekstu uwierzytelniania. Aby na przykład zezwolić użytkownikowi na logowanie się tylko przy użyciu nazwy użytkownika i hasła, ustaw wartość na urn:oasis:names:tc:SAML:2.0:ac:classes:Password . Aby zezwolić na logowanie za pośrednictwem nazwy użytkownika i hasła za pośrednictwem chronionej sesji (SSL/TLS), określ wartość PasswordProtectedTransport . Zapoznaj się z dokumentacją dostawcy tożsamości, aby uzyskać wskazówki dotyczące obsługiwanych identyfikatorów URI AuthnContextClassRef . Określ wiele identyfikatorów URI jako listę rozdzielaną przecinkami. |
IncludeKeyInfo | Nie. | Wskazuje, czy żądanie uwierzytelniania SAML zawiera klucz publiczny certyfikatu, gdy powiązanie ma wartość HTTP-POST . Możliwe wartości: true lub false . |
IncludeClaimResolvingInClaimsHandling | Nie. | W przypadku oświadczeń wejściowych i wyjściowych określa, czy rozwiązanie oświadczeń jest zawarte w profilu technicznym. Możliwe wartości: true lub false (wartość domyślna). Jeśli chcesz użyć funkcji rozpoznawania oświadczeń w profilu technicznym, ustaw tę opcję na true wartość . |
SingleLogoutEnabled | Nie. | Wskazuje, czy podczas logowania profil techniczny próbuje wylogować się z federacyjnych dostawców tożsamości. Aby uzyskać więcej informacji, zobacz wylogowywanie sesji usługi Azure AD B2C. Możliwe wartości: true (wartość domyślna) lub false . |
ForceAuthN | Nie. | Przekazuje wartość ForceAuthN w żądaniu uwierzytelniania SAML w celu określenia, czy zewnętrzny dostawca tożsamości SAML zostanie zmuszony do monitowania użytkownika o uwierzytelnienie. Domyślnie usługa Azure AD B2C ustawia wartość ForceAuthN na wartość false podczas początkowego logowania. Jeśli sesja zostanie zresetowana (na przykład przy użyciu prompt=login w OIDC), wartość ForceAuthN zostanie ustawiona na true wartość . Ustawienie elementu metadanych, jak pokazano poniżej, spowoduje wymusić wartość wszystkich żądań do zewnętrznego dostawcy tożsamości. Możliwe wartości: true lub false . |
ProviderName | Nie. | Przekazuje wartość ProviderName w żądaniu uwierzytelniania SAML. |
Klucze kryptograficzne
Element CryptographicKeys zawiera następujące atrybuty:
Atrybut | Wymagania | opis |
---|---|---|
SamlMessageSigning | Tak | Certyfikat X509 (zestaw kluczy RSA) używany do podpisywania komunikatów SAML. Usługa Azure AD B2C używa tego klucza do podpisywania żądań i wysyłania ich do dostawcy tożsamości. |
SamlAssertionDecryption | Nie* | Certyfikat X509 (zestaw kluczy RSA). Dostawca tożsamości SAML używa publicznej części certyfikatu do szyfrowania potwierdzenia odpowiedzi SAML. Usługa Azure AD B2C używa prywatnej części certyfikatu do odszyfrowania asercji. * Wymagane, jeśli zewnętrzny dostawca tożsamości szyfruje asercji SAML. |
MetadataSigning | Nie. | Certyfikat X509 (zestaw kluczy RSA) używany do podpisywania metadanych SAML. Usługa Azure AD B2C używa tego klucza do podpisywania metadanych. |
Następne kroki
Zobacz następujące artykuły, aby zapoznać się z przykładami pracy z dostawcami tożsamości SAML w usłudze Azure AD B2C: