Несущий сервер идентификации не был аутентифицирован - PullRequest
0 голосов
/ 17 июня 2020

У меня есть dockerised. NET Основной проект, на котором запущен Identity Server 4, который правильно создает учетные записи, выдает токены и аутентифицирует запросы в своем собственном контейнере. Я назову его своим AuthAPI

Моя проблема в том, что я пытаюсь использовать свой AuthAPI для проверки токенов на других API

У меня есть API, я назову свой CustomerAPI. Я пытаюсь использовать Identity Server на AuthAPI для авторизации моих конечных точек, но пока мне не повезло

Я тестирую эту функциональность с помощью следующих шагов:

  1. Создать учетную запись на AuthAPI
  2. Подтвердить адрес электронной почты учетной записи AuthAPI
  3. Аутентифицироваться на AuthAPI, чтобы получить мой токен-носитель
  4. Сделать запрос к AuthAPI, чтобы получить идентификатор учетной записи для использования в моем маршруте конечной точки CustomerAPI
  5. Поместите этот токен-носитель в заголовок авторизации и сделайте запрос конечной точке CustomerAPI с атрибутом авторизации

Мой авторизованный вызов AuthAPI, использующий мой токен-носитель, аутентифицируется и успешно возвращается. Я вижу в своих журналах отладки Identity Server следующую фразу:

AuthenticationScheme: Bearer was successfully authenticated.

Когда я пытаюсь использовать тот же токен-носитель для моей конечной точки CustomerAPI, я получаю следующий результат отладки:

AuthenticationScheme: Bearer was not authenticated.

Я предполагаю, что это произошло из-за сбоя конфигурации моего CustomerAPI, но еще не удалось найти, в чем проблема, вот моя конфигурация:

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;                
            })
            .AddJwtBearer(o =>
            {
                o.Authority = "http://authapi/";
                o.Audience = "http://authapi/";
                o.RequireHttpsMetadata = false;
            });

Любая помощь или руководство будут очень благодарны, спасибо!

--- Редактировать --- Требуемый файл конфигурации:

    public class Config
    {
        public static IEnumerable<IdentityResource> GetIdentityResource()
        {
            return new List<IdentityResource>
            {
                new IdentityResources.OpenId(),
                new IdentityResources.Email(),
                new IdentityResources.Profile()
            };
        }

        public static IEnumerable<ApiResource> GetApiResources()
        {
            return new List<ApiResource>
            {
                new ApiResource("customerapi", "Customer API")
                {
                    Scopes = {new Scope("api.read")}
                }
            };
        }

        public static IEnumerable<Client> GetClients()
        {
            return new []
            {
                new Client
                {
                    RequireConsent = false,
                    ClientId = "demo_site",
                    ClientName = "Demo Site",
                    AllowedGrantTypes = GrantTypes.Implicit,
                    AllowedScopes = {"openid", "email", "profile", "api.read"},
                    RedirectUris = {"http://localhost:4200/auth-callback"},
                    PostLogoutRedirectUris = {"http://localhost:4200/"},
                    AllowedCorsOrigins = {"http://localhost:4200"},
                    AllowAccessTokensViaBrowser = true,
                    AccessTokenLifetime = 3600
                }
            };
        }
    }
...