我有一个使用asp.net内核编写的Web。该API将用于与注册在AAD中的其他几个服务进行通信,所有这些服务都可以使用不同的技术来实现,比如用asp.net核心编写的MVC应用程序或用Vue.JS编写的单个页面应用程序。后者给我带来了问题,因为SPA不会由应用程序web服务器运行,而是使用nginx或apache之类的东西,因此无法使用客户端机密。
我将API的API权限添加到我的应用程序中。
我怎样才能做到这一点?目前,我正在使用Authorization: Bearer access_token
头从客户端应用程序向API发送访问令牌,但由于客户端应用程序和API在AAD中不是同一个应用程序,因此会导致问题。
这就是我想要达到的目标:
所有请求的应用程序都要求您登录到AAD,当从API请求数据时,它们将发送JWT令牌,然后在将请求的资源返回给客户端应用程序之前对令牌进行验证。
发布于 2019-08-28 23:32:47
你好像误解了什么。您可以在Azure AD中将您的每个客户端注册为独立的应用程序,并为您的web分配访问权限。
后者给我带来了问题,因为SPA不会由应用程序web服务器运行,而是类似于nginx或apache之类的东西,因此无法使用客户端机密。
SPA应用程序使用隐式赠予流,因此在获取令牌.SPA时不需要客户端机密,可以是独立的应用程序,在使用AAD进行身份验证时应提供客户端id。在获得访问令牌之后,您可以创建带有Authorization: Bearer access_token
头的http请求,用于访问web。
每个客户端( web /spa/本地)将获得访问web的访问令牌。在web方面,您只需要验证令牌.Validate声明(发行者、受众)和签名。
https://stackoverflow.com/questions/57691531
复制