c# - 关闭颁发者验证或修改 IdentityServer4 中的有效颁发者

标签 c# asp.net-core identityserver4

当使用 IdentityServer4 时,如何修改 token 验证参数以使 token 颁发者不被验证或可以提供多个有效颁发者?

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

    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 从身份服务器获取 token ,因此 protected API 应将内部和外部 URL 都视为有效。

最佳答案

好的,查看 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
    }

关于c# - 关闭颁发者验证或修改 IdentityServer4 中的有效颁发者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53515992/

相关文章:

c# - 在 asp.net vnext 中获取应用程序路径

asp.net-core - 从 ASP.NET 成员身份切换到 ASP.NET Core 身份时维护密码

c# - .NET IL .maxstack 指令如何工作?

asp.net-core - 为什么 .Net Core 有自己的声明类型?

c# - 将十进制(用户字符串)转换为带有 0x 前缀的十六进制

c# - 在 Debian 8.10 上启动 ASP.NET Core React Web 应用程序时出错

identityserver4 - 如何使IdentityServer客户端能够与任何来源兼容?

c# - Iframe 不会尊重登录 cookie

c# - Microsoft.Data.Sqlite.SqliteException : 'SQLite Error 14: ' unable to open database file'. '

c# - 如何从一种方法中使用的类访问不同方法中的信息?