c# - 身份验证令牌总是返回未经授权的
问题描述
我目前正在尝试使用不记名令牌,无论我做什么,我都会收到 HTTP 401 未经授权的错误。
我正在关注JWT 实施指南,我有一个处理 JWT 的扩展方法。
public static class AuthenticationExtension
{
public static IServiceCollection AddTokenAuthentication(this IServiceCollection services, IConfiguration config)
{
var secret = config.GetSection("JwtConfig").GetSection("secret").Value;
var key = Encoding.ASCII.GetBytes(secret);
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x =>
{
x.TokenValidationParameters = new TokenValidationParameters
{
IssuerSigningKey = new SymmetricSecurityKey(key),
ValidateIssuer = false,
ValidateAudience = false,
// ValidIssuer = "localhost",
//ValidAudience = "localhost"
};
});
return services;
}
}
以下是令牌控制器生成令牌 obv 的方式,例如,我应该从标头而不是电子邮件和密码中获取值。
如果在代码中找到该代码,则不能替换该代码。
var token = jwt.GenerateSecurityToken("fake@email.com");
在我StartUp.cs
的配置中,我只需将中间件添加到我的配置中。在服务部分,我进行了测试
services.AddTokenAuthentication(Configuration);
但正如您所见,我收到未经授权的 HTTP 401 返回。
这是来自 api/token 控制器的代码。
[Route("api/[controller]")]
[ApiController]
public class TokenController : ControllerBase
{
private IConfiguration _config;
public TokenController(IConfiguration config)
{
_config = config;
}
[HttpGet]
public string GetRandomToken()
{
var jwt = new JwtService(_config);
var token = jwt.GenerateSecurityToken("fake@email.com");
return token;
}
}
来自 api/token 的令牌
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImZha2VAZW1haWwuY29tIiwibmJmIjoxNTg2NjMzMTkwLCJleHAiOjE1ODY3MTk1OTAsImlhdCI6MTU4NjYzMzE5MH0.SPSERcPpD4f48sWYQwTWpD4f48sWYQwpTUB
这是我的appSettings.json
配置,一旦我有了这个设置,我当然会改变我的秘密。
这是否足以保护 api 或者您是否还应该在 api 层中使用客户端 ID 和机密。HMAC 风格。
"JwtConfig": {
"secret": "PDv7DrqznYL6nv7DrqzjnQYO9JxIsWdcjnQYL6nu0f",
"expirationInMinutes": 1440
},
解决方案
推荐阅读
- javascript - 如何使用javascript检查字符串中是否存在带有字符的新行?
- javascript - 获取 div 中存在的元素的索引?
- assembly - 提高二进制效率 -> 8086 的格雷码
- azure - 我们可以同时在门户和 VS 中开发 Azure 功能吗?
- python - (C++/Python) 捕获不带插入符号的窗口截图
- c# - 发布没有 EXE 和运行时的 .NET Core 应用程序
- bash - 用于 Mac OS 的 cat -E 模拟
- typescript - 仅 TypeScript 数组过滤器 RegExp
- spring-boot - Kotlin,Spring Boot,JPA - 获取通用枚举的值 (E.valueOf(stringValue))
- core-web-vitals - 尽管 PSI 结果超过 90%,但核心网络生命体征仍失败