SAML-protokoll för enkel inloggning

Den här artikeln beskriver SAML 2.0-autentiseringsbegäranden och svar som Microsoft Entra ID stöder för enkel inloggning (SSO).

Protokolldiagrammet nedan beskriver sekvensen för enkel inloggning. Molntjänsten (tjänstleverantören) använder en HTTP-omdirigeringsbindning för att skicka ett AuthnRequest (autentiseringsbegäran)-element till Microsoft Entra-ID (identitetsprovidern). Microsoft Entra-ID använder sedan en HTTP-postbindning för att publicera ett Response element till molntjänsten.

Skärmbild av arbetsflödet för enkel inloggning (SSO).

Kommentar

I den här artikeln beskrivs hur du använder SAML för enkel inloggning. Mer information om andra sätt att hantera enkel inloggning (till exempel genom att använda OpenID-Anslut eller integrerad Windows-autentisering) finns i Enkel inloggning till program i Microsoft Entra-ID.

AuthnRequest

Molntjänster skickar ett AuthnRequest element till Microsoft Entra-ID för att begära användarautentisering. Ett SAML 2.0-exempel AuthnRequest kan se ut som i följande exempel:

<samlp:AuthnRequest
  xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
  ID="id6c1c178c166d486687be4aaf5e482730"
  Version="2.0" IssueInstant="2013-03-18T03:28:54.1839884Z"
  xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
  <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>
</samlp:AuthnRequest>
Parameter Typ Beskrivning
ID Obligatoriskt Microsoft Entra ID använder det här attributet för att fylla i InResponseTo attributet för det returnerade svaret. ID får inte börja med ett tal, så en vanlig strategi är att förbereda en sträng som "ID" till strängrepresentationen av ett GUID. Till exempel id6c1c178c166d486687be4aaf5e482730 är ett giltigt ID.
Version Obligatoriskt Den här parametern ska vara inställd på 2.0.
IssueInstant Obligatoriskt Det här är en DateTime-sträng med ett UTC-värde och returformat ("o"). Microsoft Entra-ID förväntar sig ett DateTime-värde av den här typen, men utvärderar eller använder inte värdet.
AssertionConsumerServiceURL Valfritt Om den här parametern tillhandahålls måste den RedirectUri matcha molntjänsten i Microsoft Entra-ID.
ForceAuthn Valfritt Det här är ett booleskt värde. Om det är sant innebär det att användaren tvingas autentisera igen, även om de har en giltig session med Microsoft Entra-ID.
IsPassive Valfritt Det här är ett booleskt värde som anger om Microsoft Entra-ID ska autentisera användaren tyst, utan användarinteraktion, med sessionscookien om det finns någon. Om detta är sant försöker Microsoft Entra-ID:t autentisera användaren med sessionscookien.

Alla andra AuthnRequest attribut, till exempel Consent, Destination, AssertionConsumerServiceIndex, AttributeConsumerServiceIndexoch ProviderNameignoreras.

Microsoft Entra-ID ignorerar också elementet Conditions i AuthnRequest.

Utfärdare

Elementet Issuer i ett AuthnRequest måste exakt matcha ett av ServicePrincipalNames i molntjänsten i Microsoft Entra-ID. Detta är vanligtvis inställt på den app-ID-URI som anges under programregistreringen.

Ett SAML-utdrag som innehåller elementet Issuer ser ut som följande exempel:

<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>

NameIDPolicy

Det här elementet begär ett visst namn-ID-format i svaret och är valfritt i AuthnRequest element som skickas till Microsoft Entra-ID.

Ett NameIdPolicy element ser ut som följande exempel:

<NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"/>

Om NameIDPolicy anges kan du inkludera dess valfria Format attribut. Attributet Format kan bara ha något av följande värden. Alla andra värden resulterar i ett fel.

  • urn:oasis:names:tc:SAML:2.0:nameid-format:persistent: Microsoft Entra ID utfärdar anspråket NameID som en parvis identifierare.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress: Microsoft Entra ID utfärdar anspråket NameID i e-postadressformat.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified: Det här värdet tillåter Att Microsoft Entra-ID väljer anspråksformatet. Microsoft Entra-ID utfärdar anspråket NameID som en parvis identifierare.
  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient: Microsoft Entra ID utfärdar anspråket NameID som ett slumpmässigt genererat värde som är unikt för den aktuella SSO-åtgärden. Det innebär att värdet är tillfälligt och inte kan användas för att identifiera den autentiserande användaren.

Om SPNameQualifier anges innehåller Microsoft Entra-ID samma SPNameQualifier i svaret.

Microsoft Entra-ID ignorerar attributet AllowCreate .

RequestedAuthnContext

Elementet RequestedAuthnContext anger önskade autentiseringsmetoder. Det är valfritt i AuthnRequest element som skickas till Microsoft Entra-ID. Microsoft Entra-ID stöder AuthnContextClassRef värden som urn:oasis:names:tc:SAML:2.0:ac:classes:Password.

Omfång

Elementet Scoping , som innehåller en lista över identitetsprovidrar, är valfritt i AuthnRequest element som skickas till Microsoft Entra-ID.

