开发环境的Auth0回调重定向

时间:2017-10-06 14:52:13

标签: auth0

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。我无法找到适合此问题的解决方案。希望有人也遇到这种情况。

2 个答案:

答案 0 :(得分:0)

检查上面的内容,我看到的行为是不同的 - Auth0正确使用传入的redirectUri。你应该仔细检查你的设置/配置有问题的所有设置。下面是调查结果的回顾:

enter image description here

客户端应用程序(开箱即用的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