通过命令行获取Auth0访问令牌

ghg1uchk  于 2022-10-08  发布在  其他
关注(0)|答案(1)|浏览(199)

我被迫使用一个非人体工程学的网站(让我们称其为zzz),该网站使用auth0进行身份验证,并在内部使用rest API,我强烈希望直接使用该API。

使用浏览器检查器,我可以看到该API是如何工作的,如果我使用在那里找到的JWT访问令牌(使用Authorization: Bearer传输),我可以编写访问API的脚本。

我面临的问题是,在给定我的用户名和密码的情况下,通过auth0获得这样的JWT访问令牌。

当我使用基于浏览器的登录时,我看到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

(为方便起见,换行符)

我现在可以手动输入用户名和密码,然后登录,这似乎执行了以下步骤:

  • 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似乎按下了提交按钮,导致发布到
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以提取wctxwresult参数。

所以我的问题是:

有没有其他方法可以获得access_token,更方便地使用命令行cURL编写脚本,或者使用一些简单的python代码/库?

我已经尝试了在Auth0文档网站上找到的各种东西(例如,https://auth0.com/docs/api-auth/tutorials/password-grant#realm-support),,但无法使它们工作;可能是因为它们需要由zzz在其Auth0设置中显式启用?

e5nszbig

e5nszbig1#

正确的方法应该是区分以下几个方面:

  • 非人体工程学网站(客户端A)-使用隐式流程
  • Web API
  • 客户端B(您的命令行)-使用不同的流

在Auth0中,您应该为客户端B配置一个新的OAuth客户端条目,它可能应该使用不同的流-也许是您提到的密码授予。

你至少可以通过这种方式得到一个代金券。API是否接受来自您的调用可能取决于其他设计方面。

相关问题