每当我们使用DotNetOpenAuth
刷新授权时,响应中都会附上新的Oauth2.0
RefreshToken
。
由于RefreshToken
本身是一个长期存在的令牌,我们在每次请求后得到一个新的RefreshToken
是什么原因?
处理这个新的RefreshTokens的最佳方法是什么,我们每次刷新授权时都应该存储新的RefreshToken
,还是应该保留旧RefreshToken
并忽略新的?{/ p>
另请参阅此示例代码以提供一些上下文。
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;
}
答案 0 :(得分:4)
您在响应中返回的刷新令牌可能包含也可能不包含在响应中。如果它存在,则规范表明您必须使用新的刷新令牌进行所有将来的令牌刷新。如果再次使用旧授权服务器,授权服务器可能会完全撤销授权。
根据我对工作组讨论的理解,其原因是通过定期更改客户端上的刷新令牌,授权服务器可以检测刷新令牌是否被意外泄露给第三方。由于批准的客户端和第三方都将使用相同的刷新令牌,如果一方收到新的刷新令牌,另一方仍将使用旧的刷新令牌。当旧版本进入时,有两个客户端使用相同的刷新令牌这一事实会使安全漏洞的auth服务器失效,并且可能会将其关闭。