ICustomAuthorizeRequestValidator没有被调用?

时间:2017-08-30 08:07:05

标签: c# oauth .net-core identityserver4

我正在尝试使用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);

4 个答案:

答案 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>();

为我工作