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

时间:2019-01-18 16:44:28

标签: asp.net-core identityserver4

如何在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;
    }
}

当我在类TokenRequestValidator中查看IdentityServer4的源代码时,似乎IResourceOwnerPasswordValidator验证程序仅在Password流中被调用。

当我尝试添加默认验证器(包括IExtensionGrantValidatorImplicit时,也不会调用它。

如何在Implicit流中验证用户名和密码?

1 个答案:

答案 0 :(得分:0)

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

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

用针对真实用户存储的验证代替默认的TestUserStore来代替这段代码就足够了。