Javascript 同意流如何确定请求哪些资源?

Javascript 同意流如何确定请求哪些资源?,javascript,azure,azure-active-directory,msal,Javascript,Azure,Azure Active Directory,Msal,我有一个多租户服务主体,它公开了一个自定义API。使用MSAL.js的UserAgentApplication,我可以请求同意首次使用loginPopup时所需的资源。但是,我对在请求中指定哪些资源感到困惑。例如,假设我使用以下弹出窗口(注意缺少范围): 等待this.userAgentApplication.loginPopup({ 提示:“同意”, 权限:“https://login.microsoftonline.com/organizations" })如果您对资源使用管理员许可,这是

我有一个多租户服务主体,它公开了一个自定义API。使用MSAL.js的UserAgentApplication,我可以请求同意首次使用loginPopup时所需的资源。但是,我对在请求中指定哪些资源感到困惑。例如,假设我使用以下弹出窗口(注意缺少范围):

等待this.userAgentApplication.loginPopup({
提示:“同意”,
权限:“https://login.microsoftonline.com/organizations"

})
如果您对资源使用管理员许可,这是预期的行为

***/.default
设置为作用域时,相当于在Azure portal中执行“为{your tenant}授予管理员许可”

因此,它将要求管理员同意所有必需的权限,无论它们是否来自必需的资源

但是如果您设置
https://graph.microsoft.com/user.read
,它将要求您仅对
用户进行同意。请阅读
权限

因此,在本例中,一旦使用最后一个进行管理同意,
api://xyz/Some.Scope
也将生效

我还使用我的自定义API
API://***/.default
API://***/user进行了一次测试。编写
,两者都能正常工作

您还可以尝试使用以下请求进行管理员同意:

https://login.microsoftonline.com/jmaster.onmicrosoft.com/oauth2/v2.0/authorize?
client_id={client id}
&response_type=code
&redirect_uri={redirect url}
&response_mode=query
&scope=api://xyz/Some.Scope
&state=12345
&prompt=consent

请使用
api://***/.default
重试。如果它不起作用,不要担心,因为
api://xyz/Some.Scope
也将使用最后一个代码段生效。

您是否在应用程序注册中指定了任何必需的权限?您也可以尝试使用最后一个中的特定范围,而不是。默认值,因为它会触发v1。谢谢!您关于应用程序在使用.default时请求“完全”权限的论点对我很有意义。但是,当还涉及委派权限时(不仅仅是应用程序),请求自定义API的.default同意是否也会起作用?我尝试并得到以下错误:“应用程序[…]正在为自己请求令牌。仅当使用基于GUID的应用程序标识符指定资源时,才支持此方案。”更新:基于我意识到,在请求整个自定义API的管理员同意时,必须使用应用程序ID,而不是API://url。因此,在我的登录应用程序中,我必须提供作用域:[“xxxxxxxx-xxxx-xxxx-xxxx-xxxx/.default”],而不是作用域:[“api://”xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx/.default”]。