Я вынужден использовать веб-сайт 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?