如何从 Exchange 身份令牌获取用户名?

Tor*_*ger 5 outlook-addin office365api

我正在为 Office365/Outlook 编写一个插件。该插件在 Web 服务器上运行,该服务器提供来自第三方系统的信息。我需要确保它仅显示与登录的用户名(或电子邮件地址)相关的信息。我已使用 Microsoft 提供的 PHP 示例代码在我的服务器上成功发送并验证了 Exchange 身份令牌: https://dev .office.com/docs/add-ins/outlook/use-php-to-validate-an-identity-token

我的问题是身份令牌不包含任何用户名或电子邮件地址,我得到的最接近的是“msexchuid”,但我无法理解第三方系统中的数字用户标识符。

在客户端,加载项 javascript 可以通过“Office.context.mailbox.userProfile”获取用户名和电子邮件,但我不只是想将其转发到我的 Web 服务器,因为它可能是伪造的。

有没有办法让身份令牌包含用户名/电子邮件(那就太棒了!),或者是否可以从我的 Web 服务器的服务器端 PHP 脚本根据身份令牌查找更多用户详细信息?

Fei*_*SFT 1

id 令牌用于与第三方应用程序集成以进行 SSO。正如您提到的,它只包含 Exchange 的唯一 ID。

\n\n

作为解决方法,我们可以通过getCallbackTokenAsync方法获取回调令牌,其中直接包含 SMTP 地址。为了验证回调令牌,我们可以验证是否可以使用 EWS 获取项目信息。

\n\n

例如,回调令牌中有一个\xe2\x80\x98parentItemId\xe2\x80\x99。由于存在 JWT 令牌,因此从回调令牌中检索声明作为 id 令牌是相同的。您可以参考这里了解更多详细信息。

\n\n

然后我们可以使用下面的代码从EWS获取物品信息:

\n\n
   public bool Post([FromBody]EWSRequest request)\n   {\n        ExchangeService service = new ExchangeService();\n        service.Credentials = new OAuthCredentials(request.token);\n        service.Url = new Uri(request.ewsURL);\n\n        //get item id from callback token\n        var itemId = "";\n        Item item = Item.Bind(service, itemId);\n\n        var subject = item.Subject;\n        return subject.Length>0;\n   }\n\n   public class EWSRequest\n   {\n        public string token;\n        public string ewsURL;\n   }\n
Run Code Online (Sandbox Code Playgroud)\n\n

JavaScript :

\n\n
Office.context.mailbox.getCallbackTokenAsync(getCallbackTokenCallback)\n\nfunction getCallbackTokenCallback(asyncResult) {\n    var _token = asyncResult.value;\n    var _ewsURL = Office.context.mailbox.ewsUrl;\n\n    var serviceEndpoint = "https://localhost:44300/API/token/"\n\n    var postData={ token: _token, ewsURL: _ewsURL }\n    $.ajax({\n        url: serviceEndpoint,\n        type: "post",\n        contentType: "application/json",\n        data: JSON.stringify(postData),\n        success: function (result) {\n            var ret = result;\n        }\n    })\n}\n
Run Code Online (Sandbox Code Playgroud)\n