Definiera en teknisk profil för SAML-identitetsprovider i en anpassad Azure Active Directory B2C-princip
Kommentar
I Azure Active Directory B2C är anpassade principer främst utformade för att hantera komplexa scenarier. I de flesta scenarier rekommenderar vi att du använder inbyggda användarflöden. Om du inte har gjort det kan du läsa mer om startpaketet för anpassad princip i Kom igång med anpassade principer i Active Directory B2C.
Azure Active Directory B2C (Azure AD B2C) tillhandahåller stöd för SAML 2.0-identitetsprovidern. Den här artikeln beskriver detaljerna i en teknisk profil för att interagera med en anspråksprovider som stöder det här standardiserade protokollet. Med en SAML-teknisk profil kan du federera med en SAML-baserad identitetsprovider, till exempel ADFS och Salesforce. Med den här federationen kan användarna logga in med sina befintliga sociala identiteter eller företagsidentiteter.
Metadatautbyte
Metadata är information som används i SAML-protokollet för att exponera konfigurationen av en SAML-part, till exempel en tjänstleverantör eller identitetsprovider. Metadata definierar platsen för tjänsterna, till exempel inloggning och utloggning, certifikat, inloggningsmetod med mera. Identitetsprovidern använder metadata för att veta hur man kommunicerar med Azure AD B2C. Metadata konfigureras i XML-format och kan signeras med en digital signatur så att den andra parten kan verifiera metadataintegriteten. När Azure AD B2C federeras med en SAML-identitetsprovider fungerar den som en tjänstleverantör som initierar en SAML-begäran och väntar på ett SAML-svar. Och i vissa fall accepterar oönskad SAML-autentisering, som även kallas identitetsprovider initierad.
Metadata kan konfigureras i båda parter som "Statiska metadata" eller "dynamiska metadata". I statiskt läge kopierar du hela metadata från en part och ställer in dem i den andra parten. I dynamiskt läge anger du URL:en till metadata medan den andra parten läser konfigurationen dynamiskt. Principerna är desamma, du anger metadata för den tekniska Azure AD B2C-profilen i din identitetsprovider och anger metadata för identitetsprovidern i Azure AD B2C.
Varje SAML-identitetsprovider har olika steg för att exponera och ange tjänstleverantören, i det här fallet Azure AD B2C, och ange Azure AD B2C-metadata i identitetsprovidern. Titta på din identitetsproviders dokumentation för vägledning om hur du gör det.
I följande exempel visas en URL-adress till SAML-metadata för en teknisk Azure AD B2C-profil:
https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com/your-policy/samlp/metadata?idptp=your-technical-profile
Ersätt följande variabelvärden:
- ditt klientnamn med ditt klientnamn, till exempel fabrikam.b2clogin.com.
- din-princip med ditt principnamn. Använd principen där du konfigurerar saml-providerns tekniska profil eller en princip som ärver från den principen.
- din tekniska profil med ditt tekniska profilnamn för SAML-identitetsprovidern.
Utbyte av digitala signeringscertifikat
Om du vill skapa ett förtroende mellan Azure AD B2C och din SAML-identitetsprovider måste du ange ett giltigt X509-certifikat med den privata nyckeln. Du laddar upp certifikatet med den privata nyckeln (.pfx-filen) till Azure AD B2C-principnyckelarkivet. Azure AD B2C signerar saml-inloggningsbegäran digitalt med det certifikat som du anger.
Certifikatet används på följande sätt:
- Azure AD B2C genererar och signerar en SAML-begäran med hjälp av certifikatets privata Azure AD B2C-nyckel. SAML-begäran skickas till identitetsprovidern, som verifierar begäran med hjälp av den offentliga Azure AD B2C-nyckeln för certifikatet. Det offentliga Azure AD B2C-certifikatet är tillgängligt via tekniska profilmetadata. Du kan också ladda upp .cer-filen manuellt till din SAML-identitetsprovider.
- Identitetsprovidern signerar data som skickas till Azure AD B2C med hjälp av identitetsproviderns privata nyckel för certifikatet. Azure AD B2C verifierar data med hjälp av identitetsproviderns offentliga certifikat. Varje identitetsprovider har olika steg för konfiguration, titta på din identitetsproviders dokumentation för vägledning om hur du gör det. I Azure AD B2C behöver din princip åtkomst till den offentliga certifikatnyckeln med hjälp av identitetsproviderns metadata.
Ett självsignerat certifikat är acceptabelt för de flesta scenarier. För produktionsmiljöer rekommenderar vi att du använder ett X509-certifikat som utfärdas av en certifikatutfärdare. Som beskrivs senare i det här dokumentet kan du även inaktivera SAML-signeringen på båda sidor för en icke-produktionsmiljö.
Följande diagram visar metadata och certifikatutbyte:
Digital kryptering
För att kryptera SAML-svars försäkran använder identitetsprovidern alltid en offentlig nyckel för ett krypteringscertifikat i en teknisk Azure AD B2C-profil. När Azure AD B2C behöver dekryptera data använder den den privata delen av krypteringscertifikatet.
Så här krypterar du SAML-svars försäkran:
- Ladda upp ett giltigt X509-certifikat med den privata nyckeln (.pfx-filen) till Azure AD B2C-principnyckelarkivet.
- Lägg till ett CryptographicKey-element med en identifierare
SamlAssertionDecryption
för i den tekniska profilen CryptographicKeys-samlingen . Ange StorageReferenceId till namnet på den principnyckel som du skapade i steg 1. - Ange metadata för teknisk profil WantsEncryptedAssertions till
true
. - Uppdatera identitetsprovidern med de nya tekniska metadata för Azure AD B2C-profilen. Du bör se KeyDescriptor med användningsegenskapen inställd på att
encryption
innehålla certifikatets offentliga nyckel.
I följande exempel visas avsnittet Nyckelbeskrivning i SAML-metadata som används för kryptering:
<KeyDescriptor use="encryption">
<KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
<X509Data>
<X509Certificate>valid certificate</X509Certificate>
</X509Data>
</KeyInfo>
</KeyDescriptor>
Protokoll
Attributet Namn för protokollelementet måste anges till SAML2
.
Indataanspråk
InputClaims-elementet används för att skicka ett NameId inom ämnet för SAML AuthN-begäran. För att uppnå detta lägger du till ett indataanspråk med en PartnerClaimType inställd på subject
enligt nedan.
<InputClaims>
<InputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="subject" />
</InputClaims>
Utdataanspråk
Elementet OutputClaims innehåller en lista över anspråk som returneras av SAML-identitetsprovidern under avsnittet AttributeStatement
. Du kan behöva mappa namnet på anspråket som definierats i principen till det namn som definierats i identitetsprovidern. Du kan också inkludera anspråk som inte returneras av identitetsprovidern så länge du anger DefaultValue
attributet.
Utdataanspråk för ämnesnamn
Om du vill läsa SAML-försäkran NameId i ämne som ett normaliserat anspråk anger du anspråket PartnerClaimType till värdet för SPNameQualifier
attributet. SPNameQualifier
Om attributet inte visas anger du anspråket PartnerClaimType till värdet för attributetNameQualifier
.
SAML-försäkran:
<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>
Utdataanspråk:
<OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="http://your-idp.com/unique-identifier" />
Om båda SPNameQualifier
attributen eller NameQualifier
inte visas i SAML-försäkran anger du anspråket PartnerClaimType till assertionSubjectName
. Kontrollera att NameId är det första värdet i xml-försäkran. När du definierar mer än en försäkran väljer Azure AD B2C ämnesvärdet från den senaste försäkran.
I följande exempel visas de anspråk som returneras av en SAML-identitetsprovider:
- IssuerUserId-anspråket mappas till anspråket assertionSubjectName.
- Det first_name anspråket mappas till givenName-anspråket.
- Det last_name anspråket mappas till efternamnsanspråket.
- DisplayName-anspråket mappas till namnanspråket.
- E-postanspråket utan namnmappning.
Den tekniska profilen returnerar också anspråk som inte returneras av identitetsprovidern:
- IdentityProvider-anspråket som innehåller namnet på identitetsprovidern.
- AuthenticationSource-anspråket med standardvärdet 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>
Elementet OutputClaimsTransformations kan innehålla en samling OutputClaimsTransformation-element som används för att ändra utdataanspråken eller generera nya.
Metadata
Attribut | Obligatoriskt | Beskrivning |
---|---|---|
PartnerEntity | Ja | URL för metadata för SAML-identitetsprovidern. Eller kopiera metadata för identitetsprovidern och bädda in dem i CDATA-elementet <![CDATA[Your IDP metadata]]> . Bädda in metadata för identitetsprovidern rekommenderas inte. Identitetsprovidern kan ändra inställningarna eller uppdatera certifikatet. Om metadata för identitetsprovidern har ändrats hämtar du de nya metadata och uppdaterar principen med den nya. |
WantsSignedRequests | Nej | Anger om den tekniska profilen kräver att alla utgående autentiseringsbegäranden signeras. Möjliga värden: true eller false . Standardvärdet är true . När värdet är inställt på true måste krypteringsnyckeln SamlMessageSigning anges och alla utgående autentiseringsbegäranden signeras. Om värdet är inställt på false utelämnas parametrarna SigAlg och Signature (frågesträng eller postparameter) från begäran. Dessa metadata styr även metadataattributet AuthnRequestsSigned , som är utdata i metadata för den tekniska Azure AD B2C-profilen som delas med identitetsprovidern. Azure AD B2C signerar inte begäran om värdet för WantSignedRequests i metadata för den tekniska profilen är inställt på false och identitetsproviderns metadata WantAuthnRequestsSigned har angetts till false eller inte angetts. |
XmlSignatureAlgorithm | Nej | Den metod som Azure AD B2C använder för att signera SAML-begäran. Dessa metadata styr värdet för Parametern SigAlg (frågesträng eller postparameter) i SAML-begäran. Möjliga värden: Sha256 , Sha384 , Sha512 eller Sha1 (standard). Se till att du konfigurerar signaturalgoritmen på båda sidor med samma värde. Använd endast den algoritm som certifikatet stöder. |
WantsSignedAssertions | Nej | Anger om den tekniska profilen kräver att alla inkommande intyg signeras. Möjliga värden: true eller false . Standardvärdet är true . Om värdet är inställt på true måste alla kontrollavsnitt saml:Assertion som skickas av identitetsprovidern till Azure AD B2C signeras. Om värdet är inställt på false ska identitetsprovidern inte signera försäkran, men även om det gör det validerar Inte Azure AD B2C signaturen. Dessa metadata styr även metadataflaggan WantsAssertionsSigned, som är utdata i metadata för den tekniska Azure AD B2C-profilen som delas med identitetsprovidern. Om du inaktiverar verifieringen av försäkran kanske du också vill inaktivera verifieringen av svarssignaturen (mer information finns i ResponsesSigned). |
ResponsesSigned | Nej | Möjliga värden: true eller false . Standardvärdet är true . Om värdet är inställt på false ska identitetsprovidern inte signera SAML-svaret, men även om det gör det validerar Inte Azure AD B2C signaturen. Om värdet är inställt på true signeras saml-svaret som skickas av identitetsprovidern till Azure AD B2C och måste verifieras. Om du inaktiverar SAML-svarsverifieringen kanske du också vill inaktivera verifieringen av kontrollsignaturen (mer information finns i WantsSignedAssertions). |
WantsEncryptedAssertions | Nej | Anger om den tekniska profilen kräver att alla inkommande kontroller krypteras. Möjliga värden: true eller false . Standardvärdet är false . Om värdet är inställt på true måste försäkran som skickas av identitetsprovidern till Azure AD B2C signeras och krypteringsnyckeln SamlAssertionDecryption måste anges. Om värdet är inställt på true innehåller metadata för den tekniska Azure AD B2C-profilen krypteringsavsnittet. Identitetsprovidern läser metadata och krypterar SAML-svars försäkran med den offentliga nyckeln som anges i metadata för den tekniska Azure AD B2C-profilen. Om du aktiverar kryptering av försäkran kan du också behöva inaktivera verifieringen av svarssignaturen (mer information finns i ResponsesSigned). |
NameIdPolicyFormat | Nej | Anger begränsningar för den namnidentifierare som ska användas för att representera det begärda ämnet. Om det utelämnas kan alla typer av identifierare som stöds av identitetsprovidern för det begärda ämnet användas. Exempel: urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified NameIdPolicyFormat kan användas med NameIdPolicyAllowCreate. Titta på din identitetsproviders dokumentation för vägledning om vilka namn-ID-principer som stöds. |
NameIdPolicyAllowSkapa | Nej | När du använder NameIdPolicyFormat kan du också ange AllowCreate egenskapen NameIDPolicy. Värdet för dessa metadata är true eller false för att ange om identitetsprovidern får skapa ett nytt konto under inloggningsflödet. Titta på din identitetsproviders dokumentation för vägledning om hur du gör det. |
AuthenticationRequestExtensions | Nej | Valfria protokollmeddelandetilläggselement som överenskommits mellan Azure AD B2C och identitetsprovidern. Tillägget visas i XML-format. Du lägger till XML-data i CDATA-elementet <![CDATA[Your IDP metadata]]> . Kontrollera identitetsproviderns dokumentation för att se om tilläggselementet stöds. |
IncludeAuthnContextClassReferences | Nej | Anger en eller flera URI-referenser som identifierar kontextklasser för autentisering. Om du till exempel vill tillåta att en användare loggar in med användarnamn och lösenord anger du värdet till urn:oasis:names:tc:SAML:2.0:ac:classes:Password . Om du vill tillåta inloggning via användarnamn och lösenord över en skyddad session (SSL/TLS) anger du PasswordProtectedTransport . Titta på din identitetsproviders dokumentation för vägledning om de AuthnContextClassRef-URI :er som stöds. Ange flera URI:er som en kommaavgränsad lista. |
IncludeKeyInfo | Nej | Anger om SAML-autentiseringsbegäran innehåller certifikatets offentliga nyckel när bindningen är inställd på HTTP-POST . Möjliga värden: true eller false . |
IncludeClaimResolvingInClaimsHandling | Nej | För indata- och utdataanspråk anger om anspråksmatchning ingår i den tekniska profilen. Möjliga värden: true , eller false (standard). Om du vill använda en anspråkslösare i den tekniska profilen anger du detta till true . |
SingleLogoutEnabled | Nej | Anger om den tekniska profilen under inloggningen försöker logga ut från federerade identitetsprovidrar. Mer information finns i Azure AD B2C-sessionsinloggning. Möjliga värden: true (standard) eller false . |
ForceAuthN | Nej | Skickar ForceAuthN-värdet i SAML-autentiseringsbegäran för att avgöra om den externa SAML-IDP:t kommer att tvingas att uppmana användaren om autentisering. Som standard anger Azure AD B2C värdet ForceAuthN till false vid den första inloggningen. Om sessionen sedan återställs (till exempel med hjälp prompt=login av i OIDC) ställs ForceAuthN-värdet in på true . Om du anger metadataobjektet enligt nedan framtvingas värdet för alla begäranden till den externa IDP:t. Möjliga värden: true eller false . |
ProviderName | Nej | Skickar värdet ProviderName i SAML-autentiseringsbegäran. |
Krypteringsnycklar
CryptographicKeys-elementet innehåller följande attribut:
Attribut | Obligatoriskt | Beskrivning |
---|---|---|
SamlMessageSigning | Ja | X509-certifikatet (RSA-nyckeluppsättning) som ska användas för att signera SAML-meddelanden. Azure AD B2C använder den här nyckeln för att signera begäranden och skicka dem till identitetsprovidern. |
SamlAssertionDecryption | Nej* | X509-certifikatet (RSA-nyckeluppsättningen). En SAML-identitetsprovider använder den offentliga delen av certifikatet för att kryptera försäkran om SAML-svaret. Azure AD B2C använder den privata delen av certifikatet för att dekryptera försäkran. * Krävs om den externa IDP:n krypterar SAML-försäkran. |
MetadataSignering | Nej | X509-certifikatet (RSA-nyckeluppsättningen) som ska användas för att signera SAML-metadata. Azure AD B2C använder den här nyckeln för att signera metadata. |
Nästa steg
I följande artiklar finns exempel på hur du arbetar med SAML-identitetsprovidrar i Azure AD B2C: