首页 > 解决方案 > UnauthorizedAccessException 使用需要访问令牌的 API

问题描述

我正在开发一个 .netcore 1.1 MVC 应用程序,它是一个使用 IdentityServer4 授权的 Open ID Connect 客户端。它还使用需要授权的 API。

目前,当访问令牌过期并调用 API 时,我遇到了System.UnauthorizedAccessException '试图执行未经授权的操作'。

我似乎无法弄清楚如何解决它。

这是客户端的配置方式(注意 API 已添加到 Scope):

在Startup.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"
                }
            });

客户端在 IdentityServer4 表“ClientScopes”中定义了以下范围:

此外,[APIName] 已添加到 ApiResources、ApiClaims 和 ApiScopes。

我已经尝试过:

标签: asp.net-mvcauthenticationidentityserver4openid-connect

解决方案


如果您的访问令牌过期,您将需要使用您在登录期间获得的刷新令牌对其进行更新。


推荐阅读