ResourceOwnerPassword模式使用数据库.

时间:2021-11-11 09:23:32

有时候, 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();
} }

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

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

.AddResourceOwnerValidator<Models.ResourceOwnerPasswordValidator>()

                .AddProfileService<Services.ProfileService>();