首页 > 解决方案 > 通过命令行获取 Auth0 访问令牌

问题描述

我被迫使用一个不符合人体工程学的网站(我们称之为zzz),它使用 auth0 进行身份验证,并在内部使用 REST API,我强烈希望直接使用 API。

使用浏览器检查器,我可以看到该 API 是如何工作的,如果我使用在Authorization: Bearer那里找到的 JWT 访问令牌(使用 传输),我可以编写对 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

(为方便起见换行)

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

尝试编写这个精确流程的脚本,这将涉及解析返回的 HTML 以提取wctxwresult参数,是非常乏味的。

所以我的问题是:

有没有办法access_token使用命令行 curl 或者一些简单的 python 代码/库来获得更方便编写脚本的其他方式?

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

标签: oauth-2.0jwtauth0

解决方案


正确的方法应该是这些之间的分离:

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

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

您至少可以通过这种方式获得令牌。API 是否接受来自您的调用可能取决于其他设计方面。


推荐阅读