UnauthorizedAccessException, использующий API, который требует токен доступа - PullRequest
0 голосов
/ 28 сентября 2018

Я занимаюсь разработкой приложения .netcore 1.1 MVC, которое является клиентом Open ID Connect с использованием авторизации с IdentityServer4.Он также использует API, который требует авторизации.

В настоящее время, когда срок действия маркера доступа истекает, и выполняется вызов API, я испытываю System.UnauthorizedAccessException 'попытку выполнить несанкционированный доступ.операция.

Я не могу понять, как это исправить.

Так настроен клиент (обратите внимание, что API добавлен в область):

В автозагрузке.cs, я зарегистрировал API, который я хочу использовать, следующим образом:

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions()
       {
           AuthenticationScheme = "oidc",
                SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme,
                Authority = identityServerServiceOptions.GetValue<string>("AuthorityUrl"),
                RequireHttpsMetadata = false,
                ResponseType = OpenIdConnectResponseType.CodeIdToken,
                ClientId = identityServerServiceOptions.GetValue<string>("ClientId"),
                ClientSecret = identityServerServiceOptions.GetValue<string>("ClientSecret"),
                GetClaimsFromUserInfoEndpoint = true,
                TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = true,
                    NameClaimType = "name",
                    RoleClaimType = "role"
                },
                SaveTokens = true,

                Scope =
                {
                    "[APIName]",
                    "roles",
                    "offline_access"
                }
            });

Клиент имеет следующие области, определенные в таблице ClientScopes IdentityServer4:

  • роли
  • электронная почта
  • профиль
  • openid
  • offline_access
  • [APIName]

Также [APIName] было добавлено к ApiResources, ApiClaims и ApiScopes.

Я уже пробовал:

  • Установка AllowOfflineAccess в клиентах на «true»
  • Установка UpdateAccessTokenClaimsOnRefresh в клиентах на «true»'

1 Ответ

0 голосов
/ 29 сентября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...