如何处理刷新令牌的到期

时间:2018-12-27 16:19:12

标签: c# .net-core identityserver4

您好,我在Identity Server 4上摆弄。我经历了一些视觉上的复数,而讲师经历了一些有关如何使用刷新令牌刷新我的访问令牌的代码。

我的问题是,刷新令牌过期时会发生什么?我试图通过设置AbsoluteRefreshTokenLifetime=15来查看会发生什么,但是随着时间的流逝,即尝试从资源服务器获取数据时,我只会得到一个错误。我希望重定向到登录页面

处理过期的刷新令牌的正确方法是什么?如果正确的方法是强制用户登录,请提供代码执行此操作,因为ids4默认情况下不执行此操作。我似乎无法使其正常工作。

new Client
{
    ClientId = "mvc2",
    ClientName = "MVC Client2",
    AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,

    ClientSecrets =
    {
        new Secret("secret".Sha256())
    },

    RedirectUris = { "http://localhost:5001/signin-oidc" },
    PostLogoutRedirectUris = { "http://localhost:5001/signout-callback-oidc" },

    AllowedScopes =
    {
        IdentityServerConstants.StandardScopes.OpenId,
        IdentityServerConstants.StandardScopes.Profile,
        "api1"
    },
    AllowOfflineAccess = true,
    RequireConsent = false,
    AccessTokenLifetime = 15,
    AbsoluteRefreshTokenLifetime = 15,
    IdentityTokenLifetime = 15
}

1 个答案:

答案 0 :(得分:0)

刷新令牌的作用域 offline_access 。这意味着客户端可以代表用户请求访问令牌 ,而无需与用户进行交互。

根据流程,当用户登录时,客户端将收到三个令牌:访问令牌,身份令牌和刷新令牌。

作为自动(离线)过程,没有登录页面。没有活动的用户,因此返回只是未经授权的。这意味着一旦过期,用户必须再次登录才能再次启动过程

在无法访问api的情况下,用户仍然可以访问网站(使用cookie)。您可以使用hybrid flow sample进行模拟。

使用IdentityServer的配置,您有几个选择。您可以选择滑动过期,这意味着刷新令牌“永不过期”。您可以将其设置为仅使用一次。

我相信默认情况下,令牌被设置为仅使用一次,每次请求新的访问令牌时,它将触发IdentityServer添加新的刷新令牌。设置固定的到期时间将确保用户必须不时登录。

就生命周期而言:

access token < refresh token <= AbsoluteRefreshTokenLifetime

只需确保刷新令牌没有过期并且没有丢失。

如果您遇到刷新令牌丢失或过期的情况,请注销用户。转到安全页面,该页面会将用户重定向到登录页面。

这取决于您的配置,但是您可以执行以下操作注销用户:

await HttpContext.SignOutAsync("Cookies");
return LocalRedirect($"/secured");

在这种情况下,由于SSO Cookie,用户仍可以处于活动状态,因此用户不必登录。

如果您想完全注销(所有网站):

await HttpContext.SignOutAsync("Cookies");
await HttpContext.SignOutAsync("oidc");