从http上下文获取访问令牌

时间:2018-07-03 07:48:43

标签: c# asp.net-core asp.net-core-2.0 identityserver4

我正在使用IdentityServer4对应用程序和Web api进行身份验证。 我的客户端应用程序(vuejs)实现了隐式授予类型。

在我的WEB API中,我有以下设置:

services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            })
             .AddIdentityServerAuthentication(options => {
                 options.Authority = Configuration.GetSection("AppSettings:BaseUrls:Identity").Value;
                 options.RequireHttpsMetadata = false;
                 options.SaveToken = true;
                 options.ApiName = "myapi";
             });

在我的控制器内,我正在使用:

var accessToken = await HttpContext.GetTokenAsync("access_token");

获取我的令牌。直到上周,当我升级到dotnet core 2.1时,它一直有效。

升级后,它返回null。

旧版本:

<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.7" />

新版本:

<PackageReference Include="Microsoft.AspNetCore.All" Version="2.1.1" />

1 个答案:

答案 0 :(得分:0)

您可以将以下内容添加到您的AddIdentityServerAuthentication部分

options.JwtBearerEvents = new JwtBearerEvents() { OnTokenValidated = async context => { var accessToken = context.SecurityToken as JwtSecurityToken; if (accessToken != null) { ClaimsIdentity identity = context.Principal.Identity as ClaimsIdentity; if (identity != null) { identity.AddClaim(new Claim("access_token", accessToken.RawData)); } } } }

然后,您可以使用Request.HttpContext.User.FindFirst("access_token").Value

访问令牌