有没有办法在OpenIddict中拥有不同的票证到期时间?

时间:2017-02-24 15:15:34

标签: security asp.net-core asp.net-identity openiddict

我有一个使用OpenIddict进行令牌授权(访问和刷新令牌)的应用程序,总体而言,它运行良好。问题是我的用例有多个使用相同授权服务器的应用程序类型(Web和移动)。我想为不同类型(可能使用不同的令牌端点)设置不同的到期时间,但我无法找到一种方法来覆盖使用SetAccessTokenLifetime和SetRefreshTokenLifetime设置的值。有没有办法做到这一点?

目标是为Web应用程序设置更长的访问令牌长度,并让用户在到期时重定向到登录(合理的长期到期,例如几小时)。在移动端,我想使用刷新令牌来保持用户登录。最佳做法似乎表明,在移动设备上我应该有一个非常短的令牌到期时间(例如分钟),并且刷新令牌过期。

谢谢, 杰森

1 个答案:

答案 0 :(得分:5)

  

我希望不同的类型(可能使用不同的令牌端点)有不同的到期时间,但我无法找到一种方法来覆盖使用SetAccessTokenLifetime和SetRefreshTokenLifetime设置的值。有没有办法做到这一点?

您可以使用专用的AuthenticationTicket扩展程序直接从授权终结点操作覆盖全局令牌到期值:

// Create a new authentication ticket holding the user identity.
var ticket = new AuthenticationTicket(principal, properties,
    OpenIdConnectServerDefaults.AuthenticationScheme);

ticket.SetAccessTokenLifetime(TimeSpan.FromMinutes(30));
ticket.SetAuthorizationCodeLifetime(TimeSpan.FromMinutes(1));
ticket.SetIdentityTokenLifetime(TimeSpan.FromMinutes(30));
ticket.SetRefreshTokenLifetime(TimeSpan.FromDays(2));