azure-active-directory - 获取 Azure AD V2 端点的访问令牌时如何指定资源 URI?
问题描述
我在之前的项目中使用了 ADAL.js,该项目仅支持工作帐户,并且能够成功获取 idtokens,然后访问 APIs(ResourceURI:“ https://myresource.com ”)。工作正常。
现在,我正在尝试将 MSAL.js 用于另一个项目,因为我需要同时支持工作帐户(aad auth)和个人“Microsoft 帐户”(MSA)。我现在正在尝试做与我的 ADAL 项目相同的事情时遇到问题。
“资源”的概念似乎从 AAD V2 中消失了。那么在获取目标 API 的访问令牌时如何指定 Resource url?这样生成的访问令牌包含 AUD 声明中的 ResourceURI(这将由我正在调用的 API 强制执行)。
如果我强制添加资源查询字符串参数,因此:
msalapp.acquireTokenSilent([], null, null, "resource=https%3A%2F%2Fmyresource.com")
我收到以下错误:
AADSTS901002: The 'resource' request parameter is not supported.
文档说改用 SCOPE 。但是使用:
msalapp.acquireTokenSilent(['https://myresource.com'])
结果是:
AADSTS70011: The provided value for the input parameter 'scope' is not valid. The scope https://myresource.com openid profile is not valid. The scope format is invalid. Scope must be in a valid URI form <https://example/scope> or a valid Guid <guid/scope>..
那么:通过 MSAL.js 使用 v2 端点时,如何在获取访问令牌时指定资源 URI?抱歉(通常相当不错)MSDN 文章在这种情况下根本没有用......
解决方案
在 Azure AD v2.0 中,您需要使用范围,而不是资源。
如果您有资源,并且想要获得所有权限的令牌,您可以使用 :
https://myresource.com/.default
。
您也可以更细粒度:更多信息可从https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/Adal-to-Msal#scopes-for-a-v10-application(这是在 C# 中,但翻译很简单)
推荐阅读
- swagger - 我可以为 Clockify 自动生成 API 客户端吗?
- extjs4 - ExtJs4 单元格编辑 - 在保存到存储之前修改编辑值
- elasticsearch - Elasticsearch 无法识别 yyyyMMddHHmmssS 日期
- xml - “xsl:copy-of”和“xsl:sequence”有什么区别?
- android - 在某些 Android 设备中,Cordova 不会根据请求发送来源
- reactjs - 如何防止所有路由中的组件渲染?
- javascript - 如何从非捕获组中获取所有不匹配的文本部分
- datetime - 根据当前语言格式化日期时间
- android - Android Studio 3.4 Android Wear SDK 22
- api - 如何将任何 API 密钥添加到 Flutter 应用程序中