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

Oauth 2.0 通过命令行获取Auth0访问令牌,oauth-2.0,jwt,auth0,Oauth 2.0,Jwt,Auth0,我被迫使用一个不符合逻辑的网站(我们称之为zzz),它使用auth0进行身份验证,并在内部使用restapi,我强烈希望直接使用API 使用浏览器检查器,我可以看到API是如何工作的,如果我使用我在那里找到的JWT访问令牌(使用Authorization:Bearer传输),我可以编写访问API的脚本 我面临的问题是,给定我的用户名和密码,通过auth0获得这样一个JWT访问令牌 当我使用基于浏览器的登录时,我看到zzz将我重定向到 https://zzz.eu.auth0.com/login

我被迫使用一个不符合逻辑的网站(我们称之为
zzz
),它使用auth0进行身份验证,并在内部使用restapi,我强烈希望直接使用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
(为方便起见,请使用分线)

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

  • A
    POST
    to

    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>
    
    哪个重定向到

    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\u令牌
其他更方便使用命令行curl编写脚本的方法,或者一些简单的python代码/库


我尝试了在auth0文档网站上找到的各种方法(例如),但都没有成功;可能是因为zzz需要在其auth0设置中显式启用它们?

正确的方法应该是将它们分开:

  • 非理性网站(客户端A)-使用隐式流
  • Web API
  • 客户端B(您的命令行)-它使用不同的流
在Auth0中,您应该为客户机B配置一个新的OAuth客户机条目,它可能会使用不同的流—可能是您提到的密码授权


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

正确的方法应该是将以下两者分开:

  • 非理性网站(客户端A)-使用隐式流
  • Web API
  • 客户端B(您的命令行)-它使用不同的流
在Auth0中,您应该为客户机B配置一个新的OAuth客户机条目,它可能会使用不同的流—可能是您提到的密码授权


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

这听起来似乎只是网站/Web API管理员可以做的事情,而不是我作为普通用户可以做的事情?是的,但如果需要使用不同的流(例如自动测试客户机),那么至少在测试环境中这样做是很常见的。否则,您将被迫开发复杂且不可靠的代码,这是很糟糕的。这听起来似乎只是网站/Web API管理员可以做的事情,而不是作为普通用户的我?是的,但如果需要使用不同的流(例如,自动测试客户端),那么至少在测试环境中,这样做是很常见的。否则,您将被迫开发复杂且不可靠的代码,这将是一个糟糕的结果。
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