ICustomAuthorizeRequestValidator не вызывается?
Я пытаюсь использовать метод AddCustomAuthorizeRequestValidator
для проверки пользовательских утверждений. Я даже не могу получить точку останова в реализации ICustomAuthorizeRequestValidator
. Я что-то упустил?
Моя точка останова
Код метода 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);
Ответы
Ответ 1
В зависимости от того, как IdentityServer структурирует вещи, возможно ли, что это связано с тем, куда вы добавляете этот вызов?
Если IdentityServer создает конвейер промежуточного программного обеспечения непосредственно из того, что вы добавляете, возможно, он будет обработан до того, как достигнет этой точки в конвейере.
Любопытно, повезло ли вам решить эту проблему.
Ответ 2
Я посмотрел на репозиторий GitHub IdentityServer4. В своем классе DefaultCustomAuthorizeRequestValidator (который реализует ICustomAuthorizeRequestValidator) ValidateAsync оформлен следующим образом:
public Task ValidateAsync(CustomAuthorizeRequestValidationContext context)
Но со скриншота вы делаете:
public async Task ValidateAsync(CustomAuthorizeRequestValidationContext context)
Может быть, попробовать удалить ключевое слово async?
Надеюсь, это поможет: D
Ответ 3
У меня такая же проблема. Вместо этого я создал пользовательский грант.
Создайте класс CustomValidationGrant, который реализует: IExtensionGrantValidator where TUser : IdentityUser, new()
, есть параметр GrantType, для этого экземпляра я могу назвать его "custom"
в startUp.cs добавить services.AddIdentityServer() .AddExtensionGrantValidator<CustomValidationGrant >()
Не забудьте разрешить grantType для вашего клиента.
В консольном приложении вы можете использовать что-то вроде этого:
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
});