Ta inte med ProxyCount attributet eller RequesterID elementet om IDPListOption det tillhandahålls eftersom de inte stöds.

Signatur

Ett Signature element i AuthnRequest element är valfritt. Microsoft Entra ID kan konfigureras för att genomdriva kravet på signerade autentiseringsbegäranden. Om det är aktiverat godkänns endast signerade autentiseringsbegäranden, annars tillhandahålls begärandeverifieringen genom att endast svara på registrerade URL:er för konsumenttjänsten för försäkran.

Ämne

Ta inte med ett Subject element. Microsoft Entra-ID stöder inte att ange ett ämne i AuthnRequest och returnerar ett fel om ett anges.

Ett ämne kan i stället tillhandahållas genom att lägga till en login_hint parameter i HTTP-begäran till url:en för enkel inloggning, med ämnets NameID som parametervärde.

Response

När en begärd inloggning har slutförts skickar Microsoft Entra-ID ett svar till molntjänsten. Ett svar på ett lyckat inloggningsförsök ser ut som följande exempel:

<samlp:Response ID="_a4958bfd-e107-4e67-b06d-0d85ade2e76a" Version="2.0" IssueInstant="2013-03-18T07:38:15.144Z" Destination="https://contoso.com/identity/inboundsso.aspx" InResponseTo="id758d0ef385634593a77bdf7e632984b6" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
  <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://login.microsoftonline.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
  <ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
    ...
  </ds:Signature>
  <samlp:Status>
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
  </samlp:Status>
  <Assertion ID="_bf9c623d-cc20-407a-9a59-c2d0aee84d12" IssueInstant="2013-03-18T07:38:15.144Z" Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
    <Issuer>https://login.microsoftonline.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
    <ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
      ...
    </ds:Signature>
    <Subject>
      <NameID>Uz2Pqz1X7pxe4XLWxV9KJQ+n59d573SepSAkuYKSde8=</NameID>
      <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
        <SubjectConfirmationData InResponseTo="id758d0ef385634593a77bdf7e632984b6" NotOnOrAfter="2013-03-18T07:43:15.144Z" Recipient="https://contoso.com/identity/inboundsso.aspx" />
      </SubjectConfirmation>
    </Subject>
    <Conditions NotBefore="2013-03-18T07:38:15.128Z" NotOnOrAfter="2013-03-18T08:48:15.128Z">
      <AudienceRestriction>
        <Audience>https://www.contoso.com</Audience>
      </AudienceRestriction>
    </Conditions>
    <AttributeStatement>
      <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
        <AttributeValue>testuser@contoso.com</AttributeValue>
      </Attribute>
      <Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier">
        <AttributeValue>3F2504E0-4F89-11D3-9A0C-0305E82C3301</AttributeValue>
      </Attribute>
      ...
    </AttributeStatement>
    <AuthnStatement AuthnInstant="2013-03-18T07:33:56.000Z" SessionIndex="_bf9c623d-cc20-407a-9a59-c2d0aee84d12">
      <AuthnContext>
        <AuthnContextClassRef> urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
      </AuthnContext>
    </AuthnStatement>
  </Assertion>
</samlp:Response>

Response

Elementet Response innehåller resultatet av auktoriseringsbegäran. Microsoft Entra ID anger IDvärdena , Version och IssueInstant i elementet Response . Den anger även följande attribut:

  • Destination: När inloggningen har slutförts är detta inställt RedirectUri på tjänstleverantörens (molntjänsten).
  • InResponseTo: Detta är inställt på ID attributet för det AuthnRequest element som initierade svaret.

Utfärdare

Microsoft Entra-ID anger elementet Issuer till https://sts.windows.net/<TenantIDGUID>/ var <TenantIDGUID> är klientorganisations-ID:t för Microsoft Entra-klientorganisationen.

Ett svar med Issuer-element kan till exempel se ut som följande exempel:

<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://sts.windows.net/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>

Status

Elementet Status förmedlar lyckade eller misslyckade inloggningar. Den innehåller elementet StatusCode , som innehåller en kod eller en uppsättning kapslade koder som representerar status för begäran. Det innehåller även elementet StatusMessage , som innehåller anpassade felmeddelanden som genereras under inloggningsprocessen.

Följande exempel är ett SAML-svar på ett misslyckat inloggningsförsök.

<samlp:Response ID="_f0961a83-d071-4be5-a18c-9ae7b22987a4" Version="2.0" IssueInstant="2013-03-18T08:49:24.405Z" InResponseTo="iddce91f96e56747b5ace6d2e2aa9d4f8c" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
  <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
  <samlp:Status>
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Requester">
      <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:RequestUnsupported" />
    </samlp:StatusCode>
    <samlp:StatusMessage>AADSTS75006: An error occurred while processing a SAML2 Authentication request. AADSTS90011: The SAML authentication request property 'NameIdentifierPolicy/SPNameQualifier' is not supported.
    Trace ID: 0000aaaa-11bb-cccc-dd33-eeeeee333333
    Timestamp: 2013-03-18 08:49:24Z</samlp:StatusMessage>
    </samlp:Status>
