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

Jas*_*son 2 security asp.net-identity asp.net-core openiddict

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

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

谢谢你,杰森

Kév*_*let 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));
Run Code Online (Sandbox Code Playgroud)