Ваш код содержит два разных типа грантов. Различные типы предоставления в 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
}