シングル サインオン SAML プロトコル
この記事では、Microsoft Entra ID がシングル サインオン (SSO) に対してサポートする SAML 2.0 認証要求と応答について説明します。
次のプロトコル図では、シングル サインオン シーケンスについて説明します。 クラウド サービス (サービス プロバイダー) は、HTTP リダイレクト バインドを使用して、AuthnRequest
(認証要求) 要素を Microsoft Entra ID (ID プロバイダー) に渡します。 その後、Microsoft Entra ID は HTTP ポスト バインディングを使用して、Response
要素をクラウド サービスに投稿します。
手記
この記事では、シングル サインオンに SAML を使用する方法について説明します。 シングル サインオンを処理するその他の方法 (OpenID Connect または統合 Windows 認証の使用など) の詳細については、「Microsoft Entra IDのアプリケーションへのシングル サインオン」を参照してください。
AuthnRequest
ユーザー認証を要求するために、クラウド サービスは microsoft Entra ID に AuthnRequest
要素を送信します。 サンプルの SAML 2.0 AuthnRequest
は、次の例のようになります。
<samlp:AuthnRequest
xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
ID="C2dE3fH4iJ5kL6mN7oP8qR9sT0uV1w"
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>
パラメーター | 種類 | 形容 |
---|---|---|
ID |
必須 | Microsoft Entra ID では、この属性を使用して、返された応答の InResponseTo 属性を設定します。 ID は数値で始まってはいけません。そのため、一般的な方法は、GUID の文字列表現の先頭に "ID" のような文字列を付加することです。 たとえば、id6c1c178c166d486687be4aaf5e482730 は有効な ID です。 |
Version |
必須 | このパラメーターは 2.0 に設定する必要があります。 |
IssueInstant |
必須 | これは、UTC 値と ラウンドトリップ形式 ("o")を持つ DateTime 文字列です。 Microsoft Entra ID は、この型の DateTime 値を受け取りますが、値の評価や使用は行いません。 |
AssertionConsumerServiceURL |
随意 | 指定した場合、このパラメーターは Microsoft Entra ID のクラウド サービスの RedirectUri と一致する必要があります。 |
ForceAuthn |
随意 | これはブール値です。 true の場合は、ユーザーが Microsoft Entra ID を持つ有効なセッションを持っている場合でも、ユーザーは強制的に再認証を強制されることを意味します。 |
IsPassive |
随意 | これは、Microsoft Entra ID が存在する場合にセッション Cookie を使用して、ユーザーの操作なしでユーザーをサイレント認証する必要があるかどうかを指定するブール値です。 これが true の場合、Microsoft Entra ID はセッション Cookie を使用してユーザーの認証を試みます。 |
Microsoft Entra ID は、AuthnRequest
内の Conditions
要素も無視します。
発行者
AuthnRequest
の Issuer
要素は、Microsoft Entra ID のクラウド サービスの ServicePrincipalNames のいずれかと正確に一致する必要があります。 通常、これは、アプリケーションの登録時に指定された アプリ ID URI に設定されます。
Issuer
要素を含む SAML 抜粋は、次の例のようになります。
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>
NameIDPolicy
この要素は、応答で特定の名前 ID 形式を要求し、Microsoft Entra ID に送信 AuthnRequest
要素では省略可能です。
NameIdPolicy
要素は次の例のようになります。
<NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"/>
NameIDPolicy
が指定されている場合は、省略可能な Format
属性を含めることができます。
Format
属性には、次のいずれかの値のみを指定できます。その他の値を指定すると、エラーが発生します。
-
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
: Microsoft Entra ID は、NameID
要求をペアワイズ識別子として発行します。 -
urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
: Microsoft Entra ID は、電子メール アドレス形式でNameID
要求を発行します。 -
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
: この値により、Microsoft Entra ID が要求形式を選択できます。 Microsoft Entra ID は、NameID
要求をペアワイズ識別子として発行します。 -
urn:oasis:names:tc:SAML:2.0:nameid-format:transient
: Microsoft Entra ID は、現在の SSO 操作に固有のランダムに生成された値として、NameID
要求を発行します。 これは、値が一時的であり、認証ユーザーを識別するために使用できないことを意味します。
SPNameQualifier
が指定されている場合、Microsoft Entra ID には応答に同じ SPNameQualifier
が含まれます。
Microsoft Entra ID は、AllowCreate
属性を無視します。
RequestedAuthnContext
RequestedAuthnContext
要素は、必要な認証方法を指定します。 Microsoft Entra ID に送信 AuthnRequest
要素では省略可能です。
手記
RequestedAuthnContext
が SAML 要求に含まれている場合は、Comparison
要素を exact
に設定する必要があります。
Microsoft Entra ID では、次の AuthnContextClassRef
値がサポートされています。
認証方法 | 認証コンテキスト クラス URI |
---|---|
Kerberos | urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos |
ユーザー名とパスワード | urn:oasis:names:tc:SAML:2.0:ac:classes:Password |
PGP 公開キー インフラストラクチャ | urn:oasis:names:tc:SAML:2.0:ac:classes:PGP |
リモート パスワードをセキュリティで保護する | urn:oasis:names:tc:SAML:2.0:ac:classes:SecureRemotePassword |
XML デジタル署名 | urn:oasis:names:tc:SAML:2.0:ac:classes:XMLDSig |
単純な公開キー インフラストラクチャ | urn:oasis:names:tc:SAML:2.0:ac:classes:SPKI |
Smartcard | urn:oasis:names:tc:SAML:2.0:ac:classes:Smartcard |
囲まれた秘密キーと PIN を含むスマートカード | urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI |
トランスポート層セキュリティ (TLS) クライアント | urn:oasis:names:tc:SAML:2.0:ac:classes:TLSClient |
未指定 | urn:oasis:names:tc:SAML:2.0:ac:classes:Unspecified |
X.509 証明書 | urn:oasis:names:tc:SAML:2.0:ac:classes:X509 |
統合 Windows 認証 | urn:federation:authentication:windows |
スコープ
id プロバイダーの一覧を含む Scoping
要素は、Microsoft Entra ID に送信される要素 AuthnRequest
省略可能です。
指定した場合は、サポートされていないため、ProxyCount
属性、IDPListOption
、または RequesterID
要素は含めないでください。
署名
AuthnRequest
要素の Signature
要素は省略可能です。 Microsoft Entra ID は、署名された認証要求の要件を適用するように構成できます。 有効にすると、署名された認証要求のみが受け入れられます。それ以外の場合、要求者の検証は、登録済みの Assertion Consumer Service URL にのみ応答することによって提供されます。
件名
Subject
要素は含めないでください。 Microsoft Entra ID では、AuthnRequest
でのサブジェクトの指定はサポートされておらず、指定された場合はエラーが返されます。
代わりに、パラメーター値としてサブジェクトの NameID を使用して、シングル サインオン URL に login_hint
パラメーターを HTTP 要求に追加することで、サブジェクトを指定できます。
応答
要求されたサインオンが正常に完了すると、Microsoft Entra ID はクラウド サービスに応答を投稿します。 サインオン試行が成功した場合の応答は、次の例のようになります。
<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="C2dE3fH4iJ5kL6mN7oP8qR9sT0uV1w" 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
要素には、承認要求の結果が含まれます。 Microsoft Entra ID は、Response
要素の ID
、Version
、および IssueInstant
値を設定します。 また、次の属性も設定します。
-
Destination
: サインオンが正常に完了すると、サービス プロバイダー (クラウド サービス) のRedirectUri
に設定されます。 -
InResponseTo
: 応答を開始したAuthnRequest
要素のID
属性に設定されます。
発行者
Microsoft Entra ID は、Issuer
要素を https://sts.windows.net/<TenantIDGUID>/
に設定します。ここで、<TenantIDGUID>
は Microsoft Entra テナントのテナント ID です。
たとえば、Issuer 要素を持つ応答は、次の例のようになります。
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
地位
Status
要素は、サインオンの成功または失敗を伝えます。
StatusCode
要素が含まれます。この要素には、要求の状態を表すコードまたは入れ子になったコードのセットが含まれます。 また、StatusMessage
要素も含まれます。これには、サインオン プロセス中に生成されるカスタム エラー メッセージが含まれます。
次の例は、失敗したサインオン試行に対する 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/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-dd22-eeeeee333333
Timestamp: 2013-03-18 08:49:24Z</samlp:StatusMessage>
</samlp:Status>
</samlp:Response>
主張
Microsoft Entra ID は、ID
、IssueInstant
、および Version
に加えて、応答の Assertion
要素に次の要素を設定します。
発行者
これは、<TenantIDGUID>
が Microsoft Entra テナントのテナント ID である https://sts.windows.net/<TenantIDGUID>/
に設定されます。
<Issuer>https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
署名
Microsoft Entra ID は、サインオンが成功した場合に応答してアサーションに署名します。
Signature
要素には、クラウド サービスがアサーションの整合性を検証するためにソースを認証するために使用できるデジタル署名が含まれています。
このデジタル署名を生成するために、Microsoft Entra ID はメタデータ ドキュメントの IDPSSODescriptor
要素の署名キーを使用します。
<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
digital_signature_here
</ds:Signature>
件名
これは、アサーション内のステートメントの対象となる原則を指定します。 これには、認証されたユーザーを表す NameID
要素が含まれています。
NameID
値は、トークンの対象ユーザーであるサービス プロバイダーにのみ送信されるターゲット識別子です。 これは永続的です。取り消すことはできますが、再割り当てされることはありません。 また、ユーザーについて何も明らかにせず、属性クエリの識別子として使用できないという点でも不透明です。
SubjectConfirmation
要素の Method
属性は常に 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>
条件
この要素は、SAML アサーションの許容される使用を定義する条件を指定します。
<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
属性は、アサーションが有効な間隔を指定します。
-
NotBefore
属性の値は、Assertion
要素の属性の値より少し遅い (1 秒未満)IssueInstant
。 Microsoft Entra ID は、それ自体とクラウド サービス (サービス プロバイダー) の時間差を考慮せず、現時点ではバッファーを追加しません。 -
NotOnOrAfter
属性の値は、NotBefore
属性の値より 70 分後です。
聴衆
これには、対象ユーザーを識別する URI が含まれています。 Microsoft Entra ID は、この要素の値を、サインオンを開始した AuthnRequest
の Issuer
要素の値に設定します。
Audience
値を評価するには、アプリケーションの登録時に指定された App ID URI
の値を使用します。
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
Issuer
の値と同様に、Audience
値は、Microsoft Entra ID のクラウド サービスを表すサービス プリンシパル名のいずれかと正確に一致する必要があります。 ただし、Issuer
要素の値が URI 値でない場合、応答の Audience
値は、spn:
でプレフィックスが付いた Issuer
値になります。
AttributeStatement
これには、サブジェクトまたはユーザーに関する要求が含まれます。 次の抜粋には、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>
-
名前要求 -
Name
属性 (http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
) の値は、認証されたユーザーのユーザー プリンシパル名 (testuser@managedtenant.com
など) です。 -
ObjectIdentifier 要求 -
ObjectIdentifier
属性 (http://schemas.microsoft.com/identity/claims/objectidentifier
) の値は、Microsoft Entra ID で認証されたユーザーを表すディレクトリ オブジェクトのObjectId
です。ObjectId
は、変更できないグローバルに一意であり、認証されたユーザーの安全な識別子を再利用します。
AuthnStatement
この要素は、アサーションサブジェクトが特定の時点で特定の手段によって認証されたことをアサートします。
-
AuthnInstant
属性は、ユーザーが Microsoft Entra ID で認証された時刻を指定します。 -
AuthnContext
要素は、ユーザーの認証に使用される認証コンテキストを指定します。
<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>