Получить токен доступа Auth0 через командную строку - PullRequest
1 голос
/ 05 августа 2020

Я вынужден использовать веб-сайт unergonomi c (назовем его zzz), который использует auth0 для аутентификации и REST API внутри, и у меня есть сильное желание использовать API напрямую.

Используя инспектор браузера, я могу увидеть, как работает этот API, и если я использую токен доступа JWT (переданный с использованием Authorization: Bearer), который я нахожу там, я могу получить доступ к API через скрипт.

Проблема, с которой я столкнулся, - получить такой токен доступа JWT через auth0, учитывая мое имя пользователя и пароль.

Когда я использую вход в систему на основе браузера, я вижу, что zzz перенаправляет меня на

https://zzz.eu.auth0.com/login
   ?state=g6…mo
   &client=uz…6j
   &protocol=oauth2
   &response_type=token%20id_token
   &redirect_uri=https%3A%2F%2Ffoo.zzz.com%2Fcallback
   &scope=openid%20read%3Amore%20scopes…
   &audience=zz-api-prod
   &nonce=0G…L7
   &auth0Client=ey…n0%3D

(разрывы строк для вашего удобства)

Теперь я могу вручную ввести имя пользователя и пароль и войти в систему, что, похоже, выполняет следующие шаги:

  • A POST на

    https://zzz.eu.auth0.com/usernamepassword/login
    

    с телом

    { "client_id":"uz…6j",
      "redirect_uri":"https://foo.zzz.com/callback",
      "tenant":"zzz",
      "response_type":"token id_token"
      "connection":"zzz-production-users",
      "username":"…",
      "password":"…",
      "nonce":"0G…L7",
      "state":"g6…mo",
      "sso":true,
      "_intstate":"deprecated",
      "_csrf":"fb…KI",
      "audience":"zzz-api-prod",
      "auth0Client":"ey…n0=",
      "scope":"openid read:stores more:scopes …",
      "protocol":"oauth2"
    }
    

    и ответом

    <form method="post" name="hiddenform" action="https://zzz.eu.auth0.com/login/callback">
      <input type="hidden" name="wa" value="wsignin1.0">
      <input type="hidden" 
             name="wresult" 
             value="ey…tE">
      <input type="hidden" name="wctx" value="…">
      <noscript>
          <p>
              Script is disabled. Click Submit to continue.
          </p><input type="submit" value="Submit">
      </noscript>
     </form>
    
  • JS на страница входа в систему, кажется, нажимает эту кнопку отправки, в результате чего POST-запрос

    https://zzz.eu.auth0.com/login/callback
    

    перенаправляется на

    https://foo.zzz.com/callback
       #access_token=ey…7Q
       &scope=openid%20read%3Amore%20scopes…
       &expires_in=7200
       &token_type=Bearer
       &state=%7B%7D
       &id_token=ey…Sg
    

    … который содержит драгоценный токен доступа, который мне нужен.

Попытка написать этот точный поток, который потребует синтаксического анализа возвращенного HTML для извлечения wctx и wresult аргументы, довольно утомительны.

Итак, мой вопрос:

Есть ли способ получить access_token каким-либо другим способом, который более удобен для сценария, используя только команду line curl или, может быть, какой-нибудь простой код / ​​библиотеку python?

Я пробовал разные вещи, которые нашел на веб-сайте документации auth0 (например, https://auth0.com/docs/api-auth/tutorials/password-grant#realm -support ), но мог не заставить их работать; предположительно потому, что они должны быть явно включены zzz в их настройках auth0?

1 Ответ

0 голосов
/ 06 августа 2020

Правильный подход должен заключаться в разделении между ними:

  • Unergonomi c веб-сайт (клиент A) - который использует неявный поток
  • веб-API
  • Клиент B (ваша командная строка) - который использует другой поток

В Auth0 вы должны настроить новую запись клиента OAuth для клиента B, который, вероятно, должен использовать другой поток - возможно, предоставление пароля вы упомянули.

По крайней мере, вы сможете получить токен таким образом. Принимает ли API вызовы от вас, может зависеть от других аспектов дизайна.

...