程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在 ASP.NET Core 中使用基于本地存储的 JWT-Token 更改用户密码(ASP.Identity)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在 ASP.NET Core 中使用基于本地存储的 JWT-Token 更改用户密码(ASP.Identity)?

开发过程中遇到在 ASP.NET Core 中使用基于本地存储的 JWT-Token 更改用户密码(ASP.Identity)的问题如何解决?下面主要结合日常开发的经验,给出你关于在 ASP.NET Core 中使用基于本地存储的 JWT-Token 更改用户密码(ASP.Identity)的解决方法建议,希望对你解决在 ASP.NET Core 中使用基于本地存储的 JWT-Token 更改用户密码(ASP.Identity)有所启发或帮助;

美好的一天, 我是一名 C# 初学者,正在尝试使用 ASP.NET Core 完成我的第一步。

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

为了授权,我使用了 JWT (JsON WebToken),我添加了这个令牌,并在浏览器的本地存储中添加了一些声明。

流程如下:

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

如何帮助我解决此问题以获得功能齐全的“changepassword”方法以及您需要哪些信息?

最好的问候, 拉里

附言抱歉,这是我在 Stackoverflow 上的第一个问题,我试图尽可能地描述这个问题。

解决方法

好像有点,你忘记实现一些细节了。 首先,您需要在您的 Startup 中添加 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();

Controller 方法必须使用 Authorize(AuthenticationscheR_705_11845@es = "Bearer") 属性进行修饰

    [httpPost("Changepasswort")]
    [Authorize(AuthenticationscheR_705_11845@es = "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);  

大佬总结

以上是大佬教程为你收集整理的在 ASP.NET Core 中使用基于本地存储的 JWT-Token 更改用户密码(ASP.Identity)全部内容,希望文章能够帮你解决在 ASP.NET Core 中使用基于本地存储的 JWT-Token 更改用户密码(ASP.Identity)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。