代码之家  ›  专栏  ›  技术社区  ›  Martin Staufcik

在隐式流中验证IdentityServer4中的用户名和密码

  •  1
  • Martin Staufcik  · 技术社区  · 6 年前

    如何在中验证用户名和密码 Implicit 流量?我尝试添加自定义 IResourceOwnerPasswordValidator 验证器,但在这里设置断点时不会调用它:

    services.AddIdentityServer()
        .AddDeveloperSigningCredential()
        .AddInMemoryApiResources(Config.GetApiResources())
        .AddInMemoryClients(Config.GetClients())
        .AddInMemoryIdentityResources(Config.GetIdentityResources())
    
        .AddResourceOwnerValidator<ResourceOwnerPasswordValidator>();
        ;
    

    验证器:

    public class ResourceOwnerPasswordValidator : IResourceOwnerPasswordValidator
    {
    
        public ResourceOwnerPasswordValidator()
        {
        }
    
        public async Task ValidateAsync(ResourceOwnerPasswordValidationContext context)
        {
            return Task.CompletedTask;
        }
    }
    

    当我在类中查看IdentityServer4的源代码时 TokenRequestValidator 看来 IResourceOwnerPasswordValidator 仅在 Password 流动。

    当我试图添加 IExtensionGrantValidator ,它是默认的验证器(包括 隐性的 )也不叫。

    如何在 隐性的 流量?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Martin Staufcik    6 年前

    我刚找到解决方案,用户名/密码验证不是授权流的一部分,它直接在登录页面的控制器中完成,在示例7中,它在 AccountController .

    if (ModelState.IsValid)
    {
        // validate username/password against in-memory store
        if (_users.ValidateCredentials(model.Username, model.Password))
        {
            ...
        }
    

    将这段代码替换为针对实际用户存储的验证,而不是默认的验证就足够了。 TestUserStore .