У меня есть dockerised. NET Основной проект, на котором запущен Identity Server 4, который правильно создает учетные записи, выдает токены и аутентифицирует запросы в своем собственном контейнере. Я назову его своим AuthAPI
Моя проблема в том, что я пытаюсь использовать свой AuthAPI для проверки токенов на других API
У меня есть API, я назову свой CustomerAPI. Я пытаюсь использовать Identity Server на AuthAPI для авторизации моих конечных точек, но пока мне не повезло
Я тестирую эту функциональность с помощью следующих шагов:
- Создать учетную запись на AuthAPI
- Подтвердить адрес электронной почты учетной записи AuthAPI
- Аутентифицироваться на AuthAPI, чтобы получить мой токен-носитель
- Сделать запрос к AuthAPI, чтобы получить идентификатор учетной записи для использования в моем маршруте конечной точки CustomerAPI
- Поместите этот токен-носитель в заголовок авторизации и сделайте запрос конечной точке 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
}
};
}
}