从Aspnetcore2.2中的另一个后端使用usr / pwd的简单交换

时间:2019-01-18 21:08:59

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

如何创建一个简单的aspnetcore(2.2)+解决方案,该解决方案使用后端仅对用户进行身份验证?

我不应该管理用户,我可以指定API,因此希望它应该只有一种方法IsAuthenticated(email,password)

我从锅炉板开始

services.AddDefaultIdentity<MyIdentityUser>()
    .AddDefaultUI(UIFramework.Bootstrap4)
    .AddUserStore<MyUserStore>();

使用最简单的实现
MyIdentityUser
MyUserStore : IUserStore<MyIdentityUser>, IUserPasswordStore<MyIdentityUser>, IUserEmailStore<MyIdentityUser>
但这和我必须做的FindByNameAsyncGetPasswordHashAsyncGetUserIdAsyncGetUserNameAsync等的(伪)实现相比实在太多了。

应该责怪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的文章,但我无法理解如何将其注入流程。

2 个答案:

答案 0 :(得分:1)

我认为IUserPasswordStore无需对哈希密码进行哈希处理,因此您无需将哈希算法放在此处。 IUserPasswordStore的责任仅在于如何从您的身份用户(MyIdentityUser)设置和获取哈希密码。

看看UserStoreBase中GetPasswordHashAsync的实现,它只是返回用户。PasswordHash,仅此而已。

https://github.com/aspnet/AspNetCore/blob/bfec2c14be1e65f7dd361a43950d4c848ad0cd35/src/Identity/Extensions.Stores/src/UserStoreBase.cs

因此,如果您实现IUserPasswordStore,则并不意味着您必须拥有自己的密码哈希器。

负责对密码进行哈希处理的是IPasswordHasher。如果您想拥有自己的密码哈希器,则可以自己实现。

FemaleClub

有关默认密码哈希器的信息,请点击此处

https://github.com/aspnet/AspNetCore/blob/bfec2c14be1e65f7dd361a43950d4c848ad0cd35/src/Identity/Extensions.Core/src/PasswordHasher.cs

并在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