.net core 3.1 Identity Server4 (自定义模式) 电脑版发表于:2021/1/18 13:28  >#.net core 3.1 Identity Server4 (自定义模式) [TOC]  tn>IdentityServer4除了提供常规的几种授权模式外(AuthorizationCode、ClientCredentials、Password、RefreshToken、DeviceCode),还提供了可以拓展的授权模式,下面就根据源码简单说下IdentityServer4是如何实现自定义授权模式的。 >### 创建CustomAuthCodeValidator类  tn>`IExtensionGrantValidator`接口实现了自定义验证的扩展。接着我们通过编写简单的源码实现验证逻辑。 ```csharp public class CustomAuthCodeValidator : IExtensionGrantValidator { private readonly UserManager<IdentityUser> _userManager; public CustomAuthCodeValidator(UserManager<IdentityUser> userManager) { _userManager = userManager; } public string GrantType => "auth_custom"; public async Task ValidateAsync(ExtensionGrantValidationContext context) { var name = context.Request.Raw["name"]; var age = context.Request.Raw["age"]; // 创建无效授权的返回实例 var errorValidationResult = new GrantValidationResult(TokenRequestErrors.InvalidGrant); // 判断name参数与age参数是否为空 if (string.IsNullOrWhiteSpace(name) || string.IsNullOrWhiteSpace(age)) { // 赋予无效授权结果 context.Result = errorValidationResult; return; } if (name!="bob" && age!="19") { // 赋予无效授权结果 context.Result = errorValidationResult; return; } // 获取到有效的用户 subject_id var user = await _userManager.FindByNameAsync(name); // 返回有效结果 context.Result = new GrantValidationResult(user.Id, GrantType); } } ``` >### 在Startup.cs中实现自定义验证 ```csharp .AddExtensionGrantValidator<CustomAuthCodeValidator>() ```  >### 输入相对应的请求参数进行测试 