匯出 (0) 列印
全部展開

單一登入 (SAML 通訊協定)

發佈時間: 2013年4月

更新日期: 2014年12月

Azure Active Directory 支援 SAML 2.0 Web 瀏覽器單一登入 (SSO) 設定檔。若要要求 Azure Active Directory 驗證使用者,雲端服務 (服務提供者) 必須使用 HTTP 重新導向繫結將 AuthnRequest (驗證要求) 元素傳遞至 Azure Active Directory (身分識別提供者)。Azure Active Directory 使用 HTTP Post 繫結將 Response 張貼至雲端服務。

本主題說明 Azure Active Directory 對單一登入支援的 SAML 2.0 驗證要求和回應。其中列出並說明必要、選擇性、略過和不支援的元素和屬性以及值需求。

此圖描述單一登出的 Azure Active Directory 驗證程序工作流程。

單一登入工作流程圖表

這一節說明 Azure Active Directory 的 SAML 2.0 授權要求中的元素。以下是僅有必要屬性的 SAML 2.0 AuthnRequest 元素範例。

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

若要要求使用者驗證,雲端服務會將 AuthnRequest 元素傳送到 Azure Active Directory。下列清單描述當 AuthnRequest 元素使用於此內容時的必要、選擇性和忽略的屬性。

  • 需要的屬性

    • ID。Azure Active Directory 使用 ID 屬性值來填入它所傳回的 SAML ResponseInResponseTo 屬性。SAML 規格要求 ID 值不得以數字開頭。產生 ID 屬性值時常用的策略就是在 GUID 的字串表示前面加上預先定義的字串,例如 "id"。

    • Version。將版本屬性的值設定為 2.0。此值為必要項目。

    • IssueInstant。將 IssueInstant 屬性值設定為具有國際標準時間 (UTC) 值和反覆存取格式 ("o")DateTime 字串。Azure Active Directory 需有此型別的 Datetime 值,但不會評估或使用此值。

  • 選擇性屬性

    • AssertionConsumerServiceURL。若已提供,AssertionConsumerServiceURL 屬性值必須完全符合服務主體物件的 RedirectUri 值,而該主體物件表示 Azure Active Directory 中的雲端服務。

    • ForceAuthn:若已提供,將此值設定為 false。任何其他值會導致錯誤。

    • IsPassive:若已提供,將此值設定為 false。任何其他值會導致錯誤。

  • Ignored Attributes:Consent、Destination、AssertionConsumerServiceIndex、AttributeConsumerServiceIndex、ProviderName

Azure Active Directory 會忽略 AuthnRequest 元素中的 Conditions 元素。

任何傳送至 Azure Active Directory 的 AuthnRequest 元素中都需要有 Issuer 元素。

下列 SAML 摘錄顯示 Issuer 元素範例。

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

Issuer 元素的值必須完全符合服務主體物件的其中一個 ServicePrincipalNames 值,該值表示 Azure Active Directory 中的雲端服務。將 Issuer 元素值設定為在應用程式登錄期間指定的 App ID URI

在傳送至 Azure Active Directory 的 AuthnRequest 元素中,要求特定名稱 ID 格式的 NameIDPolicy 元素是選擇性的。

若已提供 NameIDPolicy,您可以包含其選擇性 Format 屬性。若已提供,Format 屬性必須具有下列其中一個值。任何其他值會導致錯誤。

  • "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent":Azure Active Directory 發出 NameID 宣告做為成對識別碼。

  • "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress":Azure Active Directory 以電子郵件地址格式發出 NameID 宣告。

  • "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified":這個值允許 Azure Active Directory 選取宣告格式。Azure Active Directory 發出 NameID 做為成對識別碼。

請勿包含 SPNameQualifier 屬性。如果您包含 AllowCreate 屬性,Azure Active Directory 不會傳回錯誤,但忽略此元素。

下列是有效 NameIdPolicy 元素的範例。

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

RequestedAuthnContext 元素指定所需的驗證方法。它在傳送至 Azure Active Directory 的 AuthnRequest 元素中是選擇性的。Azure Active Directory 僅支援一個 AuthnContextClassRef (驗證內容類別的要求) 值,即 "urn:oasis:names:tc:SAML:2.0:ac:classes:Password"

