我正在通过改编这个.net核心asp-net-core模板(https://github.com/TrilonIO/aspnetcore-Vue-starter/blob/master/content/Vue2Spa.sln)来模拟一个SPA (单页应用程序)。
我能够使用MSAL for microsoft graph对用户进行身份验证。
如何在API中使用与Microsoft graph相同令牌(相同的项目,不需要CORS )。
我试过的每件事都失败了。
StartUp应该是什么样子的?
我想在我的API控制器中使用Authorize。
SPA -->获取令牌(它基于我的clientId等),传递令牌'Bearer eyJ0eXAiO...‘通过AJAX调用我的api控制器。
发布于 2019-06-28 14:46:25
我可以使用我使用MSAL库创建的ID令牌来完成此操作。
Javascript:myMSALObj.loginPopup(requestObj).then(function (loginResponse.Token){ 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-28 08:34:13
您将无法使用为Microsoft Graph API获取的令牌来调用您的API。
您获取的Token对特定资源有效,可以通过aud声明值(即audience)来标识。您可以在此处阅读有关aud声明以及如何指定令牌的预期收件人的更多信息- Microsoft identity platform access tokens
如果您使用https://jwt.ms或https://jwt.io解码当前的持有者令牌,您将看到您的Microsoft Graph API令牌将拥有像https://graph.microsoft.com这样的受众,因此它实际上并不适用于您的应用程序。
您需要为您的api显式获取一个令牌。
您可以在单页应用程序的Microsoft Identity Platform Code Samples (v2.0 endpoint)中找到详细的代码示例。看一下这个调用它自己的api - JavaScript Single Page Application with an ASP.NET backend, using msal.js的SPA。这里使用clientid本身作为作用域。
这里是另一个(不是SPA),但展示了如何定义您的自定义api作用域,然后在API和客户端应用程序分离的情况下从客户端使用它们- Calling an ASP.NET Core Web API from a WPF application using Azure AD V2。你可以在Azure门户中你的应用注册下的Expose an API部分这样做。
发布于 2019-06-28 09:30:03
与ADAL相比,我对MSAL了解不多,但我相信一个不同之处是Azure端点。它现在改为版本2。正如Microsoft推荐的,在根据Azure AD对用户进行身份验证时,建议的方法是使用oauth 2.0隐式流。更多信息可以在here上找到。
获取Microsoft Graph令牌的步骤涉及一些时间配置。你应该在Azure应用程序中注册你的前端和api,在前端应用程序中注册,你启用隐式流,你给它一些与图形API交互的权限。这是使用现有令牌获取Microsoft Graph的另一个令牌所必需的。(您也可以对任何其他API执行相同的操作,例如。CRM API、Sharepoint API)
完成此配置后,您所需要做的就是向https://graph.microsoft.com发出另一个post请求(必须在请求头部中包含前面检索到的JWT令牌),以获取令牌。根据您向前端授予权限的方式,令牌可以在您在应用程序注册中设置的给定范围内使用。
你可能想知道为什么要使用隐式流?这是因为每次您的前端应用程序向后端API发送请求时,您在登录时检索到的JWT令牌可用于针对您的API进行身份验证。这样,只有您的前端可以调用api。
https://stackoverflow.com/questions/56799487
复制相似问题