ASP.NET标识 - 自定义UserManager,UserStore

dee*_* zg 12 asp.net-mvc asp.net-identity asp.net-identity-2

我对自定义UserManager和UserStore有点困惑.开箱即用的解决方案带有EF实现,我不想使用EF,而是我自己的使用MSSQL的DAL.我想要基于声明的安全性,其中一个用户声明将是角色.

我感到困惑的是我应该做的整个过程.从我到目前为止看来,我需要自己创造

CustomApplicationUser : IUser
CustomUserManager : UserManager<CustomApplicationUser>
CustomUserStore : IUserStore, IUserClaimStore
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 我是否在正确的轨道上?
  2. 我想在我的CustomUserManager上使用IsInRole()方法,但不知道如何使用Claims.我知道有一个IUserRoleStore.IsInRole()默认UserManager在UserManager.IsInRole()中调用,但我不想在我的数据库中使用单独的Roles表.我想要的是Claim DB表,其中一个ClaimType是Role,而UserManager.IsInRole()使用它.现在,我不确定为什么我需要UserManager.IsInRole()方法?我真的需要有自定义ClaimsIdentity SignInManager.CreateUserIdentityAsync()之类的东西,并在那个调用我自己的实现填写所有用户信息,包括声明?

这对我来说似乎有点混乱,我似乎无法找到一些关于它的清晰文档,所以如果有人能够对它有所了解,我将非常感激!

Daw*_*ski 8

而不是仅仅复制我将只指向以下文章:ASP.NET身份的自定义存储提供程序概述.

看一下这个,它应该很好地概述了身份在ASP.NET中的工作原理.在您的应用程序中选择要覆盖和自定义的内容也很有用.

  • 这是该文章的.NET核心版本:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-custom-storage-providers (6认同)
  • 阅读建议的文章我不明白在哪里实现自定义登录/注销方法。本文建议仅重写“存储”和“数据”层来实现您需要的接口,但这些接口没有任何登录/注销方法。也许这个操作必须在上层“IdentityManager”层中执行?(UserManager)我找不到任何示例如何实现使用我的旧代码的自定义登录 (2认同)