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 脚本根据身份令牌查找更多用户详细信息?
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\nJavaScript :
\n\nOffice.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
归档时间: |
|
查看次数: |
2304 次 |
最近记录: |