シングル サインオンの SAML プロトコルSingle Sign-On SAML protocol

この記事では、Azure Active Directory (Azure AD) がシングル サインオンに対してサポートする SAML 2.0 の認証要求と応答について説明します。This article covers the SAML 2.0 authentication requests and responses that Azure Active Directory (Azure AD) supports for Single Sign-On.

次の図は、このプロトコルでのシングル サインオンのシーケンスを示したものです。The protocol diagram below describes the single sign-on sequence. クラウド サービス (サービス プロバイダー) は、HTTP リダイレクト バインディングを使用して、 AuthnRequest (認証要求) 要素を Azure AD (ID プロバイダー) に渡します。The cloud service (the service provider) uses an HTTP Redirect binding to pass an AuthnRequest (authentication request) element to Azure AD (the identity provider). Azure AD は、HTTP POST バインディングを使用して、 Response 要素をクラウド サービスに送信します。Azure AD then uses an HTTP post binding to post a Response element to the cloud service.

シングル サインオンのワークフロー

AuthnRequestAuthnRequest

ユーザー認証を要求するため、クラウド サービスは AuthnRequest 要素を Azure AD に送信します。To request a user authentication, cloud services send an AuthnRequest element to Azure AD. サンプル SAML 2.0 AuthnRequest は次の例のようになります。A sample SAML 2.0 AuthnRequest could look like the following example:

<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 説明Description
IDID 必須Required Azure AD はこの属性を使用して、返される応答の InResponseTo 属性を設定します。Azure AD uses this attribute to populate the InResponseTo attribute of the returned response. ID の 1 文字目に数字を使用することはできないので、一般的な方法としては、GUID の文字列表現の前に "id" のような文字列を付加します。ID must not begin with a number, so a common strategy is to prepend a string like "id" to the string representation of a GUID. たとえば、 id6c1c178c166d486687be4aaf5e482730 は有効な ID です。For example, id6c1c178c166d486687be4aaf5e482730 is a valid ID.
バージョンVersion 必須Required このパラメーターは 2.0 に設定する必要があります。This parameter should be set to 2.0.
IssueInstantIssueInstant 必須Required これは、UTC 値と ラウンドトリップ書式 ("o")の DateTime 文字列です。This is a DateTime string with a UTC value and round-trip format ("o"). Azure AD はこの型の DateTime 値を期待しますが、値を評価または使用することはありません。Azure AD expects a DateTime value of this type, but doesn't evaluate or use the value.
AssertionConsumerServiceUrlAssertionConsumerServiceUrl 省略可能Optional 指定する場合、このパラメーターは Azure AD でのクラウド サービスの RedirectUri と一致する必要があります。If provided, this parameter must match the RedirectUri of the cloud service in Azure AD.
ForceAuthnForceAuthn 省略可能Optional これはブール値です。This is a boolean value. true の場合は、ユーザーが Azure AD で有効なセッションを持っている場合であっても、再認証を強制されることを意味します。If true, it means that the user will be forced to re-authenticate, even if they have a valid session with Azure AD.
IsPassiveIsPassive 省略可能Optional これはブール値で、セッション cookie がある場合はそれを使って、ユーザーの介入なしに、サイレント モードで Azure AD がユーザーを認証する必要があるかどうかを指定します。This is a boolean value that specifies whether Azure AD should authenticate the user silently, without user interaction, using the session cookie if one exists. true の場合は、Azure AD はセッション cookie を使ってユーザーの認証を試みます。If this is true, Azure AD will attempt to authenticate the user using the session cookie.

Consent、Destination、AssertionConsumerServiceIndex、AttributeConsumerServiceIndex、ProviderName など、他の AuthnRequest 属性はすべて無視されます。All other AuthnRequest attributes, such as Consent, Destination, AssertionConsumerServiceIndex, AttributeConsumerServiceIndex, and ProviderName are ignored.

Azure AD は、AuthnRequestConditions 要素も無視します。Azure AD also ignores the Conditions element in AuthnRequest.

発行者Issuer

