2013-03-07 23 views
3

每当我们使用DotNetOpenAuth刷新我们的授权时,新的Oauth2.0RefreshToken包含在响应中。 由于RefreshToken本身是一个长寿命的标志,我们在每次请求后获得新的RefreshToken的原因是什么?如何使用DotNetOpenAuth刷新授权后收到的新RefreshToken

什么是处理这个新RefreshTokens的最佳方式,我们是否应该每次刷新我们的授权时存储新的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; 
} 
+0

谢谢!您的问题帮助我了解了如何使用DotNetOpenAuth库进行带有刷新令牌的简单OAuth2授权。 – palswim 2013-11-19 00:32:16

回答

4

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

从我对工作组讨论的理解来看,原因是通过定期更改客户端上的刷新令牌,授权服务器可以检测刷新令牌是否已意外泄漏给第三方。由于批准的客户端和第三方都将使用相同的刷新令牌,因此如果一方接收到新的刷新令牌,则另一方仍会使用旧令牌。当旧的进入时,有两个客户端使用同一个刷新令牌的事实会使安全漏洞的auth服务器关闭,并且可能会关闭它。

+0

非常感谢这个深入的答案! – 2013-03-09 15:42:28

相关问题