</samlp:Response>

Påstående

Förutom IDIssueInstant , och Version, anger Microsoft Entra-ID:t följande element i -elementet i Assertion svaret.

Utfärdare

Detta anges till https://sts.windows.net/<TenantIDGUID>/var <TenantIDGUID> är klientorganisations-ID:t för Microsoft Entra-klientorganisationen.

<Issuer>https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>

Signatur

Microsoft Entra-ID signerar försäkran som svar på en lyckad inloggning. Elementet Signature innehåller en digital signatur som molntjänsten kan använda för att autentisera källan för att verifiera försäkrans integritet.

För att generera den här digitala signaturen använder Microsoft Entra-ID:t signeringsnyckeln i elementet IDPSSODescriptor i metadatadokumentet.

<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
  digital_signature_here
</ds:Signature>

Ämne

Detta anger den princip som är föremål för påståendena i försäkran. Den innehåller ett NameID element som representerar den autentiserade användaren. Värdet NameID är en målidentifierare som endast riktas till den tjänstleverantör som är målgruppen för token. Det är beständigt – det kan återkallas, men tilldelas aldrig om. Den är också ogenomskinlig eftersom den inte avslöjar något om användaren och inte kan användas som identifierare för attributfrågor.

Elementets MethodSubjectConfirmation attribut är alltid inställt på urn:oasis:names:tc:SAML:2.0:cm:bearer.

<Subject>
  <NameID>Uz2Pqz1X7pxe4XLWxV9KJQ+n59d573SepSAkuYKSde8=</NameID>
  <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
    <SubjectConfirmationData InResponseTo="id758d0ef385634593a77bdf7e632984b6" NotOnOrAfter="2013-03-18T07:43:15.144Z" Recipient="https://contoso.com/identity/inboundsso.aspx" />
  </SubjectConfirmation>
</Subject>

Villkor

Det här elementet anger villkor som definierar acceptabel användning av SAML-försäkran.

<Conditions NotBefore="2013-03-18T07:38:15.128Z" NotOnOrAfter="2013-03-18T08:48:15.128Z">
  <AudienceRestriction>
    <Audience>https://www.contoso.com</Audience>
  </AudienceRestriction>
</Conditions>

Attributen NotBefore och NotOnOrAfter anger det intervall under vilket försäkran är giltig.

  • Värdet för NotBefore attributet är lika med eller något (mindre än en sekund) senare än värdet IssueInstant för attributet för elementet Assertion . Microsoft Entra-ID tar inte hänsyn till någon tidsskillnad mellan sig själv och molntjänsten (tjänstleverantören) och lägger inte till någon buffert till den här gången.
  • Värdet för NotOnOrAfter attributet är 70 minuter senare än värdet för attributet NotBefore .

Målgrupp

Detta innehåller en URI som identifierar en avsedd målgrupp. Microsoft Entra-ID anger värdet för det här elementet till värdet Issuer för elementet för AuthnRequest det som initierade inloggningen. Om du vill utvärdera Audience värdet använder du värdet App ID URI för det som angavs under programregistreringen.

<AudienceRestriction>
  <Audience>https://www.contoso.com</Audience>
</AudienceRestriction>

Issuer Precis som värdet Audience måste värdet exakt matcha ett av de namn på tjänstens huvudnamn som representerar molntjänsten i Microsoft Entra-ID. Men om värdet för elementet Issuer inte är ett URI-värde Audience är värdet i svaret värdet Issuer prefixet med spn:.

AttributeStatement

Detta innehåller anspråk om ämnet eller användaren. Följande utdrag innehåller ett exempelelement AttributeStatement . Ellipsen anger att elementet kan innehålla flera attribut och attributvärden.

<AttributeStatement>
  <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
    <AttributeValue>testuser@contoso.com</AttributeValue>
  </Attribute>
  <Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier">
    <AttributeValue>3F2504E0-4F89-11D3-9A0C-0305E82C3301</AttributeValue>
  </Attribute>
  ...
</AttributeStatement>
  • Namnanspråk – värdet för Name attributet (http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name) är användarens huvudnamn för den autentiserade användaren, till exempel testuser@managedtenant.com.
  • ObjectIdentifier-anspråk – värdet för ObjectIdentifier attributet (http://schemas.microsoft.com/identity/claims/objectidentifier) är ObjectId det katalogobjekt som representerar den autentiserade användaren i Microsoft Entra-ID. ObjectId är en oföränderlig, globalt unik och återanvänd säker identifierare för den autentiserade användaren.

AuthnStatement

Det här elementet hävdar att intygsämnet autentiserades med ett visst medel vid en viss tidpunkt.

  • Attributet AuthnInstant anger den tidpunkt då användaren autentiserades med Microsoft Entra-ID.
  • Elementet AuthnContext anger den autentiseringskontext som används för att autentisera användaren.
<AuthnStatement AuthnInstant="2013-03-18T07:33:56.000Z" SessionIndex="_bf9c623d-cc20-407a-9a59-c2d0aee84d12">
  <AuthnContext>
    <AuthnContextClassRef> urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
  </AuthnContext>
</AuthnStatement>