UnauthorizedAccessException消耗了需要访问令牌的API

时间:2018-09-28 14:50:31

标签: asp.net-mvc authentication identityserver4 openid-connect

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

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

我似乎不知道该怎么解决。

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

在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”中定义了以下范围:

  • 角色
  • 电子邮件
  • 个人资料
  • openid
  • offline_access
  • [APIName]

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

我已经尝试过:

  • 将客户端中的AllowOfflineAccess设置为“ true”
  • 将客户端中的UpdateAccessTokenClaimsOnRefresh设置为“ true”

1 个答案:

答案 0 :(得分:0)

如果您的访问令牌过期,则需要使用您在登录过程中获得的刷新令牌来续签。

相关问题