在HybridAndClientCredentials授予类型中,access_token刷新是否不需要refresh_token吗?

时间:2018-10-14 13:40:42

标签: asp.net-core identityserver4

在HybridAndClientCredentials授予类型中,令牌刷新是否不需要refresh_token吗? 这个问题困扰我很长时间。 是我的设置错误还是OAuth2流修复了规则?

我的情况:

  1. 具有名为mvc的HybridAndClientCredentials客户端,并用于MVC客户端。
  2. 将客户端AccessTokenLifetime和IdentityTokenLifetime设置为60秒。
  3. 使用EntityFramework存储持久授权。

我的步骤:

  1. 我成功登录并重定向到mvc客户端页面。
  2. 删除存储在PersistedGrants表中的数据库中的refresh_token。
  3. 10分钟后,我刷新页面。网站重定向到身份服务器,最后返回mvc页面。
  4. 页面显示最新的access_token,数据库具有新的refresh_token记录。

这是我的客户设置:

            new Client
            {
                ClientId = "mvc",
                ClientName = "MVC Client",
                ClientSecrets = new List<Secret>
                {
                    new Secret("secret".Sha256())
                },
                ClientUri = $"{clientsUrl["Mvc"]}",   // public uri of the client
                AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
                AllowAccessTokensViaBrowser = false,
                RequireConsent = false,
                AllowOfflineAccess = true,
                AlwaysIncludeUserClaimsInIdToken = true,
                RedirectUris = new List<string>
                {
                    $"{clientsUrl["Mvc"]}/signin-oidc"
                },
                PostLogoutRedirectUris = new List<string>
                {
                    $"{clientsUrl["Mvc"]}/signout-callback-oidc"
                },
                AllowedScopes = new List<string>
                {
                    IdentityServerConstants.StandardScopes.OpenId,
                    IdentityServerConstants.StandardScopes.Profile,
                    IdentityServerConstants.StandardScopes.OfflineAccess,
                    "orders",
                    "basket",
                    "locations",
                    "marketing",
                    "webshoppingagg",
                    "orders.signalrhub"
                },
                Claims = new List<Claim>{ new Claim("abc","cba") },
                AccessTokenLifetime = 60,
                RefreshTokenExpiration = TokenExpiration.Sliding,
                SlidingRefreshTokenLifetime = 300,
                RefreshTokenUsage = TokenUsage.OneTimeOnly,
                AuthorizationCodeLifetime = 60,
                IdentityTokenLifetime = 60,
            }

0 个答案:

没有答案