【发布时间】: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