ResourceOwnerPassword模式使用数据库.

有时候, ResourceOwnerPassword模式有用的, 可以用来代替我们原来管理程序的开发方式.

因为管理程序本身拥有用户数据的权限嘛, 并不是第三方应用, 无需要授权

集成很简单.

1. 添加ResourceOwnPasswordValidator验证程序

public class ResourceOwnerPasswordValidator : IResourceOwnerPasswordValidator
    {
        public ResourceOwnerPasswordValidator()
        {

        }

        public Task ValidateAsync(ResourceOwnerPasswordValidationContext context)
        {
            //根据context.UserName和context.Password与数据库的数据做校验,判断是否合法
            if (context.UserName == "jian1" && context.Password == "j1")
            {
                context.Result = new GrantValidationResult(
                 subject: context.UserName,
                 authenticationMethod:  OidcConstants.AuthenticationMethods.Password);
            }
            //else
            //{

            //    //验证失败
            //    context.Result = new GrantValidationResult(
            //        TokenRequestErrors.InvalidGrant, 
            //        "invalid custom credential",
            //        );
            //}
            return Task.FromResult(0);
        }
         
    }

2. 注册IdentityServer的时候注入这个验证程序

// 使用内存存储,密钥,客户端和资源来配置身份服务器。 测试环境
            services.AddIdentityServer()
                .AddDeveloperSigningCredential()
                .AddInMemoryApiResources(AuthorizationConfig.ApiResources())
                .AddInMemoryClients(AuthorizationConfig.Clients())
                .AddInMemoryIdentityResources(AuthorizationConfig.GetIdentityResources()) 
                //添加自定义的ResourceOwnValidator验证程序
                
.AddResourceOwnerValidator<Models.ResourceOwnerPasswordValidator>()

                .AddProfileService<Services.ProfileService>();
原文地址:https://www.cnblogs.com/jianjialin/p/9326503.html