【问题标题】:JWT Authentication in ASP.Net Core with ASP Identity带有 ASP 身份的 ASP.Net Core 中的 JWT 身份验证
【发布时间】:2017-12-06 04:54:07
【问题描述】:

几年前,我使用 .Net 4.6 和 ASP Identity 实现了一个 Web 应用程序,我在后端使用 JWT 进行授权和身份验证,并将 AngularJS 用于客户端。我记得,我使用 BitOfTech.net 上的一系列帖子作为实施的基础。我使用 VS2015 社区来实现。

我现在正在尝试使用 ASP Identity Core、.Net Core 和 Angular 4 在 VS2017 社区中重新实现这个应用程序。

我有部分 Angular 工作并重新实现了 JWT 令牌,虽然它使用正确的数据响应 .well-known/openid-configuration 端点,并且使用令牌端点调用 AuthorizationController 登录失败。

我已经解决了许多问题,其中最大的问题是使用 SQL Query 升级该数据库,但 AccountController 在调用返回 false 的 _userManager.CheckPasswordAsync() 时失败。我正在使用 Postman 运行测试,并且用户名和密码正确,因为针对相同的 aspnet Identity DB 运行的旧版本有效。

在早期的项目中,我必须实现一个派生自 PasswordHasher 的 SQLPasswordHasher,它覆盖了 VerifyHashedPassword()。我忘记了我需要这样做的原因,但我似乎记得因为数据库最初是使用 ASP.Net Membership 构建的,所以存储的密码是使用旧算法生成的。

所以我决定重新实现它,发现我需要创建一个基于 IPasswordHasher 的类,它实现了 VerifyHashedPassword() 和 HashPassword()

然后我要做的就是在启动期间通过分配 userManager.PasswordHasher = SQLPasswordHasher 将我的 SQLPasswordHasher 注入到 UserManager 中

但这就是我卡住的地方。在我的旧实现中,我的代码中有一个地方我创建了一个 UserManager 但启动发生了很大变化,以至于我找不到我会在哪里做这件事。 Google 建议修改 IdentityConfig.cs,但似乎不再使用。

如果有人可以向我解释我是如何在创建 UserManager 时将自己的 PasswordHasher 注入到 UserManager 中的,我将永远感激不尽。

我不确定这是否相关,但我正在使用 OpenIddict。

感谢您阅读本文。

【问题讨论】:

  • 您可以查看 Scott Brady 在scottbrady91.com/ASPNET-Identity/… 的帖子。我认为这对解决您的问题很有帮助。
  • 经过进一步思考,我想我可能会感到困惑。好吧,我知道我很困惑,但我想我可能知道为什么。 UserManager 确实有 PasswordHasher 实现,所以我想从它继承并覆盖一些方法。 IPasswordHasher 接口适用于希望开发自己的特定算法而不是扩展原始算法的人。我说的对吗?
  • 是的,你是对的。因此,当您自定义 ASP.NET Core Identity 时,您可以创建从 UserManager 继承的新服务并覆盖一些方法。

标签: asp.net-core asp.net-identity


【解决方案1】:

我是对的。我需要覆盖 PasswordHasher 而不是创建一个全新的类。

这个可以关闭

【讨论】:

    猜你喜欢
    • 2017-09-11
    • 2019-09-06
    • 2021-04-20
    • 1970-01-01
    • 2023-04-01
    • 2018-09-02
    • 2021-12-17
    • 2018-07-07
    • 1970-01-01
    相关资源
    最近更新 更多