如何在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
流中被调用。
当我尝试添加默认验证器(包括IExtensionGrantValidator
)Implicit
时,也不会调用它。
如何在Implicit
流中验证用户名和密码?
答案 0 :(得分:0)
我刚刚找到了解决方案,用户名/密码验证不是授权流程的一部分,它直接在登录页面的Controller中完成,在示例7中,它在AccountController
中完成。 / p>
if (ModelState.IsValid)
{
// validate username/password against in-memory store
if (_users.ValidateCredentials(model.Username, model.Password))
{
...
}
用针对真实用户存储的验证代替默认的TestUserStore
来代替这段代码就足够了。