我正在尝试使用AddCustomAuthorizeRequestValidator
方法来提供自定义声明验证。我甚至无法在ICustomAuthorizeRequestValidator
实现中获得断点。我错过了什么吗?
My breakpoint
ConfigureServices方法代码:
services.AddMvc();
services.AddOptions();
services.AddTransient<ICustomAuthorizeRequestValidator, Saml2BearerValidator>();
services.AddIdentityServer()
.AddTestUsers(Config.GetUsers())
.AddConfigurationStore(builder =>
builder.UseSqlServer(_settings.Value.ConnectionString, options =>
options.MigrationsAssembly(migrationsAssembly)))
.AddOperationalStore(builder =>
builder.UseSqlServer(_settings.Value.ConnectionString, options =>
options.MigrationsAssembly(migrationsAssembly)))
.AddCustomAuthorizeRequestValidator<Saml2BearerValidator>()
.AddSigningCredential(CertificateManager.GetFromStorage(
_settings.Value.ServerCertificateThumb, _settings.Value.ServerCertificatePass));
return services.ConfigureAutofacServicesProvider(_settings.Value.Abc_xacml_n3_diagnostic);
答案 0 :(得分:0)
取决于IdentityServer的结构方式,这是否可能是由于您要添加该调用的 where ?
如果IdentityServer是直接根据您添加的内容构建中间件管道,则有可能在到达管道中的那个点之前对其进行处理。
好奇您是否有运气解决这个问题。
答案 1 :(得分:0)
我查看了IdentityServer4的GitHub存储库。在其DefaultCustomAuthorizeRequestValidator类(实现ICustomAuthorizeRequestValidator)中,ValidateAsync的装饰如下:
public Task ValidateAsync(CustomAuthorizeRequestValidationContext context)
但是从您的屏幕截图中,您正在做
public async Task ValidateAsync(CustomAuthorizeRequestValidationContext context)
也许尝试删除async关键字?
我希望它对您有帮助:D
答案 2 :(得分:0)
我有同样的问题。我创建了自定义授予。
创建一个实现以下内容的类CustomValidationGrant:IExtensionGrantValidator where TUser : IdentityUser, new()
,有一个参数GrantType,对于这个实例,我可以称其为“ custom”
在startUp.cs中添加services.AddIdentityServer() .AddExtensionGrantValidator<CustomValidationGrant >()
别忘了为您的客户端允许一个GrantType。
在consolle应用程序中,您可以使用以下内容:
var discoveryClient = new DiscoveryClient("http://localhost:5000");
discoveryClient.Policy.RequireHttps = false;
var doc = await discoveryClient.GetAsync();
var parameters = new Dictionary<string, string>();
parameters.Add("scope", "MyScope");
parameters.Add("client_secret", "SomeSecret");
parameters.Add("UserName", "UserName");
parameters.Add("Password", "Password");
var tokenResponse = await client.RequestTokenAsync(new TokenRequest
{
Address = tokenEndpoint,
ClientId = "your client",
GrantType = "custom",
Parameters = parameters
});
答案 3 :(得分:0)
在startup.cs中使用以下代码
services.RemoveAll<IdentityServer4.Validation.ICustomAuthorizeRequestValidator>();
services.AddTransient<IdentityServer4.Validation.ICustomAuthorizeRequestValidator, UserManagementApiCustomAuthorizeRequestValidator>();
为我工作