在ASP.NET Core中使用基于本地存储的JWT令牌更改用户密码(ASP.Identity)



您好,我是一个非常初级的C#开发人员,正在尝试使用ASP.NET Core完成我的第一步。

现在我正处于一个需要一些外部帮助的时刻。我开发了一个基于Blazor的网站,并在数据库中添加了一些用户。现在我想为loggedin用户添加一个更改密码的功能。我的项目分为服务器端和客户端。客户端包含我的所有blazor/razor页面,包括ChangePasswordView,服务器端接收来自客户端的REST请求。

为了获得授权,我使用JWT(JSON WebToken(,并在浏览器中的本地存储中添加了该令牌和一些声明。

程序如下:

  1. 用户已登录
  2. 用户输入旧密码和新密码并点击提交按钮
  3. 请求函数从客户端转到服务器端
  4. POST请求到达服务器端UserController类,该类包含一个";CCD_ 1";方法它成功地接收到带有旧密码和新密码的pwModel
  5. 。。。。现在我遇到了一些问题。。。。我想我必须从本地浏览器存储或类似的东西中验证JWTtoken,因为_userManager.GetUserAsync(User)总是返回null

如何帮助我解决这个问题以获得完整的功能";changePassword";方法和你需要什么信息?

谨致问候,拉里

p.s.很抱歉,这是我在Stackoverflow上的第一个问题,我尽力描述这个问题。

似乎有点,您忘记了实现一些细节。首先,您需要将JWT身份验证添加到您的启动中。

配置服务:

services.AddAuthentication()
.AddJwtBearer(option =>
{
string jwtKey = Configuration.GetSection("Identity").GetSection("Token").GetValue<string>("JwtSecurityKey");
option.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration.GetSection("Identity").GetSection("Token").GetValue<string>("JwtIssuer"),
ValidAudience = Configuration.GetSection("Identity").GetSection("Token").GetValue<string>("JwtAudience"),
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtKey))
};
});

配置:

app.UseAuthentication();
app.UseAuthorization();

控制器方法必须用Authorize(AuthenticationSchemes="Bearer"(属性来修饰

[HttpPost("ChangePasswort")]
[Authorize(AuthenticationSchemes = "Bearer")]
public async Task<IActionResult> ChangePasswortAsync([FromBody] ChangePasswordModel model)
{
string claim = HttpContext.User.FindFirstValue(ClaimsIdentity.DefaultNameClaimType);
var user = await UserManager.GetUserAsync(HttpContext.User);
var result = await UserManager.ChangePasswordAsync(user, model.OldPassword, model.NewPassword);
if(!result.Succeeded)
{
...
}
...
return Ok(...);
}

当您对控制器进行调用时,HTTP请求必须具有Authorization标头。

HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);  

相关内容

  • 没有找到相关文章

最新更新