AuthnRequestIssuer 要素は、Azure AD でのクラウド サービスの ServicePrincipalNames のいずれかと厳密に一致する必要があります。The Issuer element in an AuthnRequest must exactly match one of the ServicePrincipalNames in the cloud service in Azure AD. 通常、これはアプリケーション登録時に指定される App ID URI に設定されます。Typically, this is set to the App ID URI that is specified during application registration.

次のサンプルは、Issuer 要素を含む SAML の抜粋です。A SAML excerpt containing the Issuer element looks like the following sample:

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

NameIDPolicyNameIDPolicy

この要素は、特定の名前 ID 形式を応答で使用することを要求するものであり、Azure AD に送信される AuthnRequest 要素では省略可能です。This element requests a particular name ID format in the response and is optional in AuthnRequest elements sent to Azure AD.

NameIdPolicy 要素は次のサンプルのようになります。A NameIdPolicy element looks like the following sample:

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

NameIDPolicy を指定する場合は、省略可能な Format 属性を含めることができます。If NameIDPolicy is provided, you can include its optional Format attribute. Format 属性で指定できる値は次のいずれかのみであり、それ以外の値はエラーになります。The Format attribute can have only one of the following values; any other value results in an error.

  • urn:oasis:names:tc:SAML:2.0:nameid-format:persistent:Azure Active Directory は、一対の識別子として NameID 要求を発行します。urn:oasis:names:tc:SAML:2.0:nameid-format:persistent: Azure Active Directory issues the NameID claim as a pairwise identifier.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress:Azure Active Directory は、電子メール アドレス形式で NameID 要求を発行します。urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress: Azure Active Directory issues the NameID claim in e-mail address format.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified:この値は、Azure Active Directory が要求の形式を選択することを許可します。urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified: This value permits Azure Active Directory to select the claim format. Azure Active Directory は、一対の識別子として NameID 要求を発行します。Azure Active Directory issues the NameID as a pairwise identifier.
  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient:Azure Active Directory は、現在の SSO 操作に固有となる無作為に生成された値として NameID 要求を発行します。urn:oasis:names:tc:SAML:2.0:nameid-format:transient: Azure Active Directory issues the NameID claim as a randomly generated value that is unique to the current SSO operation. つまり、値は一時的であり、認証ユーザーの識別に使うことはできません。This means that the value is temporary and cannot be used to identify the authenticating user.

Azure AD は AllowCreate 属性を無視します。Azure AD ignores the AllowCreate attribute.

RequestAuthnContextRequestAuthnContext

RequestedAuthnContext 要素は、必要な認証方法を指定します。The RequestedAuthnContext element specifies the desired authentication methods. Azure AD に送信される AuthnRequest 要素では省略可能です。It is optional in AuthnRequest elements sent to Azure AD. Azure AD では、urn:oasis:names:tc:SAML:2.0:ac:classes:Password などの AuthnContextClassRef 値をサポートしています。Azure AD supports AuthnContextClassRef values such as urn:oasis:names:tc:SAML:2.0:ac:classes:Password.

ScopingScoping

ID プロバイダーのリストが含まれる Scoping 要素は、Azure AD に送信される AuthnRequest 要素では省略可能です。The Scoping element, which includes a list of identity providers, is optional in AuthnRequest elements sent to Azure AD.

指定する場合は、ProxyCount 属性、IDPListOption 要素、または RequesterID 要素を使用しないでください。これらはサポートされていません。If provided, don't include the ProxyCount attribute, IDPListOption or RequesterID element, as they aren't supported.

署名Signature

AuthnRequest 要素には Signature 要素を含めないでください。Azure AD は署名付き認証要求をサポートしていません。Don't include a Signature element in AuthnRequest elements, as Azure AD does not support signed authentication requests.

サブジェクトSubject

Azure AD は、AuthnRequest 要素の Subject 要素を無視します。Azure AD ignores the Subject element of AuthnRequest elements.

ResponseResponse

要求されたサインオンが正常に完了すると、Azure AD はクラウド サービスに応答を送信します。When a requested sign-on completes successfully, Azure AD posts a response to the cloud service. サインオンに成功した場合、次のサンプルのような応答が返されます。A response to a successful sign-on attempt looks like the following sample:

