0

我有一个 Azure 应用程序服务 X(其中发布了一个 ASP.NET Web api 项目),我通过高级身份验证(使用 Y 的客户端 ID)配置了 Y AAD 应用程序。现在我还有另一个 Z AAD 应用程序,我想在 POSTMAN 的 OAuth 2.0 流程中使用它。

问题是当我提供 Y 的客户端 ID 和资源 ID 作为 Y 的应用程序 ID URI 时,我得到“客户端正在为自己请求令牌”。为避免这种情况,我将资源 id 替换为 Application(client) id(GUID) 并且它可以找到。为什么?

此外,如果我使用 Z 的客户端 ID 和 Y 的资源 ID URI,它不起作用,但在我使用 GUI 时它起作用。那么为什么需要应用程序 id URI,如果我不能使用它又有什么意义呢?

4

1 回答 1

0

我想你可能误会了什么。让我们更具体一点。让我们稍微简化一下,您有 WebAPI A 和应用程序注册 A。您有一个客户端应用程序注册 B。

首先,您将 WebAPI A 设置为执行其需要的任何操作,例如,如果它需要访问图形,然后在 API 权限中,您授予它该访问权限。然后您可以使用应用程序密钥或用户流设置 WebAPI A 最后您要公开一个 API,这是应用程序 ID URI 的来源,这仅允许客户端 B 访问 webAPI A。您只能在 App Reg 中设置它答,您没有在 WebAPI 应用服务中输入任何与此相关的内容。您的 web api 中不需要资源 ID,除非您尝试访问其他 api,例如图形。

然后说您正在尝试让客户端 B 使用 webAPI,因此在您的应用程序注册 B 中,添加 API 权限 -> 我的 API -> 选择您之前创建的范围。然后在客户端 B 中,您可以在此处设置资源 ID,因为您需要获取有权访问 Web API 的令牌。

我希望这能为你澄清一点。这也是 webapi 流的简单客户端示例,由于您使用的是应用程序服务,因此它与您的不是 100% 相同,但它本质上是相同的。 https://github.com/Azure-Samples/ms-identity-javascript-angular-spa-aspnetcore-webapi

于 2020-06-02T01:42:21.517 回答