为了账号安全,请及时绑定邮箱和手机立即绑定

简单的 IUserStore,IUserPasswordStore 实现给出了无效的登录尝试

简单的 IUserStore,IUserPasswordStore 实现给出了无效的登录尝试

C#
阿晨1998 2022-06-12 11:16:49
我正在试验 Aspnet Core 2.2,并IdentityUser用我的MyIdentityUser. 当我尝试登录时,我得到“无效的登录尝试”。为了让我登录,我错过了什么?该ConfigureServices方法使用 my 设置身份,MyIdentiyUser如下MyIUserStore所示:services.AddDefaultIdentity<MyIdentityUser>()    .AddDefaultUI(UIFramework.Bootstrap4)    .AddUserStore<MyUserStore>();通过尽可能谨慎地实现所有方法(我从抛出每个方法开始IUserStore,然后实现被调用的方法),我得到了这个:IUserPasswordStoreNotImplementedExceptionpublic class MyUserStore : IUserStore<MyIdentityUser>, IUserPasswordStore<MyIdentityUser>{    public void Dispose() { }    public Task<MyIdentityUser> FindByNameAsync(string normalizedUserName, CancellationToken cancellationToken)    {        var ret = new MyIdentityUser        {            Id = "1",            UserName = normalizedUserName        };        return Task.FromResult(ret);    }    public Task<string> GetUserIdAsync(MyIdentityUser user, CancellationToken cancellationToken)    {        return Task.FromResult(user.UserName);    }    public Task<string> GetPasswordHashAsync(MyIdentityUser user, CancellationToken cancellationToken)    {        return Task.FromResult("asdf");    }    ... the rest of the methods throws exception.}为了完整,这里是我的MyIdentityUserpublic class MyIdentityUser{    public string Id {get;set;}    public string UserName {get;set}}并开始_LoginPartial.cshtml@using Microsoft.AspNetCore.Identity@inject SignInManager<MyIdentityUser> SignInManager@inject UserManager<MyIdentityUser> UserManager
查看完整描述

1 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

你返回一个空字符串作为哈希


public Task<string> GetPasswordHashAsync(MyIdentityUser user, CancellationToken cancellationToken)

{

    return Task.FromResult(string.Empty);

}

但即使是空密码,也不会产生空的哈希字符串。最重要的是,使用了不同的算法(可以在 Startup.cs 中配置,添加身份时)。


如果您希望它成功,您将必须从特定密码返回一个真实的计算哈希,否则它会识别输入的密码返回一个不同的哈希,然后是“存储”的哈希,并导致登录失败。


仅仅因为您正在伪造/实现用户存储并不意味着不会执行哈希验证。


public Task<string> GetPasswordHashAsync(MyIdentityUser user, CancellationToken cancellationToken)

{

    var hash = new PasswordHasher<MyIdentityUser>().HashPassword(user, "asdf");

    return Task.FromResult(hash)

}

可以,但请注意,如果您更改密码哈希算法,它可能会失败,因为您正在new使用它,这意味着它使用密码哈希的默认选项。


查看完整回答
反对 回复 2022-06-12
  • 1 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号