我有一个SPA,使用msal.js针对在Application Registration Portal注册的应用对用户进行身份验证。它成功地检索了一个令牌,到目前为止一切都很好。
然后我有一个ASP.NET Web API设置,它应该使用SPA中的令牌代表用户向Microsoft Graph发出请求,这就是我遇到麻烦的地方。
到目前为止,我已经在API上设置了一个OWIN中间件,它应该在向图表发出请求之前验证令牌,但无论我尝试什么,它总是无效的。我已经尝试UseOpenIdConnectAuthentication
,UseOAuthBearerAuthentication
和UseJwtBearerAuthentication
,但仍然没有成功。 SPA和API使用相同的客户端ID,发行者设置为https://login.microsoftonline.com/common/v2.0
。
我已经阅读了很多来自MS的SO问题和样本,但似乎没有解决这个特定的设置。根据{{3}}我至少认为这是可能的吗?
以下是我正在使用的nuget包:
<package id="Owin" version="1.0" targetFramework="net452" />
<package id="Microsoft.Owin" version="3.1.0" targetFramework="net452" />
<package id="Microsoft.Owin.Security" version="3.1.0" targetFramework="net452" />
<package id="Microsoft.Owin.Security.Jwt" version="3.1.0" targetFramework="net452" />
<package id="Microsoft.Owin.Security.OAuth" version="3.1.0" targetFramework="net452" />
<package id="Microsoft.Owin.Security.OpenIdConnect" version="3.1.0" targetFramework="net452" />
我是否使用了正确的包装,是否可以通过这种方式进行设置?我会喜欢关于我做错事的一些指示。
提前致谢!
答案 0 :(得分:1)
这个问题正是通过&#34; OAuth 2 On-Behalf-Of flow&#34;来解决的。这是针对AAD V2应用程序模型here记录的。
OAuth 2.0 On-Behalf-Of流程提供了一个用例 应用程序调用服务/ Web API,而后者又需要调用 另一个服务/ Web API。我们的想法是传播委派的用户 通过请求链的身份和权限。为了 中间层服务,以向下游发出经过身份验证的请求 服务,它需要从Azure Active保护访问令牌 目录(Azure AD),代表用户。