【发布时间】:2021-05-15 17:05:48
【问题描述】:
尝试在 Azure 中创建一个简单的 SPA 并调用一个 Rest API,我收到 InteractionRequiredAuthError: AADSTS65001: The user or administrator has not agreeed to use the application with ID 'xxx' named 'MySpaApp'。为此用户和资源发送交互式授权请求。
做了以下事情:
注册了 REST Api 应用 为 MyRestApi.Tasks.Get 添加了权限,它的状态是为我的用户授予 为 Tasks.Get 添加了范围 使用 SPA 应用程序的客户端 ID 添加了一个客户端应用程序
注册SPA应用 URI 是 http://localhost 隐式授权和混合流: 检查访问令牌 已检查 ID 令牌 支持的帐户类型:任何组织目录 API 权限,添加了 MyRestApi.Tasks.Get
在企业应用程序 MySpaApp 中,单击为我的用户授予管理员同意
返回 MySpaApp,并确认 Tasks.Get 已被授予
从 MySpaApp 中,如果我使用“Tasks.Get”调用 msal.acquireTokenSilent 作为范围,我会得到: 用户或管理员未同意使用名为“MySpApp”的 ID 为“xxx”的应用程序。为此用户和资源发送交互式授权请求。
如果我以“User.Read”为范围调用 msal.acquireTokenSilent,我会取回一个令牌。
关于故障排除的任何其他想法?
【问题讨论】:
-
您的
scope是否设置为:api://{api app client id}/Tasks.Get? -
所以我发现如果我在SPA注册中创建任意范围名称(暴露一个API),我可以通过在请求中指定该范围来获取令牌。但是,如果我尝试使用与 API 权限名称相同的名称创建范围(在公开 API 中),则会收到“重复值”错误。那么,在一个 App 中,你不能有一个与权限同名的范围??
-
好的,我想就是这样!谢谢!我在请求中使用了 SPA 客户端 ID,将其更改为 REST API 客户端 ID,它现在可以正常工作,或者至少更进一步。现在,当我调用 REST API 方法时,我正在处理 401。
-
你能问一个新问题吗?最好附上您的代码并将我链接到您的新问题。我会为你解决401问题。不要忘记解析您的访问令牌并将其附加到问题中。
-
谢谢,但我也解决了 401 问题。结果在自定义 REST API 的 appsettings.json 中,在“AzureAd”元素中,“ClientId”应该是 REST API 的 AppId。