我被迫使用一个使用zzz进行身份验证的不符合人体工程学的网站(我们称之为auth0 ),并在内部使用REST,而且我强烈希望直接使用该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 tohttps://zzz.eu.auth0.com/usernamepassword/login
带着一具身体
{ "client_id":"uz…6j","redirect_uri":"https://foo.zzz.com/callback"“,”租户“:”zzz“,"response_type":"token id_token”连接:“zzz-production user”,"username":"…“,"password":"…”,"nonce":"0G…“L7,"state":"g6…“mo","sso":true,"_intstate":"deprecated","_csrf":"fb…“KI,“听众”:“zzz-api-prod”,"auth0Client":"ey…“n0=",“作用域”:“openid读取:存储更多:作用域…”,“协议”:“oauth2”}
和的反应
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以更方便的方式使用命令行curl编写脚本,或者使用一些简单的python代码/库?
我尝试过在auth0文档网站上发现的各种东西(例如https://auth0.com/docs/api-auth/tutorials/password-grant#realm-support),但无法让它们工作;这是因为它们需要在auth0设置中由zzz显式启用?
发布于 2020-08-05 22:19:31
正确的办法应该是将这两者分开:
在Auth0中,您应该为客户机B配置一个新的OAuth客户端条目,它可能会使用不同的流--可能是您提到的密码授予。
您至少可以以这种方式获得一个令牌。API是否接受来自您的调用可能取决于其他设计方面。
https://stackoverflow.com/questions/63269868
复制相似问题