Exchange の ID トークンを使用してユーザーを認証する

重要

従来の Exchange トークンは非推奨です。 2024 年 10 月以降、Exchange Online テナントのレガシ Exchange ユーザー IDコールバック トークンはオフになり始めます。 タイムラインと詳細については、 FAQ ページを参照してください。 これは、現在の脅威の状況に対応するために必要なツールを組織に提供する 、Microsoft の Secure Future Initiative の一部です。 Exchange ユーザー ID トークンは、引き続き Exchange オンプレミスで機能します。 入れ子になったアプリ認証は、今後のトークンに推奨される方法です。

Exchange のユーザー ID トークンは、アドインがアドイン ユーザーを一意に識別する方法を提供します。 ユーザーの ID を確立することで、バックエンド サービスのシングル サインオン (SSO) 認証スキームを実装できます。これにより、Outlook アドインを使用している顧客はサインインせずにサービスに接続できます。 このトークンの種類を使用する場合の詳細については、「Exchange のユーザー ID トークン」を参照してください。 この記事では、Exchange の ID トークンを使用してバックエンドにユーザーを認証する簡単な方法について説明します。

重要

これは、単なる SSO の簡単な実装例です。 従来どおり、ID と認証を処理するときは、コードが組織のセキュリティ要件を満たしていることを確認する必要があります。

要求ごとに ID トークンを送信する

最初の手順では、getUserIdentityTokenAsync を呼び出すことにより、アドインでサーバーから Exchange のユーザー ID トークンを取得します。 その次に、アドインはこのトークンを、バックエンドに対する各要求とともに送信します。 これはヘッダーか、要求の本文の一部として組み込まれます。

トークンを検証する

バックエンドは、トークンを検証してから承諾する必要があります。 これは、トークンがユーザーの Exchange サーバーによって発行されたことを確認する重要な手順です。 Exchange のユーザー ID トークンの検証の詳細については、「Exchange の ID トークンを検証する」を参照してください。

検証とデコードが完了すると、トークンのペイロードは次のようになります。

{ 
    "aud" : "https://mailhost.contoso.com/IdentityTest.html",
    "iss" : "00000002-0000-0ff1-ce00-000000000000@mailhost.contoso.com",
    "nbf" : "1505749527",
    "exp" : "1505778327",
    "appctxsender":"00000002-0000-0ff1-ce00-000000000000@mailhost.context.com",
    "isbrowserhostedapp":"true",
    "appctx" : {
        "msexchuid" : "53e925fa-76ba-45e1-be0f-4ef08b59d389",
        "version" : "ExIdTok.V1",
        "amurl" : "https://mailhost.contoso.com:443/autodiscover/metadata/json/1"
    }
}

トークンをバックエンドのユーザーにマップする

バックエンド サービスはトークンから一意のユーザー ID を計算し、内部ユーザー システムのユーザーにマップできます。 たとえば、ユーザーの格納にデータベースを使用する場合は、この一意の ID をデータベース内のユーザーのレコードに追加できます。

一意の ID を生成する

msexchuidプロパティとamurlプロパティの組み合わせを使用します。 たとえば、2 つの値を連結して、Base64 でエンコードされた文字列を生成します。 この値は毎回トークンから確実に生成できるので、Exchange のユーザー ID トークンをシステム内のユーザーにマップできます。

ユーザーを確認する

次の手順では、生成された一意の ID を使用して、関連付けられた ID でシステム内のユーザーを確認します。

  • ユーザーが見つかった場合、バックエンドは要求を認証済みとして処理し、要求の続行を許可します。

  • ユーザーが見つからない場合、バックエンドはユーザーがサインインする必要があることを示すエラーを返します。 その後アドインは、既存の認証方法を使用してバックエンドにサインインするように求めるダイアログを表示します。 ユーザーが認証されると、Exchange のユーザー ID トークンとユーザー認証の詳細が送信されます。 バックエンドはシステム内のユーザーのレコードを一意の ID で更新できます。