使用DotNetOpenAuth刷新授权后,如何处理您收到的新RefreshToken



每当我们使用DotNetOpenAuth刷新授权时,响应中都会包含一个新的Oauth2.0 RefreshToken。既然RefreshToken本身是一个长寿命的令牌,那么我们在每次请求后都会得到一个新的RefreshToken的原因是什么?

处理这些新的RefreshToken的最佳方法是什么?我们应该在每次刷新授权时存储新的RefreshToken,还是应该只保留旧的RefreshToken而忽略新的?

另请参阅这段示例代码,以提供一些上下文。

var serviceDescription = new AuthorizationServerDescription
{
    ProtocolVersion = ProtocolVersion.V20,
    TokenEndpoint = new Uri(Constants.TokenEndPoint)
};
var client = new WebServerClient(serviceDescription, 
    Constants.ClientId, Constants.ClientSecret);
var authorization = new AuthorizationState() 
{ 
    //Insert our stored RefreshToken
    RefreshToken = TokenStore.Instance.RefreshToken 
};
if (client.RefreshAuthorization(authorization))
{
    //Store or ignore the new RefreshToken?
    var NewRefreshToken = authorization.RefreshToken;
}

您在响应中返回的刷新令牌可能包含也可能不包含在响应中。如果它存在,规范规定您必须在未来的所有令牌刷新中使用新的刷新令牌。如果您再次使用旧的,授权服务器可能会完全撤销授权。

根据我对工作组讨论的理解,原因是通过定期更改客户端上的刷新令牌,授权服务器可以检测刷新令牌是否意外泄露给第三方。由于批准的客户端和第三方都将使用相同的刷新令牌,因此如果一方收到新的刷新令牌时,另一方仍将使用旧的刷新令牌。当旧的出现时,有两个客户端使用相同的刷新令牌这一事实会向身份验证服务器报告安全漏洞,它可能会关闭它。

最新更新