2

我正在通过调整这个 .net core asp-net-core 模板(https://github.com/TrilonIO/aspnetcore-Vue-starter/blob/master/content/Vue2Spa.sln)来模拟 SPA(单页应用程序)

我能够使用 MSAL for microsoft graph 对用户进行身份验证。

如何将我用于 Microsoft 图形的相同令牌用于我的 API(同一个项目,不需要 CORS)。

我尝试的一切都失败了。

StartUp 应该是什么样的?我不想要任何 cookie 身份验证,我已经准备好将 AccessToken 作为 JWT 令牌传递。?

我想在我的 API 控制器中使用 [Authorize]。

SPA --> 获取令牌(它基于我的 clientId 等),通过 AJAX 调用将令牌“Bearer eyJ0eXAiO ....”传递给我的 api 控制器。

4

3 回答 3

1

我能够使用我用 MSAL 库创建的 ID 令牌来做到这一点。

Javascript:返回 myMSALObj.loginPopup(requestObj).then(function (loginResponse) { loginResponse.Token});

然后,您可以获取该令牌并将其传递给 API。

在 StartUp.cs

       public void ConfigureServices(IServiceCollection services)
       {
       services.AddAuthentication(options =>
       {
       options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
       options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
       }).AddJwtBearer(options =>
       {
       options.Authority = "https://sts.windows.net/tenantId/v2.0";
       options.Audience = clientId;
       options.TokenValidationParameters.ValidateLifetime = true;
       });

       services.AddAuthorization();

       // Add framework services.
       services.AddMvc()
       .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
       }```
于 2019-06-28T06:46:24.520 回答
0

与 ADAL 相比,我对 MSAL 了解不多,但我相信其中一个区别是 Azure 端点。现在改为版本 2。根据 Microsoft 的建议,在针对 Azure AD 对用户进行身份验证时,建议的方法是使用 oauth 2.0 隐式流。更多信息可以在这里找到。

获取 Microsoft Graph 令牌的步骤涉及一些时间配置。你应该在 Azure 应用注册中注册你的前端和 API 在前端应用中,你启用隐式流,你给它一些与图形 api 交互的权限。这是使用现有令牌获取 Microsoft Graph 的另一个令牌所必需的。(您可以对任何其他 API 执行相同的操作,例如 CRM API、Sharepoint API)

配置完成后,您需要做的就是向https://graph.microsoft.com发出另一个发布请求(您必须在请求标头中包含之前检索到的 JWT 令牌)以获取令牌。根据您向前端授予权限的方式,令牌可以在您在应用注册中设置的给定范围内使用。

您可能想知道为什么要使用隐式流?这是因为每次您的前端应用程序向后端 API 发送请求时,您在登录时检索到的 JWT 令牌都可用于针对您的 API 进行身份验证。这样,只有您的前端可以调用 api。

于 2019-06-28T01:30:03.150 回答
0

您将无法使用为 Microsoft Graph API 获取的令牌来调用您的 API。

您获取的令牌对特定资源有效,可以通过aud声明值(即受众)来识别。您可以在此处阅读有关aud声明以及它如何指定令牌的预期接收者的更多信息 - Microsoft 标识平台访问令牌

如果您使用https://jwt.mshttps://jwt.io解码您当前的不记名令牌,您将看到您的 Microsoft Graph API 令牌将拥有这样的受众,https://graph.microsoft.com因此它并不真正适用于您的应用程序。

您需要为您的 api 显式获取令牌。

您可以在此处找到用于单页应用程序的Microsoft 身份平台代码示例(v2.0 端点)的详细代码示例。看看这个 SPA 调用它自己的 api -带有 ASP.NET 后端的 JavaScript 单页应用程序,使用 msal.js。这个使用 clientid 本身作为范围。

这是另一个(不是 SPA),但显示了如何定义自定义 api 范围,然后在 API 和客户端应用程序分开的情况下从客户端使用它们 -使用 Azure AD 从 WPF 应用程序调用 ASP.NET Core Web API V2。您可以从Expose an APIAzure 门户中应用注册下的部分执行此操作。

于 2019-06-28T00:34:12.767 回答