2016-06-17 18 views
1

私はOffice365/Outlookのアドインを作成しています。アドインは、サードパーティシステムからの情報を表示するWebサーバー上で実行されます。ログインしたユーザー名(または電子メールアドレス)に関する情報のみを表示するようにする必要があります。マイクロソフトが提供するPHPサンプルコードを使用して、サーバー上でExchange IDトークンを正常に送信し、検証しました: https://dev.office.com/docs/add-ins/outlook/use-php-to-validate-an-identity-tokenExchange IDトークンからユーザー名を取得する方法は?

私の問題は、アイデンティティトークンにはユーザ名や電子メールアドレスが含まれていないことです。最も近いのは "msexchuid"ですが、サードパーティシステムの数値ユーザ識別子の意味を理解できません。

アドインのJavaScriptでは、「Office.context.mailbox.userProfile」を介してユーザー名と電子メールを取得できますが、偽装する可能性があるため、Webサーバーに転送するだけではありません。

アイデンティティトークンにユーザー名と電子メールが含まれているようにする方法がありますか?それとも、私のWebサーバーのサーバー側のPHPスクリプトからアイデンティティトークンに基づいたユーザーの詳細を参照できますか?

+0

グレート質問です。私たちはまた、明確な解決策を見つけるのにも苦労しています。 Exchange IDトークンがユーザーにサインインする予定の場合、そのユーザーは誰かわからないかのようにサインインする必要があります。 –

答えて

0

idトークンは、SSOのサードパーティアプリケーションとの統合を意図しています。あなたが言ったように、Exchangeの一意のIDだけが含まれています。

回避策として、直接SMTPアドレスを含むgetCallbackTokenAsyncメソッド経由でコールバックトークンから取得できます。また、コールバックトークンを検証するために、EWSでアイテム情報を取得できるかどうかを検証できます。

たとえば、コールバックトークンに 'parentItemId'があります。 JWTトークンがあるので、コールバックトークンからクレームをidトークンとして取り出すのと同じことです。詳細はhereを参照してください。

その後、我々は、EWSから商品情報を取得するために以下のコードを使用することができます:

public bool Post([FromBody]EWSRequest request) 
    { 
     ExchangeService service = new ExchangeService(); 
     service.Credentials = new OAuthCredentials(request.token); 
     service.Url = new Uri(request.ewsURL); 

     //get item id from callback token 
     var itemId = ""; 
     Item item = Item.Bind(service, itemId); 

     var subject = item.Subject; 
     return subject.Length>0; 
    } 

    public class EWSRequest 
    { 
     public string token; 
     public string ewsURL; 
    } 

JavarScript:

Office.context.mailbox.getCallbackTokenAsync(getCallbackTokenCallback) 

function getCallbackTokenCallback(asyncResult) { 
    var _token = asyncResult.value; 
    var _ewsURL = Office.context.mailbox.ewsUrl; 

    var serviceEndpoint = "https://localhost:44300/API/token/" 

    var postData={ token: _token, ewsURL: _ewsURL } 
    $.ajax({ 
     url: serviceEndpoint, 
     type: "post", 
     contentType: "application/json", 
     data: JSON.stringify(postData), 
     success: function (result) { 
      var ret = result; 
     } 
    }) 
} 
+0

私は、これがMicrosoftが説明しているExchange Identity Tokenプロセスとどう関係しているのかちょっと混乱しています。あなたはこのトークンを使用してユーザーを認証し、(SSO)ユーザーにこのアプローチを使用することができます。いいえ? –

+0

Fei Xueさんにお返事ありがとうございます。これは実際の環境でどのように機能しますか? Outlook 2016はポップアップブラウザウィンドウとOutlookアドインがiframe内にあるため、oAuth MicrosoftまたはAzure SAMLを使用してユーザーを認証する唯一の方法は、Outlook APIを通じて情報を提供することです。しかし、上記の例では、ユーザーが添付ファイルを持っていることを前提としています。このアドオンをOutlookの[ホーム]タブから開いた場合、または添付ファイルがない場合はどうなりますか? –

関連する問題