我有一个老式的angularJs应用程序,该应用程序有两个页面。在这两个页面上,我都包含auth0锁定脚本。
<script src="https://cdn.auth0.com/js/lock/11.9.0/lock.min.js"></script>
在这两个页面中,其中一个具有以下js,用于指定auth0锁以允许用户登录:
new Auth0LockPasswordless(configuration.id,configuration.domain,
{
allowedConnections: ['email'],
passwordlessMethod: "link",
auth: {
redirectUrl: configuration.redirectUrl,
responseType: 'token id_token',
params: {
scope: 'openid profile email offline_access'
}
}
}).show();
在点击电子邮件中的链接后,其他页面负责回叫。
var lock = new Auth0LockPasswordless(configuration.id, configuration.domain);
lock.on('authorization_error',
function(authResult) {
console.log("DEBUG::AUTHRESULT::", authResult);
});
lock.on('authenticated',
function(authResult) {
console.log("DEBUG::AUTHRESULT::", authResult);
});
现在,我已经在请求范围内设置了offline_access
,并且在我的本地环境中,在进行身份验证时会提示您提供其他权限(以便通过)。但是,当我从lock.on('authenticated', function(authResult)..
刷新日志检查日志时,始终为空。
网络上有一些相互矛盾的文档,其中关于锁的建议将不会返回刷新令牌。有人能确认此代码是否应产生有效的refreshToken吗?
答案 0 :(得分:0)
正如@ user44在评论中所述,您不应在SPA(单页应用程序)中使用刷新令牌,因为它不是安全的客户端,也不是安全存储它的方法。而是使用静默身份验证方法来请求新的访问令牌。
https://auth0.com/docs/api-auth/tutorials/silent-authentication
根据您使用的是哪个SDK,可以使用auth0-spa-js或auth0.js:
https://auth0.github.io/auth0-spa-js/classes/auth0client.html#gettokensilently
https://auth0.com/docs/libraries/auth0js/v9#polling-with-checksession-
(免责声明:我在Auth0担任高级解决方案工程师)
更新(2020年5月7日):
应注意,Auth0最近引入了刷新令牌轮换https://auth0.com/docs/tokens/concepts/refresh-token-rotation,Auth0 SPA SDK也支持该功能