我有一个现有的ASP.net MVC和WebAPI结合的网站,它使用标准的UserManager
类来使用实体框架执行身份验证。我现在需要"换出"该身份验证,并使用外部第三方REST web服务进行身份验证,并存储和更新用户详细信息。
第三方web服务有一个简单的login
端点,它接受用户名和密码,如果登录成功,它返回一个令牌。
我想如果可能的话,继续使用ASP.net Identity AspNetRoles
表来管理用户的角色,一旦他/她登录。
实现这个场景的最佳方法是什么?我最初考虑编写自定义UserStore
,但这假设我可以访问密码散列,但我没有。我只能登录和使用第三方API端点更新密码,我不能直接访问数据库用户表
回答我自己的问题,最后我在我的ApplicationUserManager
类中处理了这个问题。我覆盖了FindAsync
方法,并通过调用第三方web服务验证了那里的凭据。返回一个会话令牌,用于调用其他端点。
我将会话令牌存储在用户ClaimIdentity
中的另一个覆盖方法——CreateIdentityAsync
中。这个会话令牌可以在随后的WebAPI调用中从承载令牌中读取。
此技术适用于WebAPI和网站登录,如果用户没有存储在第三方服务中的凭据,则可以在必要时退回到UserManager使用EF来验证用户的凭据。