WebAPI и IdentityServer на одном компьютере и на внешних клиентах - PullRequest
0 голосов
/ 16 апреля 2020

Я столкнулся со следующим сценарием: у меня есть ASP. NET Core WebAPI (ресурс API, который я пытаюсь защитить), размещенный на той же машине, что и IdentityServer, и у меня есть клиенты вне моей сети который связывается с обоими через их публичные c адреса (например: https://myapi.com и https://myidentity.com).

Мне было интересно, можно ли установить API для связи с IdentityServer через адрес локального хоста (например: http://localhost: 5000 ), в то время как внешние клиенты поддерживают связь с обоими через свои публичные c адреса?

I ' Мы пытались изменить свойство IdentityServer Authority для использования адреса localhost:

services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
 .AddIdentityServerAuthentication(options =>
  {
    options.Authority = http://localhost:5000;
    options.ApiName = apiName;
  });

Но я получаю следующую ошибку, когда API пытается проверить токен, полученный от клиента:

Bearer error="invalid_token", error_description="The issuer 'https://myidentity.com' is invalid"

Это имеет смысл, поскольку токен был выдан https://myidentity.com, а мой API имеет полномочия http://localhost:5000.

Есть идеи?

1 Ответ

0 голосов
/ 17 апреля 2020

Вы можете установить TokenValidationParameters для добавления действительного ValidIssuer, оба эмитента токенов должны работать:

services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
    options.Authority = "http://localhost:5000";
    options.RequireHttpsMetadata = false;
    options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidIssuer = "https://myidentity.com"
    };

    options.Audience = "api1";
});
...