在 IdentityServer4 的令牌请求中使用电子邮件

Rem*_*Rem 4 asp.net-core identityserver4

我使用带有 ASP.NET Core Identity 的 IdentityServer4 的 ROPC 流,我需要将用户名和密码发送到 /connect/token 端点以获取 access_token。

如何配置 IdentityServer4 以在 /connect/token 请求中接受用户名或电子邮件和密码?

PS:asp.net 核心:2.0.2 IdentityServer4:2.0.2

Rem*_*Rem 5

找到了这个解决方案:

1) 将文件 IdentityServer4.AspNetIdentity/src/IdentityServer4.AspNetIdentity/ResourceOwnerPasswordValidator.cs 从https://github.com/IdentityServer/IdentityServer4.AspNetIdentity/blob/dev/src/IdentityServer4.AspNetIdentity/ResourceOwnerPasswordValidator.cs复制到您的项目

2) 修复 ValidateAsync 方法以通过电子邮件查找用户

        var user = await _userManager.FindByNameAsync(context.UserName);
        if (user == null) {
            user = await _userManager.FindByEmailAsync(context.UserName);
        }
Run Code Online (Sandbox Code Playgroud)

3) 向 IS4 添加验证器:

            .AddAspNetIdentity<AppUser>()
            .AddResourceOwnerValidator<Services.ResourceOwnerPasswordValidator<AppUser>>();
Run Code Online (Sandbox Code Playgroud)

4)利润!