带有 JWT Bearer 令牌和 ASP.NET Core 2 WebApi 的 Azure AD 用户信息

     2023-03-08     240

关键词:

【中文标题】带有 JWT Bearer 令牌和 ASP.NET Core 2 WebApi 的 Azure AD 用户信息【英文标题】:Azure AD User info with JWT Bearer token and ASP.NET Core 2 WebApi 【发布时间】:2018-03-15 12:32:49 【问题描述】:

我找到了一个tutorial,我可以在其中使用 Azure AD 凭据登录我的应用程序。

在我的前端中,我使用的是 Xamarin.Forms。 在我的后端,我使用 ASP.NET Core 2.0 WebApi

后端:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    
        if (env.IsDevelopment())
        
            app.UseDeveloperExceptionPage();
        

        app.UseAuthentication();

        app.UseMvc();
    

public void ConfigureServices(IServiceCollection services)
    
        services.AddMvc();

        services.AddAuthentication(o =>
        
            o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        ).AddJwtBearer(options =>
        
            options.Authority = String.Format(Configuration["AzureAd:AadInstance"], Configuration["AzureAD:Tenant"]);
            options.Audience = Configuration["AzureAd:Audience"];
        );
    

这很简单。

在我的前端,我正在填写我的凭据并要求一个 access_token。


"token_type": "Bearer",
"scope": "user_impersonation",
"expires_in": "3600",
"ext_expires_in": "0",
"expires_on": "1507104075",
"not_before": "1507100175",
"resource": "my_resource",
"access_token": "my_access_token",
"refresh_token": "my_refresh_token"

我用bearer my_access_token 设置的Authorization 填写标题。

我的 Api 知道我的所有信息,因为它会自动使用我的 access_token 中的信息设置声明。此信息由 Azure AD 提供。 (全名,名,姓,...)

但是如何在我的前端获取这些信息?

【问题讨论】:

【参考方案1】:

您可能想查看 GitHub 上的 active-directory-dotnet-native-desktop 示例。

我展示了如何在桌面应用程序中使用 ADAL.NET 来获取服务令牌。您需要针对您的 Xamarin 表单客户端进行调整,但就身份验证而言,原理是相同的。 它还包含一个服务,您可以用自己的服务替换它,并通过将资源 ID 更改为使用 ASP.NET 向导创建的应用程序之一来获取 Web API 的令牌(您可以在 Azure 中找到它)示例的 readme.md 中描述的门户)

这个想法是您首先使用 ADAL.Net line 92 of TodoListClient/MainWindow.xaml.cs 获得一个令牌

result = await authContext.AcquireTokenAsync(todoListResourceId, clientId, redirectUri, ...)

然后您将其用作不记名令牌line 121

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);

【讨论】:

【参考方案2】:

如果您需要的所有信息都包含在访问令牌中,您只需在客户端解码访问令牌即可。访问令牌是一个 JWT,很容易研究代码示例来解码访问令牌,如下线程:

How to decode JWT Token?

Decoding and verifying JWT token using System.IdentityModel.Tokens.Jwt

如果您还需要更多用户信息,您可以刷新 Microsoft Graph 的访问令牌,并调用 Microsoft Graph 的me 端点(参考here)。以下是关于如何通过刷新令牌刷新访问令牌的文档:

Refreshing the access tokens

【讨论】:

从 ASP.NET vNext beta5 移动到 beta7 后 JWT Bearer 令牌身份验证错误

】从ASP.NETvNextbeta5移动到beta7后JWTBearer令牌身份验证错误【英文标题】:JWTBearertokenauthenticationerroraftermovingfromASP.NETvNextbeta5tobeta7【发布时间】:2015-12-1511:06:02【问题描述】:我从beta5迁移到beta7ASP.NETvNext,当我尝试使用无效的JWT令... 查看详情

带有 ASP.NET Identity 3 的 JWT 不记名令牌

】带有ASP.NETIdentity3的JWT不记名令牌【英文标题】:JWTbearertokensw/ASP.NETIdentity3【发布时间】:2016-03-0601:07:45【问题描述】:基于ShaunLuttin在https://***.com/a/30857524的出色示例,我能够使用该代码来生成和使用不记名令牌。小改动是为... 查看详情

ASP.NET Core JWT 和声明

...牌时,我添加了一些声明,其中一些可以是自定义的。当带有JWT令牌的请求从客户端发送到API时会发生什么。User.Claims如何填写 查看详情

Asp.Net Core、JWT 和 OpenIdConnectServer

...大量误解而流血工作后,我陷入了困境。我的任务是制作带有两个控制器(受保护和不受保护)的WebApi服务器。我应该从服务器授予令牌并能够获得受保护 查看详情

ASP.Net Core 3.0 JWT Bearer Token 没有 SecurityTokenValidator 可用

】ASP.NetCore3.0JWTBearerToken没有SecurityTokenValidator可用【英文标题】:ASP.NetCore3.0JWTBearerTokenNoSecurityTokenValidatoravailable【发布时间】:2019-10-1820:26:59【问题描述】:我使用ASP.NetCore3.0API和EntityFrameworkCore作为UserStorage。启动.cs:publi 查看详情