在傳送至 Azure Active Directory 的 AuthnRequest 元素中,包含身分識別提供者清單的 Scoping 元素是選擇性的。

在傳送至 Azure Active Directory 的 AuthnRequest 元素的 Scoping 元素中,請勿包含 ProxyCount 屬性、IDPList 選項或 RequesterID 元素。不支援上述項目。

請勿在傳送至 Azure Active Directory 的 AuthnRequest 中包含 Signature 元素。Azure Active Directory 不支援已簽署的驗證要求。

Azure Active Directory 會忽略 AuthnRequest 元素的 Subject 元素。

順利完成要求的登入時,Azure Active Directory 會將回應張貼至雲端服務 (服務提供者)。這一節說明回應的格式。下列 SAML 範例顯示成功登入嘗試的回應。

<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.windows.net/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>
  <ds:Signature xmlns:ds="http://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.windows.net/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>
    <ds:Signature xmlns:ds="http://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 元素包含授權要求的結果。Azure Active Directory 包含 Response 元素的 IDVersionIssueInstant 屬性。也會設定下列屬性的值。

  • Destination︰順利完成登入時,Azure Active Directory 會將 Destination 屬性的值設定為服務提供者的 RedirectUri

  • InResponseTo:Azure Active Directory 一律將 InResponseTo 屬性的值設定為起始回應的 AuthnRequest 元素的 ID 屬性值。

Azure Active Directory 會將 Issuer 元素的值設定為 "https://login.windows.net /<TenantIDGUID>/",其中 <TenantIDGUID> 是 Azure Active Directory 租用戶的租用戶識別碼。

下列 SAML 摘錄顯示 Issuer 元素範例。

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

Azure Active Directory 會簽署 Response 元素以回應登入成功。Response 元素中的 Signature 元素包含數位簽章,可供雲端服務用來驗證來源及驗證回應的完整性。為了產生此數位簽章,Azure Active Directory 會使用在其中繼資料文件的 IDPSSODescriptor 元素中指定的簽署金鑰。

Azure Active Directory 也會簽署 Response 元素中的 Assertion 元素,但是這兩個 Signature 元素是獨立的。

下列 SAML 摘錄顯示 Signature 元素範例。在此範例中,數位簽章已被省略符號取代。

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

如需 IDPSSODescriptor 元素的詳細資訊,請參閱SAML 通訊協定中繼資料和端點

Azure Active Directory 使用 Status 元素來表達登入成功或失敗。Status 元素中的 StatusCode 元素包含一個代碼或一組巢狀代碼,用以表示要求的狀態。Status 元素也包含 StatusMessage 元素,其中包含在登入期間產生的自訂錯誤訊息。

如需有關 Azure Active Directory 傳回的驗證錯誤詳細資訊,請參閱驗證通訊協定錯誤參考

下列 SAML 摘錄顯示嘗試登入失敗的 SAML 回應範例。

<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/82869000-6ad1-48f0-8171-272ed18796e9/</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: 66febed4-e737-49ff-ac23-464ba090d57c
Timestamp: 2013-03-18 08:49:24Z</samlp:StatusMessage>
  </samlp:Status>

Azure Active Directory 會在 Response 元素中的 Assertion 元素上設定下列屬性︰ID、IssueInstant 和 Version。

Azure Active Directory 會將 Assertion 元素中的 Issuer 元素值設定為 https://sts.windows.net/<TenantIDGUID>/,其中 <TenantIDGUID> 是 Azure Active Directory 租用戶的租用戶識別碼。

下列 SAML 摘錄顯示 Assertion 元素中的 Issuer 元素範例。

<Issuer>https://login.windows.net/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>

Azure Active Directory 會在登入成功的回應中簽署判斷提示。Assertion 元素中的 Signature 元素包含數位簽章,可供雲端服務用來驗證來源及驗證判斷提示的完整性。為了產生此數位簽章,Azure Active Directory 會使用在其中繼資料文件的 IDPSSODescriptor 元素中指定的簽署金鑰。

