如何创建一个简单的aspnetcore(2.2)+解决方案,该解决方案使用后端仅对用户进行身份验证?
我不应该管理用户,我可以指定API,因此希望它应该只有一种方法IsAuthenticated(email,password)
。
我从锅炉板开始
services.AddDefaultIdentity<MyIdentityUser>()
.AddDefaultUI(UIFramework.Bootstrap4)
.AddUserStore<MyUserStore>();
使用最简单的实现
MyIdentityUser
和
MyUserStore : IUserStore<MyIdentityUser>, IUserPasswordStore<MyIdentityUser>, IUserEmailStore<MyIdentityUser>
但这和我必须做的FindByNameAsync
,GetPasswordHashAsync
,GetUserIdAsync
,GetUserNameAsync
等的(伪)实现相比实在太多了。
我猜应该责怪AddDefaultIdentity
方法(嗯,因为我仍然认为我要优于计算机,所以我应该责备){{3 }}中的方法名称意味着我将拥有一个管理所有内容的后端。
我已经读过I guess the "Default"和MSDN:Introduction to Identity on ASP.NET Core,但是它们要么过于注重替换EF-and-everything,要么我的阅读文档技能不足。同样,我在互联网上搜索过,但似乎我的google-fu不够强大。
更新
上面没有提到的我特别必须实现GetPasswordHashAsync
,该方法应该返回与对用户输入(视图模型)进行哈希处理时所使用的哈希算法相同的哈希算法。如果我可以重写该哈希算法,则可以将纯文本发送到后端(hmm),也可以要求该算法并自己实现(更好)。
到目前为止,GetPasswordHashAsync
必须返回Configure ASP.NET Core Identity,并在前面加上一个大写字母,以告诉您使用了两种算法中的哪一种。
解决方案是否可以覆盖(如何)用于视图模型的算法?如果可以,怎么办?
我看到了有关为PasswordHasher
设置新的UserManager
的文章,但我无法理解如何将其注入流程。
答案 0 :(得分:1)
我认为IUserPasswordStore无需对哈希密码进行哈希处理,因此您无需将哈希算法放在此处。 IUserPasswordStore的责任仅在于如何从您的身份用户(MyIdentityUser)设置和获取哈希密码。
看看UserStoreBase中GetPasswordHashAsync的实现,它只是返回用户。PasswordHash,仅此而已。
因此,如果您实现IUserPasswordStore,则并不意味着您必须拥有自己的密码哈希器。
负责对密码进行哈希处理的是IPasswordHasher。如果您想拥有自己的密码哈希器,则可以自己实现。
FemaleClub
有关默认密码哈希器的信息,请点击此处
并在startup.cs中将其注册为DI,以便UserManager将使用您自己的自定义密码哈希器。换句话说,这会将您的密码哈希器注入该流程。
public class MyPasswordHasher : IPasswordHasher<MyIdentityUser>
{
public string HashPassword(MyIdentityUser user, string password)
{
...
}
public PasswordVerificationResult VerifyHashedPassword(MyIdentityUser user, string hashedPassword, string providedPassword)
{
...
}
}
还要看看UserManager类,这是IUserPasswordStore和IPasswordHasher交互的地方。在UserManager中,您将找到以下代码
services.AddScoped<IPasswordHasher<MyIdentityUser>, MyPasswordHasher>();
答案 1 :(得分:0)
函数var createElementNSOrig = global.document.createElementNS
global.document.createElementNS = function(namespaceURI, qualifiedName) {
if (namespaceURI==='http://www.w3.org/2000/svg' && qualifiedName==='svg'){
var element = createElementNSOrig.apply(this,arguments)
element.createSVGRect = function(){};
return element;
}
return createElementNSOrig.apply(this,arguments)
}
确实需要用户名和密码并登录。它还包含另外两个字段(布尔),第一个是“ ispersistent”(永久),您可以将其标记为false,第二个是锁定。这将返回signInManager.PasswordSignInAsync
,然后您可以使用SignInResult
来检查登录是否成功。
result.Succeeded