我正在使用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?有可能吗?
答案 0 :(得分:1)
解释 - 当您为自己的API使用audience
时,您选择接收JWT访问令牌(长令牌)。如果您只需要调用Auth0 /userInfo
端点,那么默认行为只是提供不透明的访问令牌 - 这是预期的行为(如果有些混乱)。
出于兴趣,如果您没有指定自己的受众,为什么还需要JWT访问令牌?
但是,要尝试解决您的请求,请检查您是否已将Auth0信息中心中的客户端设置为OIDC Conformant
。在Clients -> Your Client -> Settings - Advanced
下(页面底部)。屏幕截图如下:
如果这不起作用,我们可以探索其他选项 - 所以如果需要,请在下面留下评论。
使用OIDC一致性,您将无法收到 SPA 的刷新令牌(隐式流)。相反,请使用无声身份验证 - 请参阅reference docs here,因此请确保您的客户类型设置为Native
。
基于OP反馈 - 检查资源服务器是否也启用了allow_offline_access
。可以使用Management API对此进行修补。或者,只需转到Auth0仪表板中的API并在API设置页面上切换开关。