如需 IDPSSODescriptor 元素的詳細資訊,請參閱SAML 通訊協定中繼資料和端點

下列 SAML 摘錄顯示 Assertion 元素中的 Signature 元素範例。在此範例中,數位簽章已被省略符號取代。

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

Azure Active Directory 回應中 Assertion 元素的 Subject 元素可指定主體,以做為判斷提示中陳述式的主體。

Azure Active Directory 所傳回的回應中的 Subject 元素包含 NameIdSubjectConfirmation 元素。

NameId 元素值是不透明且不可變的識別碼,可表示已驗證的使用者。NameId 值為目標識別碼,只會導向至身為權杖對象的服務提供者。NameId 值有持續性;可予以撤銷,但絕不能重新指派。它也是不透明的,亦即,不會揭露使用者相關事項且無法做為屬性查詢的識別碼。

下列 SAML 摘錄顯示 Subject 元素範例。

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

Azure Active Directory 只會將 SubjectConfirmation 元素的 Method 屬性設定為 "urn:oasis:names:tc:SAML:2.0:cm:bearer"

Assertion 元素中的 Conditions 元素會指定條件,以定義可接受的 SAML 判斷提示用途。

下列 SAML 摘錄顯示 Conditions 元素範例。

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

Azure Active Directory 會設定 Assertion 元素的 Conditions 元素的 NotBeforeNotOnOrAfter 屬性。這些屬性可指定判斷提示的有效間隔。

  • NotBefore 屬性值會等於或稍微 (少於一秒) 晚於 Assertion 元素的 IssueInstant 屬性值。Azure Active Directory 不會考慮本身與雲端服務 (服務提供者) 之間的任何時差,而且不會對此時間加入任何緩衝。

  • NotOnOrAfter 屬性值比 NotBefore 屬性值晚 70 分鐘。

Audience 元素會出現在回應判斷提示中 Conditions 元素的 AudienceRestriction 元素中。Audience 的值是用以識別適用對象的 URI。Azure Active Directory 會將 Audience 元素值設定為初始化登入之 AuthnRequestIssuer 元素值。驗證要求的簽發者就是回應的對象。

下列 SAML 摘錄顯示 AudienceRestriction 元素中的 Audience 元素範例。

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

如同 Issuer 值,Audience 值必須完全符合其中一個服務主體名稱,而該名稱表示 Azure Active Directory 中的雲端服務。不過,如果 AuthnRequest 元素中的 Issuer 元素值不是 URI 值,則回應中的 Audience 值會是前面加上 spn:Issuer 值。

若要評估 Audience 值,請使用在應用程式登錄期間指定的 App ID URI

AttributeStatement 元素包含有關主體或使用者的宣告。

下列 SAML 摘錄是 AttributeStatement 元素範例。省略符號表示此元素可以包含多個屬性和屬性值。

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

Azure Active Directory 會將有關已驗證使用者的多個宣告加入至 AttributeStatement 元素值,包括 NameObjectIdentifier 宣告

  • Name Claim。Name 屬性的值 (http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name) 是已驗證使用者的使用者主體名稱,例如 testuser@managedtenant.com

  • ObjectIdentifier Claim。ObjectIdentifier 屬性 "http://schemas.microsoft.com/identity/claims/objectidentifier" 的值是目錄物件的 ObjectId,可代表 Azure Active Directory 中已驗證的使用者。ObjectId 是已驗證使用者的不可變、全域唯一並重複使用的安全識別碼。

如需有關 Azure Active Directory 支援的宣告類型詳細資訊,請參閱支援的權杖和宣告類型

AuthnStatement 主張判斷提示主體是在特定時間以特定方式進行驗證。AuthnStatement 元素的 AuthnInstant 屬性會指定向 Azure Active Directory 驗證使用者的時間。AuthnStatement 元素也包含 AuthnContext 元素,可指定用來驗證使用者的驗證內容類別。

下列顯示 AuthnStatement 元素範例。

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

另請參閱

顯示:
© 2015 Microsoft