Отключите проверку издателя или измените допустимых издателей в IdentityServer4 - PullRequest
0 голосов
/ 28 ноября 2018

При использовании 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-адреса как действительные.

1 Ответ

0 голосов
/ 28 ноября 2018

Хорошо, после проверки 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
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...