我正在使用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" />
答案 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