使用SPA对Microsoft Graph进行身份验证,然后在Web API中使用令牌

时间:2017-08-03 15:09:48

标签: javascript c# asp.net-web-api2 microsoft-graph msal

我有一个SPA,使用msal.js针对在Application Registration Portal注册的应用对用户进行身份验证。它成功地检索了一个令牌,到目前为止一切都很好。

然后我有一个ASP.NET Web API设置,它应该使用SPA中的令牌代表用户向Microsoft Graph发出请求,这就是我遇到麻烦的地方。

到目前为止,我已经在API上设置了一个OWIN中间件,它应该在向图表发出请求之前验证令牌,但无论我尝试什么,它总是无效的。我已经尝试UseOpenIdConnectAuthenticationUseOAuthBearerAuthenticationUseJwtBearerAuthentication,但仍然没有成功。 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" />

我是否使用了正确的包装,是否可以通过这种方式进行设置?我会喜欢关于我做错事的一些指示。

提前致谢!

1 个答案:

答案 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),代表用户。