【发布时间】:2017-04-20 23:28:00
【问题描述】:
我对 OAuth2 中的刷新令牌有点困惑。 就像它说的访问令牌限制了黑客可以使用用户凭据的 1 小时时间窗口,并且刷新令牌是可用于重新创建访问令牌的长效令牌。
如果有人从 cookie 中窃取了访问令牌,我会感到困惑,他也可以窃取刷新令牌,并且可以使用刷新令牌来创建新的访问令牌,因为我在 JQuery(客户端)中有 ajax 请求
注意:我已经创建了 ajax 请求以在服务器端发送刷新令牌,我在此处附加了客户端 ID 和机密以及授权类型刷新令牌。
我已在 cookie 中保存了访问令牌和刷新令牌,并使用以下 ajax 请求获取新的访问令牌
jQuery(document).ajaxError(function(event, jqXHR, ajaxSettings, thrownError) {
//console.log('event');console.log(event);
//console.log('jqXHR');console.log(jqXHR);
//console.log('ajaxSettings');console.log(ajaxSettings);
//console.log('thrownError');console.log(thrownError);
if(jqXHR.status == 403)
{
console.log('User is not Loged in Redictet to Login Page');
}
if(jqXHR.status == 401)
{
var refresh_token = Cookies.get('refresh_token');
if(refresh_token != undefined)
{
$.ajax({
url: CONNECT_API_URL+'/refresh-token',
type: "POST",
data:{ refresh_token: refresh_token },
success: function(response, status, jqXHR){
if(response.access_token != undefined)
{
var expires_in = new Date(new Date().getTime() + response.expires_in * 1000);
var access_token = response.token_type+' '+response.access_token;
Cookies.set('access_token', access_token, { expires: expires_in });
Cookies.set('refresh_token', response.refresh_token, { expires: 14 });
$.ajax(ajaxSettings); // Re send same ajax request with access token in cookie has been set
}
else
{
console.log('Redirect to login page.');
}
},
});
}
}
});
我应该如何使用刷新令牌来增强安全性?
【问题讨论】:
-
您能否告知您在应用程序中使用了哪个 Oauth2 授权流程?另外,是否提到这是单页应用程序或服务器端渲染或移动应用程序?
-
注意 OAuth2 必须与 SSL/TLS (HTTPS) 一起使用来加密从客户端到服务器的通信通道。
-
实际上这是使用 REST API 服务的 Web 应用程序,我正在使用 OAuth2 grant_type 密码。
-
@ViníciusFagundes 即使它是 HTTPS,但我认为可能存在一些 XSS,因此攻击者可以获得 cookie 刷新令牌和访问令牌,在这种情况下,刷新令牌如何帮助提高安全性
-
@vaya 我已经创建了 REST 服务,它从用户那里获取用户名密码,在服务器端我将 ClientId 和密码附加到密码授予类型
标签: php oauth-2.0 zend-framework2 laminas-api-tools refresh-token