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