Auth0有一个很棒的文档,有时即使你读了1000遍,它对我个人也没有意义,所以希望其他人也有类似的问题。
我想要什么?
我从本地主机环境登录,该环境使用auth0.WebAuth对象编译,如下所示:
auth0 = new auth0.WebAuth({
clientID: 'adscsdcascascascasdcsdac',
domain: 'webatom.auth0.com',
responseType: 'token id_token',
audience: 'https://api.webatom.com',
redirectUri: 'http://localhost:5000/callback',
scope: 'openid profile'
});
我希望它将开发人员重定向到localhost。
如果我从生产environemnt登录(或用户登录),即。来自jtrade.pro我希望将它们重定向到jtrade.pro/callback。显然,生产版本中的对象看起来像这样(使用不同的重定向uri):
auth0 = new auth0.WebAuth({
clientID: 'adscsdcascascascasdcsdac',
domain: 'webatom.auth0.com',
responseType: 'token id_token',
audience: 'https://api.webatom.com',
redirectUri: 'http://jtrade.pro/callback',
scope: 'openid profile'
});
据我所知,这就是你如何做到的。传递uri,如果uri在客户端设置中列入白名单并以逗号分隔,您将被重定向到所需的页面。美丽,我列入白名单并以逗号分隔。
最后一步,托管页面。
var lock = new Auth0Lock(config.clientID, config.auth0Domain, {
auth: {
redirectUrl: config.callbackURL,
responseType: 'token',
params: config.internalOptions
},
assetsUrl: config.assetsUrl,
allowedConnections: connection ? [connection] : null,
rememberLastLogin: !prompt,
language: language,
languageDictionary: languageDictionary,
theme: {
},
prefill: loginHint ? { email: loginHint, username: loginHint } : null,
closable: false,
});
重定向URL设置为config.callbackURL,据我所知,auth0会查看白名单,看看是否有其中一个提供的uri,如果是,则重定向用户。
但是,这不会发生。 Auth0仅将用户重定向到白名单中的第一个uri。我无法找到适合此问题的解决方案。希望有人也遇到这种情况。
答案 0 :(得分:0)
检查上面的内容,我看到的行为是不同的 - Auth0正确使用传入的redirectUri。你应该仔细检查你的设置/配置有问题的所有设置。下面是调查结果的回顾:
客户端应用程序(开箱即用的React示例):
https://demo.auth0.com/login?client=zalZ1MxxxxxxxxxxxZ5xfZga&protocol=oauth2&redirect_uri=http://localhost:3000/callback&response_type=token id_token&scope=openid&audience=https://demo.auth0.com/userinfo&nonce=2OfVCpn-4Ka9k33h50Y5YjNgw8nsxE5B
https://demo.auth0.com/login?client=zalZ1MxxxxxxxxxxxZ5xfZga&protocol=oauth2&redirect_uri=http://localhost:3001/callback&response_type=token id_token&scope=openid&audience=https://demo.auth0.com/userinfo&nonce=kDNsP5Sfp1M0ydJ57h7eG.S_sNkO7gRs
转换为以下各项:
<script src="https://cdn.auth0.com/js/lock/10.18/lock.min.js"></script>
<script>
// Decode utf8 characters properly
var config = JSON.parse(decodeURIComponent(escape(window.atob('@@config@@'))));
config.extraParams = config.extraParams || {};
var connection = config.connection;
var prompt = config.prompt;
var languageDictionary;
var language;
if (config.dict && config.dict.signin && config.dict.signin.title) {
languageDictionary = { title: config.dict.signin.title };
} else if (typeof config.dict === 'string') {
language = config.dict;
}
var loginHint = config.extraParams.login_hint;
var lock = new Auth0Lock(config.clientID, config.auth0Domain, {
auth: {
redirectUrl: config.callbackURL,
responseType: (config.internalOptions || {}).response_type ||
config.callbackOnLocationHash ? 'token' : 'code',
params: config.internalOptions
},
assetsUrl: config.assetsUrl,
allowedConnections: connection ? [connection] : null,
rememberLastLogin: !prompt,
language: language,
languageDictionary: languageDictionary,
theme: {
//logo: 'YOUR LOGO HERE',
//primaryColor: 'green'
},
prefill: loginHint ? { email: loginHint, username: loginHint } : null,
closable: false,
// uncomment if you want small buttons for social providers
// socialButtonStyle: 'small'
});
lock.show();
</script>
使用默认的Auth0 HLP,您将拥有以下内容:
ssh slave1 -t 'pkill script.sh'
这正确地在原始回调网址(redirectUri)中指定的端口上回拨客户端。
答案 1 :(得分:0)
问题在于,不是调用auth0.authorize()方法,而是将用户重定向到/ authorize端点,而是硬编码了url并将用户重定向到/ login端点,并且没有在params中包含任何数据(即在url字符串内)。您不必使用该方法,您也可以根据需要自行构造字符串。可以找到该方法的完整指南here。