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