Identity Server 4, API не авторизован для вызова конечной точки самоанализа

1

Надеюсь, кто-то может указать мне в правильном направлении.

Я пытаюсь, чтобы клиент javascript связывался с api с помощью токенов ссылок. Я использую Identity Server 4.

Что происходит ОК:

При входе клиент javascript/webapplicatoin перенаправляется на сервер Identity для проверки пользователя и пароля. При успешном завершении пользователь перенаправляется обратно в javascript/web-приложение и имеет действительный IdentityToken

Что НЕ идет ОК:

Когда клиент/веб-приложение javascript делает вызов моему Api, запрос получает api. Затем api хочет проверить полученный токен идентичности с Identity Server, чтобы получить токен доступа, но не может связаться с сервером при следующей ошибке в консоли:

fail: IdentityServer4.Validation.ApiSecretValidator[0]
      API validation failed.
fail: IdentityServer4.Endpoints.IntrospectionEndpoint[0]
      API unauthorized to call introspection endpoint. aborting.

Довольно ясно, что Api не разрешено общаться с сервером te...

Я думаю, что у меня есть ошибка конфигурации где-то, но я просто не могу видеть, где. Пробовал всевозможные настройки, у меня нет идей, чтобы попытаться или изменить...

Это то, что я имею до сих пор:

Для клиента javascript:

Я использую пакет oidc-redux, который я использую:

var userManagerConfig = {
   authority: "http://localhost:50289",
   redirect_uri: "http://localhost:3000/callback",
   client_id : "js",
   response_type : "id_token",
   scope :"openid",
};

Конфигурации Identity Server 4

Определение клиента:

public static IEnumerable<Client> GetClients()
{
    return new List<Client>
    {
        new Client
        {
            ClientId = "js",
            ClientName = "my js client",
            AllowedGrantTypes = GrantTypes.Implicit,
            RequireClientSecret = false,
            RequireConsent = false,
            RedirectUris           = { "http://localhost:3000/callback" },
            PostLogoutRedirectUris = { "http://localhost:3000" },
            AllowAccessTokensViaBrowser = false,
            AllowedCorsOrigins =     { "http://localhost:3000" },
            AllowedScopes =
            {
                IdentityServerConstants.StandardScopes.OpenId,
                IdentityServerConstants.StandardScopes.Profile,
                "myApi"
            }
        }
    };
}

Определение ресурсов Api:

public static IEnumerable<ApiResource> GetApiResources()
{
    return new List<ApiResource>
    {
        new ApiResource("myApi")
        {
            ApiSecrets =
            {
                new Secret("superweaksecret")
            }
        }
    };
}

в службе настройки Я добавляю все это вместе в контейнер:

// configure identity server with in-memory stores, keys, clients and scopes
services.AddIdentityServer()
    .AddDeveloperSigningCredential()
    .AddInMemoryPersistedGrants()
    .AddProfileService<CustomClaimService>()
    .AddInMemoryIdentityResources(Config.GetIdentityResources())
    .AddInMemoryApiResources(Config.GetApiResources())
    .AddInMemoryClients(Config.GetClients())
    .AddAspNetIdentity<ApplicationUser>();

Настройка Api

Основанный на.net Core, в методе ConfigureService у меня есть следующее:

services.AddAuthentication("Bearer")
    .AddIdentityServerAuthentication(options =>
    {
       options.Authority = "http://localhost:50289";
       options.RequireHttpsMetadata = false;
       options.ApiSecret = "superweaksecret";
       options.ApiName = "myApi";
       options.EnableCaching = false;

    });

Надеюсь, кто-то увидит мою ошибку.

Если я пропустил информацию или код, необходимые для надлежащего абрисера, сообщите мне.

С уважением, Roel

  • 0
    Я не понимаю вопроса. Из вашего описания (и кода) ваш API должен действовать как защищенный ресурс, а не как клиент. В этом случае не требуется извлекать токены. Это должно требовать их. Поправь меня, если я что-то не так понял.
  • 0
    Установка состоит из трех частей: клиента JavaScript, Identity Server и Api. Клиент javascript и сервер Identity обмениваются данными как следует. Это означает, что из моего веб-приложения я направляюсь на Identity Server для входа в систему, и после успешного входа в систему у меня есть IdentityToken. Затем клиент javascript / webapp запрашивает конечную точку API. И тогда возникает ошибка, это происходит, когда API пытается проверить / получить необходимую информацию для аутентификации клиента на Identity Server. Сам Api не имеет права общаться с Identity Server
Показать ещё 17 комментариев
Теги:
jwt
identityserver4
oidc

1 ответ

0
Лучший ответ

IdentityServer ожидает, что разделяемые секреты будут хешированы.

new ApiResource("myApi") {
    ApiSecrets = {
            new Secret("superweaksecret".Sha512())
    }
}
  • 0
    Спасибо, это была та часть, которую мне не хватало в итоге ....

Ещё вопросы

Сообщество Overcoder
Наверх
Меню