azure - 在 Outlook Web 加载项中使用身份验证代码流获取访问令牌
问题描述
经过我所有的研究和阅读 Microsoft 文档后,我无法得出结论如何使用 Outlook Web 插件中的身份验证代码流生成访问令牌。在 Dialog API 的帮助下,我可以使用隐式授权流成功生成访问令牌,它只是打开 URL,我们从地址栏中读取访问令牌。
为了更安全,我正在尝试使用身份验证代码流在 azure 中使用注册的应用程序生成图形 API/(自定义 SharePoint 网站)的访问令牌。
Azure 应用设置:在 Microsoft Graph 下添加了 API 权限。[User.Read, Sites.Read.All] 重定向 Web URI:myapp/Auth_Result 重定向 SPA URI:myapp/Auth_Result_SPA
Outlook Web 加载项中的代码:
使用 Dialog API 我打开重定向到的 myapp/Auth 页面
https://login.microsoftonline.com/<Tenant ID>/oauth2/v2.0/authorize
?client_id=<Client ID>
&response_type=code
&redirect_uri=https%3A%2F%2Flocalhost%3A44333%2FAuth_result.html
&response_mode=query&scope=https%3A%2F%2Fgraph.microsoft.com%2Fuser.read
&state=12345
上面的 URL 在读取的重定向页面 myapp/Auth_result 中生成授权码。
Auth_Result 页面中的代码
function GetAccessToken(authCode) {
try {
var url = 'https://login.microsoftonline.com/<Tenant ID>/oauth2/v2.0/token';
var params = 'client_id=<Client ID>&scope=https%3A%2F%2Fgraph.microsoft.com%2Fuser.read&code=' + authCode + '&redirect_uri=https://localhost:44333/Auth_Result_SPA.html&grant_type=authorization_code';
var xhr = new XMLHttpRequest();
xhr.open('POST', url);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function (result) {
AccessTokenCallback(result);
}
xhr.send(params);
}
catch{ }
}
上述请求失败
Access to XMLHttpRequest at 'https://login.microsoftonline.com/<Tenant ID>/oauth2/v2.0/token' from origin 'https://localhost:44333' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
MessageRead.js:780 POST https://login.microsoftonline.com/<Tenant ID>/oauth2/v2.0/token net::ERR_FAILED
清单中的应用程序域
<AppDomain>https://login.microsoftonline.com/<Tenant ID>/oauth2/v2.0/token</AppDomain>
<AppDomain>https://login.microsoftonline.com</AppDomain>
<AppDomain>https://localhost:44333</AppDomain>
<AppDomain>https://localhost:44333/Auth</AppDomain>
<AppDomain>https://localhost:44333/Auth_Result</AppDomain>
<AppDomain>https://localhost:44333/Auth_Result_SPA</AppDomain>
<AppDomain>https://graph.microsoft.com</AppDomain>
我不确定我错过了什么?现在我质疑是否可以在 Outlook Web 插件中使用身份验证代码流?
伙计们,任何建议都会有所帮助。
谢谢
------编辑-------------
我尝试使用重定向 URI 作为 Web 平台的上述解决方案。
如果我在 azure app Authentication 中使用 SPA 平台重定向 URI,则会收到以下错误:
由于某种原因,图像没有出现。错误文本:
AADSTS9002325:跨域授权代码兑换需要代码交换证明密钥。
[![enter image description here][1]][1]
解决方案
感谢您的回复,我设法使用身份验证代码流生成访问令牌。事实证明,我没有提供代码质询,也没有完全理解身份验证流程,尤其是对于 Outlook Web 加载项。
解决方案在这里。使此解决方案起作用的要求。
- 替换:<Tenant ID> = Azure App 注册中的租户 ID
- 替换:<Client ID> = Azure 应用注册中的客户端 ID
- 在 Authentication-> SPA 平台中将 https://localhost:44300/Auth_Result_SPA 设置为您的重定向 URI。
- 根据您的要求设置范围,并确保在 Azure 中注册应用程序后在 API 权限中添加范围。
- 在 Visual Studio 中加载项目时,请确保应用程序 url 匹配。app url = TestGraphWeb 项目属性中的 SSL URL
参考文献:
这是示例 Outlook Web 加载项,应用程序名称为“TestGraph”。当应用程序在任务窗格中加载时,它将使用 Auth 代码流静默生成访问令牌。如果需要用户操作来生成验证码,此应用程序将弹出对话框。生成访问令牌后,它将仅加载带有“刷新访问令牌”按钮的页面,该按钮将生成新的访问令牌和刷新令牌。
推荐阅读
- windows - MongoDb 连接初始化和查询很慢,同时使用 Electron
- java - 如何在 OSX 上启动时运行多个 gradle bootRun?
- vba - 抄送收件人不会更新,无需检查姓名,回复所有
- javascript - 为什么`then`甚至存在,什么时候应该使用它?
- python - MCQ 类型字符串的正则表达式
- javascript - 如何使用 Javascript 过滤 XML 变量
- java - 无法将 Jackson 与 Immutables 一起使用反序列化:unrecog
- python - 如何使用 Ansible 在 virtualenv 上安装 python 包?
- arrays - 从 HIVE 中的数组和结构表中选择插入
- c# - 循环枚举为空