使用 JWT Bearer 进行身份验证不起作用,调试表明问题出在 GetToken() 函数内部
Posted
技术标签:
【中文标题】使用 JWT Bearer 进行身份验证不起作用,调试表明问题出在 GetToken() 函数内部【英文标题】:Authentication with JWT Bearer doesn't work the debug says the problem is inside the GetToken() function 【发布时间】:2021-06-05 07:29:59 【问题描述】:我有一个代码使用 JWT Bearer 来验证一些令牌,如下所示。
private string GetToken()
var issuer = _factory.Configuration.GetValue<string>("JwtSettings:Issuer");
DateTime expiryDate = DateTime.UtcNow.Add(TimeSpan.FromMinutes(1));
var jwtSecurityToken = new JwtSecurityToken(
issuer: issuer,
claims: new List<Claim>()
new Claim("a claim", "a claim value")
,
expires: expiryDate,
signingCredentials: new SigningCredentials(
new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_factory.Configuration.GetValue<string>
("JwtSettings:Secret"))),
SecurityAlgorithms.RsaSha256Signature
)
);
return new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken);
private HttpClient GetClient()
var client = _factory.CreateClient(new WebApplicationFactoryClientOptions
AllowAutoRedirect = false,
);
var token = GetToken();
client.DefaultRequestHeaders.Add(HttpRequestHeader.Authorization.ToString(), $"Bearer token");
return client;
但它不起作用,我不知道因为我是 C-sharp 和 .Net 的新手
它给了我无法创建签名的错误
请帮忙。
【问题讨论】:
请发布确切的错误。但如果我猜测问题可能是您说您的令牌应该使用 RSA-SHA256 对称签名,但 RSA 是一种非对称密钥算法(即它需要 2 个密钥:一个用于签名,一个用于验证签名)。如果这是错误,请使用像SecurityAlgoritms.HmacSha256
这样的对称算法。
@ckuri 错误与对称安全算法有关。我认为您的解决方案是正确的。我对后端开发很陌生。前面的代码是使用 rsa 生成一个令牌,而在 ge 令牌函数中我正在使用 rsa 对其进行解码,应该将其更改为 hmac。是否可以保留生成 rsa 并在 get token 函数中做一些事情?
【参考方案1】:
在您的代码中,您指定了 SecurityAlgorithms.RsaSha256Signature,这是一种非对称密钥算法,需要两个密钥(私钥和公钥)
要使代码正常工作,请将 SecurityAlgorithms.RsaSha256Signature 更改为 SecurityAlgorithms.HmacSha256Signature
【讨论】:
以上是关于使用 JWT Bearer 进行身份验证不起作用,调试表明问题出在 GetToken() 函数内部的主要内容,如果未能解决你的问题,请参考以下文章
Sails.js 与护照-http-bearer 身份验证不起作用
如何使用 OWIN Jwt Bearer Authentication 记录身份验证结果
ASP.Net Core - 使用 WebAPI 和 MVC 前端的 JWT 身份验证不起作用
Spring security + JWT + 经过身份验证并且 hasRole 不起作用?
使用 ADFS 的 JWT Bearer 身份验证将 ASP.NET Framework 迁移到 ASP.NET Core 3.1
在 Spring Boot 中成功 Oauth2 登录后 Cookie 身份验证而不是 JWT Bearer Token