<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/82869000-6ad1-48f0-8171-272ed18796e9/</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/82869000-6ad1-48f0-8171-272ed18796e9/</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>

ResponseResponse

Response 要素には、承認要求の結果が含まれます。The Response element includes the result of the authorization request. Azure AD は、Response 要素の IDVersionIssueInstant の値を設定します。Azure AD sets the ID, Version and IssueInstant values in the Response element. また、次の属性も設定します。It also sets the following attributes:

  • Destination:サインオンが正常に完了すると、サービス プロバイダー (クラウド サービス) の RedirectUri が設定されます。Destination: When sign-on completes successfully, this is set to the RedirectUri of the service provider (cloud service).
  • InResponseTo:応答を開始した AuthnRequest 要素の ID 属性が設定されます。InResponseTo: This is set to the ID attribute of the AuthnRequest element that initiated the response.

発行者Issuer

Azure AD は、Issuer 要素を https://login.microsoftonline.com/<TenantIDGUID>/ に設定します。<TenantIDGUID> は、Azure AD テナントのテナント ID です。Azure AD sets the Issuer element to https://login.microsoftonline.com/<TenantIDGUID>/ where <TenantIDGUID> is the tenant ID of the Azure AD tenant.

たとえば、Issuer 要素を含む応答の例は次のようになります。For example, a response with Issuer element could look like the following sample:

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

StatusStatus

Status 要素には、サインオンの成功または失敗を示す値が設定されます。The Status element conveys the success or failure of sign-on. StatusCode 要素が含まれており、この要素には要求の状態を表すコードまたは一連の入れ子になったコードが含まれます。It includes the StatusCode element, which contains a code or a set of nested codes that represents the status of the request. また、 StatusMessage 要素もあり、これにはサインイン プロセス中に生成されたカスタム エラー メッセージが含まれます。It also includes the StatusMessage element, which contains custom error messages that are generated during the sign-on process.

サインオンに失敗した場合、次のような SAML 応答が返されます。The following sample is a SAML response to an unsuccessful sign-on attempt.

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

AssertionAssertion

IDIssueInstant、および Version に加えて、Azure AD は応答の Assertion 要素の次の要素も設定します。In addition to the ID, IssueInstant and Version, Azure AD sets the following elements in the Assertion element of the response.

発行者Issuer

この要素は https://sts.windows.net/<TenantIDGUID>/ に設定されます。<TenantIDGUID> は Azure AD テナントのテナント ID です。This is set to https://sts.windows.net/<TenantIDGUID>/where <TenantIDGUID> is the Tenant ID of the Azure AD tenant.

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

署名Signature

Azure AD は、サインオンが成功すると応答のアサーションに署名します。Azure AD signs the assertion in response to a successful sign-on. Signature 要素にはデジタル署名が含まれ、クラウド サービスはそれを使用してソースを認証し、アサーションの整合性を検証できます。The Signature element contains a digital signature that the cloud service can use to authenticate the source to verify the integrity of the assertion.

このデジタル署名を生成するため、Azure AD はメタデータ ドキュメントの IDPSSODescriptor 要素の署名キーを使用します。To generate this digital signature, Azure AD uses the signing key in the IDPSSODescriptor element of its metadata document.

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

サブジェクトSubject

この要素は、アサーションのステートメントのサブジェクトであるプリンシパルを指定します。This specifies the principal that is the subject of the statements in the assertion. 認証されたユーザーを表す NameID 要素が含まれます。It contains a NameID element, which represents the authenticated user. NameID の値は、トークンの対象であるサービス プロバイダーに対してのみ送信される限定的な識別子です。The NameID value is a targeted identifier that is directed only to the service provider that is the audience for the token. 永続的であり、取り消すことはできますが、再割り当てはされません。It is persistent - it can be revoked, but is never reassigned. また、非透過的であるため、ユーザーについての情報はわからず、属性クエリに対する識別子としては使用できません。It is also opaque, in that it does not reveal anything about the user and cannot be used as an identifier for attribute queries.

