连接多个应用程序到单个Web API的Azure AD

4

我有一个使用asp.net core编写的Web API。该API将用于与AAD注册的几个其他服务通信,这些服务都可以使用不同的技术实现,如使用asp.net core编写的MVC应用程序或使用Vue.JS编写的单页应用程序。后者会导致问题,因为SPA不会由应用程序Web服务器运行,而是类似于nginx或apache,因此无法使用客户端密钥。

我已为我的应用程序添加了API权限。

我该如何实现呢?我目前正在从客户端应用程序向API发送使用Authorization:Bearer access_token标头的访问令牌,但由于客户端应用程序和API不是AAD中的同一应用程序,因此会出现问题。

这就是我尝试实现的流程: 图像描述所需的流程[1]

所有请求的应用程序都需要登录到AAD,并在从API请求数据时发送JWT令牌,然后应验证令牌并将所请求的资源返回给客户端应用程序。


如果您想了解如何访问由Azure AD提供的Web API,请参考示例(https://github.com/Azure-Samples/active-directory-dotnet-native-aspnetcore-v2/tree/master/1.%20Desktop%20app%20calls%20Web%20API)。 - user10182254
你想知道SAP如何访问API吗? - user10182254
@test123 是的,我知道如何操作。但问题在于当我想让SPA连接到API时,其他应用程序(比如注册为不同AAD应用程序的其他SPA)尝试连接到同一个API。 - Tarkan
关于SPA,您可以使用oauth2 implicit授权流程来访问Web API。有关更多详细信息,请参阅https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-implicit-grant-flow - user10182254
@test123 这是我已经做好的,但由于单页应用程序与常规流程不同,这种方法只允许我连接使用与Web API相同的AAD密钥的应用程序,而我无法这样做,因为我将连接多个不同的应用程序。 - Tarkan
显示剩余2条评论
1个回答

1

看起来你有些误解。你可以在Azure AD中将每个客户端注册为独立的应用程序,并为你的Web API分配访问权限。

后者会引起我的问题,因为SPA不会由应用程序Web服务器运行,而是类似于nginx或apache,因此无法使用客户端密钥。

SPA应用程序使用隐式授权流程,因此在获取令牌时不需要客户端密钥。SPA可以是独立的应用程序,您应该在与AAD进行身份验证时提供客户端ID。获取访问令牌后,您可以使用Authorization:Bearer access_token标头创建http请求以访问您的Web API。

每个客户端(Web / SPA / Native)都将获取访问令牌以访问Web API。在Web API端,您只需要验证令牌。验证声明(发行人,受众)和签名。


你说得对,我使用了 https://github.com/Azure-Samples/ms-identity-aspnet-webapi-onbehalfof 上的示例,成功地使一切都完美运行。谢谢。 - Tarkan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接