2016-06-17 2 views
1

Office365/Outlook 용 추가 기능을 작성하고 있습니다. 추가 기능은 타사 시스템의 정보를 제공하는 웹 서버에서 실행됩니다. 로그인 한 사용자 이름 (또는 전자 메일 주소)과 관련된 정보 만 제공하는지 확인해야합니다. Microsoft에서 제공하는 PHP 예제 코드를 사용하여 서버의 Exchange ID 토큰을 성공적으로 보내고 유효성을 검사했습니다. https://dev.office.com/docs/add-ins/outlook/use-php-to-validate-an-identity-tokenExchange ID 토큰에서 사용자 이름을 얻는 방법?

제 문제는 ID 토큰에 사용자 이름이나 전자 메일 주소가 포함되어 있지 않습니다. 가장 가까운 것은 "msexchuid"이지만 제 3 자 시스템에서 해당 숫자 사용자 식별자를 이해할 수 없습니다.

클라이언트 측에서 Add-in javascript는 "Office.context.mailbox.userProfile"을 통해 사용자 이름과 전자 메일을 가져올 수 있지만 위조 될 수 있으므로이를 웹 서버로 전달하고 싶지는 않습니다.

ID 토큰이 사용자 이름/전자 메일을 포함하도록 만들 수 있습니까 (대단 할 것입니다!) 또는 내 웹 서버의 서버 측 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의 홈 탭에서 열렸거나 첨부 파일이없는 경우 어떻게해야합니까? –

관련 문제