【发布时间】:2020-08-03 03:54:30
【问题描述】:
我有一个公开自定义 API 的多租户服务主体。使用 MSAL.js 的 UserAgentApplication,我可以在首次使用 loginPopup 时征求我的同意。但是,我对在请求中指定哪些资源感到困惑。例如,假设我使用以下弹出窗口(注意缺少范围):
await this.userAgentApplication.loginPopup({
prompt: 'consent',
authority: "https://login.microsoftonline.com/organizations"
})
应用程序只会请求用户的个人资料。很公平。
但是,假设我将弹出窗口配置如下:
await this.userAgentApplication.loginPopup({
scopes: ["api://xyz/Some.Scope"]
prompt: "consent"
authority: "https://login.microsoftonline.com/organizations"
})
这会导致异常:
用户或管理员未同意使用 ID 为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx”、名为“XYZ”的应用程序。为此用户和资源发送交互式授权请求。
为什么我在使用全局管理员帐户登录时仍会收到此错误?
最后,除了我们自己的 API 数据之外,我们还需要能够在应用程序上下文中读取图形组,因此我使用 .default 端点请求了这些(权限在服务主体注册中指定)。我使用以下弹出窗口做到了这一点:
await this.userAgentApplication.loginPopup({
scopes: ["https://graph.microsoft.com/.default"],
prompt: 'consent',
authority: "https://login.microsoftonline.com/organizations"
})
最后一次尝试的结果是……我希望的所有权限!
登录并阅读用户资料
读写所有组
我的自定义 API 范围(应用程序名称)
但为什么我们的 Graph 同意请求会自动包含对其他自定义范围的请求?
【问题讨论】:
-
您是否在应用注册中指定了任何必需的权限?
-
您也可以尝试使用最后一个中的特定范围而不是 .default,因为它会触发 v1 行为
标签: javascript azure azure-active-directory msal