SubjectConfirmation 要素の Method 属性は、常に urn:oasis:names:tc:SAML:2.0:cm:bearer に設定されます。The Method attribute of the SubjectConfirmation element is always set to 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>

条件Conditions

この要素は、SAML アサーションの許容される使用方法を定義する条件を指定します。This element specifies conditions that define the acceptable use of SAML assertions.

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

NotBefore および NotOnOrAfter 属性は、アサーションが有効である期間を指定します。The NotBefore and NotOnOrAfter attributes specify the interval during which the assertion is valid.

  • NotBefore 属性の値は、Assertion 要素の IssueInstant 属性と同じか、またはそれよりもわずかに (1 秒未満) 後です。The value of the NotBefore attribute is equal to or slightly (less than a second) later than the value of IssueInstant attribute of the Assertion element. Azure AD では、それ自体とクラウド サービス (サービス プロバイダー) 間の時間の違いは考慮されず、この時間に対するバッファーは追加されません。Azure AD does not account for any time difference between itself and the cloud service (service provider), and does not add any buffer to this time.
  • NotOnOrAfter 属性の値は、NotBefore 属性の値より 70 分後です。The value of the NotOnOrAfter attribute is 70 minutes later than the value of the NotBefore attribute.

対象ユーザーAudience

この要素には、対象を識別する URI が含まれます。This contains a URI that identifies an intended audience. Azure AD は、この要素の値に、サインオンを開始した AuthnRequestIssuer 要素の値を設定します。Azure AD sets the value of this element to the value of Issuer element of the AuthnRequest that initiated the sign-on. Audience の値を評価するには、アプリケーション登録時に指定された App ID URI の値を使用します。To evaluate the Audience value, use the value of the App ID URI that was specified during application registration.

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

Issuer の値と同様に、Audience の値は Azure AD でクラウド サービスを表すサービス プリンシパル名のいずれかと厳密に一致する必要があります。Like the Issuer value, the Audience value must exactly match one of the service principal names that represents the cloud service in Azure AD. ただし、Issuer 要素の値が URI 値ではない場合は、応答の Audience の値は、プレフィックス spn: が付加された Issuer 値になります。However, if the value of the Issuer element is not a URI value, the Audience value in the response is the Issuer value prefixed with spn:.

AttributeStatementAttributeStatement

この要素には、サブジェクトまたはユーザーに関する要求が含まれます。This contains claims about the subject or user. AttributeStatement 要素の例を含む抜粋を次に示します。The following excerpt contains a sample AttributeStatement element. 省略記号は、要素が複数の属性および属性値を含むことができることを示します。The ellipsis indicates that the element can include multiple attributes and attribute values.

<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>
  • Name 要求 - Name 属性 (http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name) の値は、認証されたユーザーのユーザー プリンシパル名です (例: testuser@managedtenant.com)。Name Claim - The value of the Name attribute (http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name) is the user principal name of the authenticated user, such as testuser@managedtenant.com.
  • ObjectIdentifier 要求 - ObjectIdentifier 属性 (http://schemas.microsoft.com/identity/claims/objectidentifier) の値は、Azure AD で認証されたユーザーを表すディレクトリ オブジェクトの ObjectId です。ObjectIdentifier Claim - The value of the ObjectIdentifier attribute (http://schemas.microsoft.com/identity/claims/objectidentifier) is the ObjectId of the directory object that represents the authenticated user in Azure AD. ObjectId は、認証されたユーザーの変更不可能で、グローバルに一意であり、再利用が安全な識別子です。ObjectId is an immutable, globally unique, and reuse safe identifier of the authenticated user.

AuthnStatementAuthnStatement

この要素は、アサーション サブジェクトが特定の時刻に特定の手段によって認証されたことをアサートします。This element asserts that the assertion subject was authenticated by a particular means at a particular time.

  • AuthnInstant 属性は、Azure AD でユーザーが認証された時刻を指定します。The AuthnInstant attribute specifies the time at which the user authenticated with Azure AD.
  • AuthnContext 要素は、ユーザーの認証に使用された認証コンテキストを指定します。The AuthnContext element specifies the authentication context used to authenticate the user.
<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>