[OAuth2授权服务器]刷新令牌的过期时间需要与访问令牌不同吗?

时间:2015-06-16 10:21:42

标签: asp.net oauth oauth-2.0 owin

我通过此tutorial学习OAuth2,然后我发现刷新令牌的过期时间与访问令牌相同,这是正确的吗?

2 个答案:

答案 0 :(得分:4)

这是真的:OWIN / Katana内置的OAuth2授权服务器发布的刷新令牌始终与访问令牌具有相同的到期日期;即使您在致电ExpiresUtc

时在AuthenticationProperties中指定了明确的IOwinContext.Authentication.SignIn(identity, properties)媒体资源

https://github.com/yreynhout/katana-clone/blob/master/src/Microsoft.Owin.Security.OAuth/OAuthAuthorizationServerHandler.cs#L333

@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