次の方法で共有


AD FS によって発行された SAML トークンを Microsoft Graph アクセス トークンに交換する

Active Directory フェデレーション サービス (AD FS) によって発行された SAML トークンを使用するシングル サインオン (SSO) をアプリケーションで有効にして、Microsoft Graph へのアクセスも要求する場合は、この記事の手順に従ってください。

SAML ベアラー アサーション フローを有効にして、フェデレーション AD FS インスタンスによって発行された SAMLv1 トークンを、Microsoft Graph 用の OAuth 2.0 アクセス トークンに交換します。 ユーザーの認証のためにユーザーのブラウザーが Microsoft Entra ID にリダイレクトされると、ユーザーに自分の資格情報を入力するよう求めるのではなく、ブラウザーによって SAML サインインからセッションが取得されます。

重要

このシナリオは、AD FS が、元の SAMLv1 トークンを発行したフェデレーション ID プロバイダーである場合にのみ機能します。 Microsoft Entra ID によって発行された SAMLv2 トークンを Microsoft Graph アクセス トークンに交換することはできません

前提条件

シナリオの概要

OAuth 2.0 SAML ベアラー アサーション フローでは、クライアントが既存の信頼関係を使用する必要があるときに、SAML アサーションを使用して OAuth アクセス トークンを要求することができます。 SAML アサーションに適用される署名は、承認されたアプリの認証を提供します。 SAML アサーションは、ID プロバイダーによって発行され、サービス プロバイダーによって使用される XML セキュリティ トークンです。 サービス プロバイダーはその内容に依存して、セキュリティ関連の目的でアサーションの対象を識別します。

SAML アサーションは、OAuth トークン エンドポイントにポストされます。 エンドポイントはアサーションを処理し、アプリの事前の承認に基づいてアクセス トークンを発行します。 クライアントでは、更新トークンを持つ必要も保存する必要もありません。また、トークン エンドポイントにクライアント シークレットを渡す必要もありません。

Microsoft Entra ID にアプリケーションを登録する

アプリケーションを Microsoft Entra ID に登録するには、「Microsoft ID プラットフォームにアプリケーションを登録する」の記事の手順を完了します。

AD FS から SAML アサーションを取得する

SOAP エンベロープを使用して SAML アサーションをフェッチするために、AD FS エンドポイントへの POST 要求を作成します。

POST https://ADFSFQDN/adfs/services/trust/2005/usernamemixed

パラメーター値:

キー
client-request-id CLIENT_ID

ヘッダー値:

キー
SOAPAction http://schema.xlmsoap.org/ws/2005/02/trust/RST/Issue
コンテンツタイプ application/soap+xml
client-request-id CLIENT_ID
return-client-request-id true
同意する application/json

AD FS 要求本文:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
  <s:Header>
    <a:Action s:mustUnderstand="1" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue</a:Action>
    <a:MessageID>urn:uuid:9af3303f-1f9e-466c-9938-c9a982822557</a:MessageID>
    <a:ReplyTo>
      <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
      <o:UsernameToken u:Id="uuid-2525825F-6A4A-44D8-83BA-68E26F4DD99">
        <o:Username>USERNAME</o:Username>
        <o:Password>PASSWORD</o:Password>
      </o:UsernameToken>
    </o:Security>
  </s:Header>
  <s:Body>
    <trust:RequestSecurityToken xmlns:trust="http://schemas.xmlsoap.org/ws/2005/02/trust">
      <wsp:AppliesTo xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
        <a:EndpointReference>
          <a:Address>urn:federation:MicrosoftOnline</a:Address>
        </a:EndpointReference>
      </wsp:AppliesTo>
      <trust:KeyType>http://schemas.xmlsoap.org/ws/2005/05/identity/NoProofKey</trust:KeyType>
      <trust:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</trust:RequestType>
      <trust:TokenType>http://schemas.xmlsoap.org/ws/2005/02/sc/sct</trust:TokenType>
    </trust:RequestSecurityToken>
  </s:Body>
</s:Envelope>

この要求が正常にポストされると、AD FS から SAML アサーションを受け取るはずです。 SAML:Assertion タグ データのみが必要です。今後の要求で使用するには、base64 エンコードに変換してください。

SAML アサーションを使用して OAuth 2.0 トークンを取得する

AD FS アサーション応答を使用して OAuth 2.0 トークンをフェッチします。

以下に示すように、ヘッダー値を使用して POST 要求を作成します。

キー 説明
Host login.microsoftonline.com
コンテンツタイプ application/x-www-form-urlencoded

要求の本文で、client_id、client_secret、および assertion (前の手順で取得した base64 エンコードの SAML アサーション) を置き換えます。

キー 説明
grant_type urn:ietf:params:oauth:grant-type:saml2-bearer 許可の種類を指定します
client_id CLIENTID アプリケーションのクライアント ID を取得する
client_secret CLIENTSECRET アプリケーションのクライアント シークレット
assertion ASSERTION base64 でエンコードされた SAML アサーション
scope openid https://graph.microsoft.com/.default トークンが有効なスコープ。

要求が成功すると、Microsoft Entra ID からアクセス トークンを受け取ります。

OAuth 2.0 トークンを使用してデータを取得する

アクセス トークンを受け取ったら、Graph API (この例では Outlook タスク) を呼び出します。

前の手順でフェッチしたアクセス トークンを使用して GET 要求を作成します。

キー 説明
コンテンツタイプ application/x-www-form-urlencoded
承認 Bearer ACCESS_TOKEN OAuth 2.0 トークン要求から取得されたアクセス トークン

要求が成功すると、JSON 応答を受け取ります。

次の手順

アプリの登録と認証フローについて詳しくは、以下をご覧ください。