首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Azure ActiveDir oAuth2.0JWT令牌的核心WebApi身份验证

使用Azure ActiveDir oAuth2.0JWT令牌的核心WebApi身份验证
EN

Stack Overflow用户
提问于 2019-06-28 07:33:56
回答 3查看 956关注 0票数 2

我正在通过改编这个.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控制器。

EN

回答 3

Stack Overflow用户

发布于 2019-06-28 14:46:25

我可以使用我使用MSAL库创建的ID令牌来完成此操作。

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

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

在StartUp.cs中

代码语言:javascript
复制
       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);
       }```
票数 1
EN

Stack Overflow用户

发布于 2019-06-28 08:34:13

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

您获取的Token对特定资源有效,可以通过aud声明值(即audience)来标识。您可以在此处阅读有关aud声明以及如何指定令牌的预期收件人的更多信息- Microsoft identity platform access tokens

如果您使用https://jwt.mshttps://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部分这样做。

票数 0
EN

Stack Overflow用户

发布于 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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56799487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档