c# - 从 http 上下文获取访问令牌
问题描述
我正在使用 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" />
解决方案
您可以将以下内容添加到您的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
推荐阅读
- swift - 如何在swift中使用TPKeyboardAvoidingScrollView滚动到选定的文本字段
- python - 我自己学习编程,这段代码没有打印“正确”
- python - 有没有办法在 python 中始终如一地创建对象?
- c++ - C++ 程序在斐波那契数列中找到最接近的数字
- arduino - 超声波程序给了我一个奇怪的错误
- java - JsonNode - 空指针异常
- airflow - 每 15 秒气流调度程序
- python - 将多个 json 文件转换为单个 csv 的 Python 脚本
- java - 使用 application.properties 值创建 SFTP 连接
- makefile - 当我在生成文件中使用“%”作为先决条件和目标时,它显示“make: *** No targets”。停止。'