将 JWT Bearer Authentication Web API 与 Asp.Net Core 2.0 结合使用的问题

...布时间】:2018-07-1419:57:46【问题描述】:我有以下设置:带有JWT不记名身份验证的WebAPIAsp.NetCore2.0MVC处理身份并提供视图AngularJS-客户 查看详情

ASP.NET Core 和 JWT 令牌生命周期

】ASP.NETCore和JWT令牌生命周期【英文标题】:ASP.NETCoreandJWTtokenlifetime【发布时间】:2018-12-2301:11:43【问题描述】:我使用ASP.NETCore2.1.1有趣的是,只有在bothClockSkew-在Startup.csand中才考虑过期时间JwtSecurityTokenHandler.TokenLifetimeInMinutes-... 查看详情

使用 JWT Bearer 令牌进行身份验证 Swagger

...时间】:2018-08-2900:21:57【问题描述】:我们正在开发一个带有JWTBearer身份验证的.NetCore2.1WebAPI。应用程序本身将生成并分发要发送到后端的令牌。虽然我们已经启动并运行了所有内容,即我们可以从Angular发送不记名令牌并使用Pos... 查看详情

如何更改 asp.net core 1 中的令牌响应?

...义属性......结果如下:resource":"resource_server_1","token_type":"bearer","a 查看详情

如何自定义 ASP .NET Web API JWT 令牌响应?

...【发布时间】:2021-01-2818:17:13【问题描述】:我正在使用带有WebAPI的Asp.netWebform项目。我配置了基于JWT令牌的身份验证,现在我想自定义身份验证响应这是我的配置,Startup.cspublicclassStartuppublicvoidConf 查看详情

asp.net 核心中的 jwt 令牌无效

】asp.net核心中的jwt令牌无效【英文标题】:InvalidjwtTokeninasp.netcore【发布时间】:2020-11-1919:09:06【问题描述】:我正在尝试在我的Angular应用程序和ASP.net核心中使用JWT。对于初学者,我使用“邮递员”来测试我的端点。在我的API... 查看详情

使用 ASP.NET 标识和 JWT 令牌的 Azure 函数身份验证

】使用ASP.NET标识和JWT令牌的Azure函数身份验证【英文标题】:AzurefunctionsauthenticationwithASP.NETIdentityandJWTtoken【发布时间】:2018-07-2021:26:30【问题描述】:我正在开发一个新的开发堆栈,我计划使用Azurefunctions实现无服务器。我认为... 查看详情

使用 JWT 令牌的 ASP.NET Core 网站到 WebApi 身份验证

...它。我网站中的AccountController调用另一个ASP.NETCoreWebApi(带有[AllowAnonym 查看详情

使用 ADFS 的 JWT Bearer 身份验证将 ASP.NET Framework 迁移到 ASP.NET Core 3.1

】使用ADFS的JWTBearer身份验证将ASP.NETFramework迁移到ASP.NETCore3.1【英文标题】:MigrateASP.NETFrameworktoASP.NETCore3.1withJWTBearerauthenticationfromADFS【发布时间】:2020-05-2522:31:21【问题描述】:ASP.NET框架我们有一个现有的ASP.NETFramework网站,它... 查看详情

ASP.NET Core 中的 Jwt 令牌身份验证

】ASP.NETCore中的Jwt令牌身份验证【英文标题】:JwttokenauthenticationinASP.NETCore【发布时间】:2021-12-1711:55:34【问题描述】:我正在构建一个ASP.NETCoreWeb应用程序和Angular,我想使用基于令牌的身份验证来保护它。我对身份验证机制相... 查看详情

ASP.net Core 2.0 JWT 令牌刷新

】ASP.netCore2.0JWT令牌刷新【英文标题】:ASP.netCore2.0JWTTokenRefresh【发布时间】:2018-03-3007:54:24【问题描述】:我已经实现了JWTBearerAuth和IdentityCookieAuth,一个用于UI,另一个用于.NETCore2.0项目中的RESTAPI。到目前为止,一切都适用于JW... 查看详情

通过 Auth0 React 和 ASP.net 核心授权然后使用 JWT 令牌

】通过Auth0React和ASP.net核心授权然后使用JWT令牌【英文标题】:AuthorizingandthenusingJWTTokenwithAuth0React&ASP.netcore【发布时间】:2020-04-2822:04:59【问题描述】:我正在构建一个反应应用程序,使用Auth0作为我的oauth身份验证并使用ASP.N... 查看详情

我们可以在 Asp.NET Core 中销毁/无效 JWT 令牌吗?

】我们可以在Asp.NETCore中销毁/无效JWT令牌吗?【英文标题】:Couldwedestroy/invalidateJWTtokeninAsp.NETCore?【发布时间】:2018-01-2616:09:01【问题描述】:我使用ASP.NETCore和ASP.NETCoreIdentity来生成JWT令牌。在客户端,我的React(SPA)应用调用API创... 查看详情