Por que o IdentityServer4 ApiResource não funciona com JwtBearerOption.Audience?

Aug 18 2020

Eu tenho esta configuração no IdentityServer:

public static IEnumerable<ApiResource> ApiResources =>
        new ApiResource[]
        {
            new ApiResource
            {
                Name = "MyApi"
            }
        };

e esta configuração jwt na API da Web do ASP.NET Core:

 services.AddAuthentication("Bearer")
       .AddJwtBearer("Bearer", options =>
       {
           //identity server
           options.Authority = "https://localhost:5001";

           //access token recepient
           options.Audience = "https://localhost:5001/resources";

           options.TokenValidationParameters = new TokenValidationParameters
           {
               ValidateAudience = true,
               ValidateLifetime = true,
           };
       });

Estou esperando que a autenticação da API da Web não aceite o token do IdentityServer porque a API da Web JwtBearerOption.Audience não é igual a "MyApi". Mas na minha configuração, o público só é validado se o público estiver definido como "https://localhost:5001/resources" e será invalidado se eu definir como "MyApi"

Documentação do IdentityServer4 relacionada à minha pergunta.

Respostas

1 ToreNestenius Aug 18 2020 at 14:30

Para colocar o MyApi na lista de públicos, você precisa definir um ApiScope como em IdentityServer4 (v4.0x)

Veja estes artigos para mais detalhes