我通过此tutorial学习OAuth2,然后我发现刷新令牌的过期时间与访问令牌相同,这是正确的吗?
答案 0 :(得分:4)
这是真的:OWIN / Katana内置的OAuth2授权服务器发布的刷新令牌始终与访问令牌具有相同的到期日期;即使您在致电ExpiresUtc
AuthenticationProperties
中指定了明确的IOwinContext.Authentication.SignIn(identity, properties)
媒体资源
@Hans提到的原因并不是很方便,但您可以在AuthenticationTokenProvider.CreateAsync
(用于OAuthAuthorizationServerOptions.RefreshTokenProvider
的类)中覆盖此行为:
只需将context.Ticket.Properties.ExpiresUtc
设置为您选择的到期日期,刷新令牌将以不同的到期日期发出:
public class RefreshTokenProvider : AuthenticationTokenProvider {
public override void Create(AuthenticationTokenCreateContext context) {
context.Ticket.Properties.ExpiresUtc = // set the appropriate expiration date.
context.SetToken(context.SerializeTicket());
}
}
您还可以查看AspNet.Security.OpenIdConnect.Server
,这是OWIN / Katana提供的具有原生RefreshTokenLifetime
的OAuth2授权服务器的分支:https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/tree/dev
app.UseOpenIdConnectServer(options => {
// Essential properties omitted for brevity.
// See https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/tree/dev/samples/Mvc for more information.
// RefreshTokenLifetime allows you to define a lifetime specific to refresh tokens,
// which is totally independent of the lifetime used for access tokens.
options.RefreshTokenLifetime = TimeSpan.FromDays(14);
});
如果你需要帮助,请不要犹豫我。
答案 1 :(得分:0)
通常情况下没有多大意义:refresh_token
存在以允许客户端在当前的到期时获得新的access_token
。如果那时refresh_token
也已过期,那么客户无法做到这一点,因此无用。
有一个(或多或少)边缘情况,但这很有用:当资源服务器在它到期之前主动拒绝access_token
时,客户端现在可以返回到授权服务器得到一个新的access_token
。