只能获得长访问令牌或刷新令牌

时间:2017-09-21 02:03:07

标签: react-native auth0

我正在使用react-native-auth0 sdk。以下是我使用auth0进行facebook登录的方法。

auth0
    .webAuth
    .authorize({
        scope: 'openid profile email offline_access', 
        //audience: config.auth0.audience,      //option (1)
        audience: auth0Domain+'/userinfo',      //option (2)
        responseType: 'token id_token',
    })
    .then(auth0Cred => {
        console.log("Auth0 Auth Result: "+JSON.stringify(auth0Cred));
        dispatch(signInAuth0Successful(auth0Cred));
        if (callback != null) {
            callback(auth0Cred);
        }

        dispatch(saveAuth0RefreshToken(auth0Cred.refreshToken));

        //return auth0Cred;
    })
    .catch(error => console.log(error));

对于观众来说,我有两种选择。

当我使用选项(1)时,它给了我(长版本)accessToken,idToken,scope,expiresIn,tokenType。

当我使用选项(2)时,它给了我(不透明版本)accessToken,idToken,refreshToken,expiresIn,tokenType。

但是,我需要同时使用long accessToken和refreshToken?有可能吗?

1 个答案:

答案 0 :(得分:1)

解释 - 当您为自己的API使用audience时,您选择接收JWT访问令牌(长令牌)。如果您只需要调用Auth0 /userInfo端点,那么默认行为只是提供不透明的访问令牌 - 这是预期的行为(如果有些混乱)。

出于兴趣,如果您没有指定自己的受众,为什么还需要JWT访问令牌?

但是,要尝试解决您的请求,请检查您是否已将Auth0信息中心中的客户端设置为OIDC Conformant。在Clients -> Your Client -> Settings - Advanced下(页面底部)。屏幕截图如下:

enter image description here

如果这不起作用,我们可以探索其他选项 - 所以如果需要,请在下面留下评论。

使用OIDC一致性,您将无法收到 SPA 的刷新令牌(隐式流)。相反,请使用无声身份验证 - 请参阅reference docs here,因此请确保您的客户类型设置为Native

基于OP反馈 - 检查资源服务器是否也启用了allow_offline_access。可以使用Management API对此进行修补。或者,只需转到Auth0仪表板中的API并在API设置页面上切换开关。

enter image description here