2015-10-05 13 views
2

Outlook API使用Office.context.mailbox.getUserIdentityTokenAsync(callback, userContext);https://msdn.microsoft.com/en-us/library/office/fp142236.aspx)返回「身份標記」。我試圖從base-64 URL編碼字符串中獲取JSON。如何在JSON中獲取Exchange標識符號?

到目前爲止,我已經嘗試過的代碼樣本從這個網址:https://msdn.microsoft.com/en-us/library/f7f4813a-3b2d-47bb-bf93-71b64620a56b

的Javascript:

Office.context.mailbox.getUserIdentityTokenAsync(function (data) { 
    $.ajax({ 
     type: "POST", 
     url: "/api/exchange/createAndValidateIdentityToken", 
     contentType: 'application/json', 
     data: JSON.stringify({ userIdentityToken: data.value }) 
    }) 
    .done(function (data) { 
     console.log(data); 
    }) 
    .fail(function (data) { 
     console.log(data); 
    }); 
}); 

C#:

[HttpPost] 
    public AppIdentityToken CreateAndValidateIdentityToken(JObject data) 
    { 
     JToken userIdentityToken = data.GetValue("userIdentityToken"); 
     string rawToken = userIdentityToken.Value<string>(); 

     try 
     { 
      AppIdentityToken token = (AppIdentityToken)AuthToken.Parse(rawToken); 
      token.Validate(new Uri("https://**url**/ews/exchange.asmx")); 

      return token; 
     } 
     catch (TokenValidationException ex) 
     { 
      throw new ApplicationException("A client identity token validation error occurred.", ex); 
     } 

    } 

AuthToken.Parse返回AppIdentityToken充滿了例外,我不'不懂爲什麼:

Error IdentityToken

注1:錯誤是部分在法國:「一個LEVE UNE例外德式」 =「已經提出了類型的異常」。

注2:身份令牌格式解碼時:https://msdn.microsoft.com/en-us/library/fp179838.aspx

+2

如果在調用Validate方法之前訪問令牌成員,則會調用這些異常。如果在調用Validate方法後檢查該標記,會發生什麼情況? – dbugger

+0

當我從'token.Validate'行跳轉時,它進入'catch'行:「發生了客戶端身份令牌驗證錯誤。」 InnerException:「受衆URI驗證失敗,受衆羣體不匹配。」我猜這個URI是錯誤的,那麼他們在尋找什麼URI?文檔上的內容很不清楚。 – Elfayer

+0

這是一個驗證錯誤。看起來像提供的URI和期望的URI不匹配。 – dbugger

回答

3

我終於找到了尋找了一整天后的溶液。下面是導致我的解決方案來源:

此鏈接說,在InvalidTokenAudienceException的情況下:

包含在URL傳遞到validate(拋出的異常)的AppIdentityToken對象的 方法不匹配受衆 在客戶端身份令牌中指定的參數。https://msdn.microsoft.com/en-us/library/microsoft.exchange.webservices.auth.validation(v=exchg.80).aspx

在JSON身份令牌,有一個aud屬性,需要一個HTML文件,並且:

如果它是從添加 - 發送令牌僅是指有效即在 客戶端的瀏覽器中運行。 如果外接使用Office加載項體現 架構1.1版,此URL或第一SourceLocation 元素指定的URL,在表單類型ItemRead ItemEdithttps://msdn.microsoft.com/en-us/library/fp179838.aspx

以下代碼適用於我:

[HttpPost] 
public AppIdentityToken CreateAndValidateIdentityToken(JObject data) 
    { 
     JToken userIdentityToken = data.GetValue("userIdentityToken"); 
     string rawToken = userIdentityToken.Value<string>(); 

     try 
     { 
      AppIdentityToken token = (AppIdentityToken)AuthToken.Parse(rawToken); 
      token.Validate(new Uri("https://localhost:44300/AppRead/Home/Home.html")); 

      return token; 
     } 
     catch (TokenValidationException ex) 
     { 
      throw new ApplicationException("A client identity token validation error occurred.", ex); 
     } 

    } 
相關問題