【问题标题】:Turn off issuer validation or modify valid issuers in IdentityServer4关闭颁发者验证或修改 IdentityServer4 中的有效颁发者
【发布时间】:2018-11-28 22:41:10
【问题描述】:

在使用 IdentityServer4 时,如何修改令牌验证参数,以便不验证令牌颁发者或提供多个有效颁发者?

我尝试了以下方法,但这似乎不起作用:

    public void ConfigureServices(IServiceCollection services)
    {
        // ... omitted

        services.AddAuthentication("Bearer")
            .AddIdentityServerAuthentication(options =>
            {
                options.Authority = "http://localhost:5000";
                options.RequireHttpsMetadata = false;

                options.ApiName = scopeName;
            });

        services.PostConfigure<JwtBearerOptions>("Bearer", options =>
        {
            // Option 1: turn off issuer validation at all
            options.TokenValidationParameters.ValidateIssuer = false;

            // Option 2 (preferable): Provide multiple valid issuers
            options.TokenValidationParameters.ValidIssuers = new[]
            {
                "http://localhost:5000",
                "http://127.0.0.1:5000",
            };
        });

        // ... omitted
    }

我需要这个的原因:受身份服务器保护的 API 可以在内部和外部访问。外部方使用与内部方不同的 URL 从身份服务器获取令牌,因此受保护的 API 应将内部和外部 URL 视为有效。

【问题讨论】:

  • 这种方法适合您吗? stackoverflow.com/questions/51231697/…
  • @RuardvanElburg:很酷,非常感谢,这似乎是一种让我的场景工作的方法。但是,如果我的问题有解决方案,我仍然会感兴趣,其中最初用于生成令牌的发行者是持久存在的并且不会丢失在 JWT 令牌中。
  • @RuardvanElburg:测试一下我刚刚意识到这种方法不会真正起作用,因为正如它在另一种方法中所说的那样,所有租户都必须可以访问共享 URL。这意味着,我永远无法在受保护的 API 中使用只有内部 DNS 知道的权限。

标签: c# asp.net-core identityserver4


【解决方案1】:

好的,在查看了 GitHub 存储库 IdentityServer4.AccessTokenValidation 之后,我找到了一种方法来实现这一点。我的测试证实它有效。

    public void ConfigureServices(IServiceCollection services)
    {
        // ... omitted

        services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
            .AddIdentityServerAuthentication(
                IdentityServerAuthenticationDefaults.AuthenticationScheme,
                jwtOptions =>
                {
                    jwtOptions.Authority = "http://localhost:5000";
                    jwtOptions.RequireHttpsMetadata = false;

                    // This previously was: options.ApiName = scopeName;
                    jwtOptions.Audience = scopeName;

                    // Option 1: if you want to turn off issuer validation
                    //jwtOptions.TokenValidationParameters.ValidateIssuer = false;

                    // Option 2: if you want to support multiple issuers
                    jwtOptions.TokenValidationParameters.ValidIssuers = new[]
                    {
                        "http://localhost:5000",
                        "http://127.0.0.1:5000",
                    };
                },
                null
            );

        // ... omitted
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2021-04-13
    • 2016-05-25
    • 2023-03-30
    相关资源
    最近更新 更多