identityserver4 с избыточным -oidc клиент запрашивает токен доступа - но клиент не настроен на получение токенов доступа через браузер - PullRequest
0 голосов
/ 17 мая 2018

Мой клиент identityserver4 выглядит так:

new Client {
    ClientId = "openIdConnectClient",
    ClientName = "Example Implicit Client Application",
    //AllowedGrantTypes = GrantTypes.Implicit,
    AllowedGrantTypes = GrantTypes.ClientCredentials,
    ClientSecrets =
    {
       new Secret("secret".Sha256())
    },
    AllowOfflineAccess = true,
    AllowAccessTokensViaBrowser = true,
    AccessTokenLifetime = 30,
    AllowedScopes = new List<string>
    {
        IdentityServerConstants.StandardScopes.OpenId,
        IdentityServerConstants.StandardScopes.Profile,
        IdentityServerConstants.StandardScopes.Email,
        "role",
        "customAPI.write"
    },
    RedirectUris = new List<string> {"http://localhost:8080/callback"},
    PostLogoutRedirectUris = new List<string> {"https://localhost:44330"},
    AllowedCorsOrigins = new List<string>
     {
         "http://127.0.0.1:8080",
         "http://localhost:8080",
         "*"
     },
}

В приложении реагирования мой класс userManager выглядит так:

 import { createUserManager } from 'redux-oidc';

const userManagerConfig = {
  client_id: 'openIdConnectClient',
  redirect_uri: `${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : ''}/callback`,
  //response_type: 'code id_token token',
  response_type: 'token id_token',
  scope: 'openid profile email role',
  authority: 'http://localhost:50604',
  silent_redirect_uri: `${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : ''}/silent_renew.html`,
  automaticSilentRenew: true,
  filterProtocolClaims: true,
  loadUserInfo: true,
};

const userManager = createUserManager(userManagerConfig);

export default userManager;

Вопрос в том, когда я пытаюсь вызвать мой identityserver4 из приложения-примера redux-oidc. Я получаю следующую ошибку:

Клиент запросил токен доступа - но клиент не настроен на получение токенов доступа через браузер

Надеюсь, вы поняли вопрос. Пожалуйста, кто-нибудь, помогите мне с этим. я предоставил ссылку для этого примера приложения ниже.

Пример приложения Redux-oidc

1 Ответ

0 голосов
/ 17 мая 2018

Ваш код содержит два разных типа грантов. Различные типы предоставления в Identity Server 4 предъявляют различные требования. Вот немного информации, которая поможет вам понять, какие типы вы используете. Это также может помочь вам понять, почему у вас возникла эта проблема.

GrantTypes.ClientCredentials

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

С этим типом предоставления вы отправляете запрос токена конечной точке токена и получаете обратно токен доступа, который представляет клиента. Клиент обычно должен проходить проверку подлинности с помощью конечной точки токена, используя свой идентификатор клиента и секрет.

new Client
    {
        ClientId = "client",

        // no interactive user, use the clientid/secret for authentication
        AllowedGrantTypes = GrantTypes.ClientCredentials,

        // secret for authentication
        ClientSecrets =
        {
            new Secret("secret".Sha256())
        },

        // scopes that client has access to
        AllowedScopes = { "api1" }
    }

GrantTypes.Implicit

Неявный тип предоставления оптимизирован для браузерных приложений. Либо только для аутентификации пользователя (как на стороне сервера, так и для приложений JavaScript), либо для запросов токена аутентификации и доступа (для приложений JavaScript).

В неявном потоке все токены передаются через браузер, и поэтому такие расширенные функции, как токены обновления, не допускаются. Если вы хотите передавать токены доступа через канал браузера, вам также необходимо явно разрешить это в конфигурации клиента:

Client.AllowAccessTokensViaBrowser = true;


 new Client
    {
        ClientId = "mvc",
        ClientName = "MVC Client",
        AllowedGrantTypes = GrantTypes.Implicit,

        // where to redirect to after login
        RedirectUris = { "http://localhost:5002/signin-oidc" },

        // where to redirect to after logout
        PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },

        AllowedScopes = new List<string>
        {
            IdentityServerConstants.StandardScopes.OpenId,
            IdentityServerConstants.StandardScopes.Profile
        },
        AllowAccessTokensViaBrowser = true
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...