如何使用锁v11从auth0无密码获取刷新令牌?

时间:2018-10-27 21:50:41

标签: javascript auth0 auth0-lock

我有一个老式的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吗?

1 个答案:

答案 0 :(得分:0)

正如@ user44在评论中所述,您不应在SPA(单页应用程序)中使用刷新令牌,因为它不是安全的客户端,也不是安全存储它的方法。而是使用静默身份验证方法来请求新的访问令牌。

https://auth0.com/docs/api-auth/tutorials/silent-authentication

根据您使用的是哪个SDK,可以使用auth0-spa-js或auth0.js:

(免责声明:我在Auth0担任高级解决方案工程师)


更新(2020年5月7日):

应注意,Auth0最近引入了刷新令牌轮换https://auth0.com/docs/tokens/concepts/refresh-token-rotation,Auth0 SPA SDK也支持该功能