当前位置: 首页 > 知识库问答 >
问题:

如何测试我的令牌是否使用 IdentityServer4 刷新?

卫甫
2023-03-14

我用IdentityServer4创建了一个令牌我复制了这个例子我只是修改了这个

在身份服务器中-

public static IEnumerable<Client> GetClients()

{
    return new List<Client>
    {
        new Client
        {
            ClientId = "client",
            AllowedGrantTypes = GrantTypes.ClientCredentials,
            ClientSecrets =
            {
                new Secret("secret".Sha256())
            },
            AllowedScopes = { "tbtsmth" },
            AccessTokenLifetime = 10,
            IdentityTokenLifetime = 10 

        }
    };
}

我的令牌应该在10秒后到期,并且每10秒我有一个刷新令牌,但我不知道如何测试它。我做类似的事情:

var tokenHandler = new JwtSecurityTokenHandler();
var jwtSecurityToken = tokenHandler.ReadJwtToken(tokenResponse.AccessToken);

Thread.Sleep(10000);

if (jwtSecurityToken.ValidTo < DateTime.UtcNow)
    Console.WriteLine("expired");
else
    Console.WriteLine("not expired");

它退回已过期的商品,我认为它应该退回我未过期的商品,因为它会被刷新。

共有1个答案

云瑞
2023-03-14

客户端凭据流中没有刷新令牌。从文档中:

以下流支持刷新令牌:授权码、混合和资源所有者密码凭据流。

不涉及任何用户,因此不需要刷新令牌。您只需请求一个新令牌。

那么什么时候可以使用刷新令牌呢?当在用户流中需要访问令牌时,例如,当您有一个不使用cookie或需要访问api的客户端时。

Jwt访问令牌的问题是令牌过期。一旦过期,需要用户交互来请求新的访问令牌。因为这不是一个好的用户体验,所以客户端可以使用刷新令牌来请求新的访问令牌。

刷新令牌与jwt访问令牌不同。刷新令牌不必是Jwt令牌,它保留在服务器端,并且比访问令牌的生命周期(过期)长得多,并且可以撤销。撤消刷新令牌意味着不能再使用刷新令牌。

将刷新令牌视为允许客户端请求新访问令牌的某种密钥。

刷新令牌永远不会自动进行,因此您必须在客户端中构建逻辑来刷新令牌。以下是有关如何为允许的流刷新令牌的示例。

从我这里的回答来看,流程可能是这样的:

    < li >用户登录,接收JWT访问令牌(5分钟)和刷新令牌1代码(48小时)。刷新令牌1保存在服务器上。 < li >五分钟后:访问令牌过期 < li >使用刷新令牌1请求新的访问令牌。 < li >用户收到新的访问令牌(5分钟)和刷新令牌2代码(48小时)。令牌1从存储器中移除,令牌2被添加到存储器中。 < li >这种情况会持续几个小时。 < li >用户有两天没有使用该应用程序 < li>50小时后:由于两个令牌都已过期,用户必须再次登录。重置流程。
 类似资料:
  • 我在自己的Web API上使用Oauth2,在Web应用程序上使用ASP.NET C#来使用该API。在我的web应用程序上,我正在进行HttpWebRequests。当我的访问令牌过期时,我调用一个方法“refreshToken”,该方法发出请求以获取新的访问令牌。这工作很好,没有问题...除了我得到的响应包含一个新的刷新令牌???我在等新的访问令牌。我甚至认为在没有再次传递凭据的情况下这是不可

  • 我正在使用Cognito用户池对系统中的用户进行身份验证。成功的身份验证将提供一个ID令牌(JWT)、一个访问令牌(JWT)和一个刷新令牌。这里的文档清楚地提到了刷新令牌可以用于刷新访问令牌,但没有提到如何使用。我的问题是,一旦我的访问令牌过期,我如何使用存储的刷新令牌再次刷新我的访问令牌? 我搜索了JavaScript SDK,但找不到任何方法来做同样的事情。我肯定错过了什么。 我还想通过Lam

  • 我使用IdentityServer4验证angular 4客户端以保护WebApi。但我在授权的情况下进入了401。我需要一种调试访问令牌验证过程的方法来帮助我解决问题。

  • 问题内容: 我们的React Native Redux应用程序使用JWT令牌进行身份验证。有许多操作需要此类令牌,​​并且例如在应用加载时会同时分派许多令牌。 例如 双方并要求JWT。我们将令牌保存在和中。我的问题是如何处理令牌到期。 最初,我将使用中间件来处理令牌到期 } 我遇到的问题是,对于令牌和操作,都会刷新令牌,因为在分发令牌和令牌时,令牌将过期。理想情况下,我想“暂停”需要身份验证的操作

  • 我遇到的问题是,和操作都将刷新令牌,因为在分派时,令牌将过期。理想情况下,我希望“暂停”需要身份验证的操作,直到令牌刷新。有没有一种方法可以用中间件做到这一点?

  • 我遵循了文档页面中的快速启动,使用IdentityServer进行身份验证,对三个服务(IdentityServer、一个Api服务、一个ASPNET MVC应用程序)进行了有效配置。 一切工作都很完美(登录、登录、授权等),直到access_token过期1小时后。此时,MVC应用程序开始从应用编程接口服务接收(正确地)401(因为令牌过期了)。那时,我知道我应该使用refresh_token来