python-3.x 从API重定向URL捕获访问令牌

x7yiwoj4  于 2023-05-02  发布在  Python
关注(0)|答案(1)|浏览(151)

我正在尝试捕获在身份验证过程中由API返回的访问令牌。从API执行身份验证过程的官方方法是:

from xyz_api import accessToken
app_id = "your_app_id"
app_secret = "your_app_secret"
app_session = accessToken.SessionModel(app_id, app_secret)
response = app_session.auth()

上面的代码将返回一个类似于以下的json:

{

"code" : 200,

"data" : {

"authorization_code": "some random code"

},
}

现在,使用以下代码生成URL:

authorization_code = “your_authorization_code”

app_session.set_token(authorization_code)

url = app_session.generate_token()

这就是我开始有问题的地方。
在这个阶段,API作者推荐的是:

1. Use the generated URL and copy paste it into a browser. 
2. The browser will then do the authentication and return the access token to a redirect 
url (I used http://localhost:5000).
3. Copy and paste the access token from redirect URL

我想要的:

To be able to finish the authentication and get the access_token from
python code itself.

**我尝试了什么:**使用请求。get(url),但它不起作用。

有没有什么方法可以只用 *python,而不需要打开浏览器 * 来完成这一切?

PS: The API I am trying to use is: https://api-docs.fyers.in/v1#authorization

进一步调查

经过进一步调查,我发现了以下几点:

  1. API使用oauth
    1.从API作者提供的以下代码中获取的URL
    url = app_session.generate_token()
    就像我写下面的代码一样:
oauth = OAuth2Session('app_id')
authorization_url, state = oauth.authorization_url(url)

1.在这两种情况下返回的url的格式为:
https://api.fyers.in/api/v1/genrateToken?authorization_code=some_auth_code&appId=my_app_id
1.如果我在浏览器中复制粘贴此URL,它会将access_token发送回我的redirect_url(http://localhost:5000)
1.我尝试使用以下代码使用oauth::fetch_token获取访问令牌,但失败了:
oauth1 = OAuth2Session('app_id',state=state,redirect_uri=“http://localhost:5000”)
token = oauth1。fetch_token('https://api.fyers.in/api/v1/genrateToken/',client_secret='app_secret',code='the_auth_code_returned')
真的很感谢你的帮助。

jdgnovmf

jdgnovmf1#

您只能使用Python访问。..您不需要在浏览器中手动执行任何操作。.
这个API不确定你想做什么。
我相信你注册了一个APP,得到了你的app_secret的步骤

response = app_session.auth()

authorization_code回答你

"data" : {

"authorization_code": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqaGdqZzg3NiQ3ODVidjVANjQ3NTZ2NSZnNyM2OTg3Njc5OHhkIjoiWElHVFVYVjBSSSIsImV4cCI6MTU2MTU5NzM5Ny41NjQxNTV9.Agl-Uus63NforrUEdbG7YUlPcbFXu9hLYm4akGuIBkU"

您可以像这样访问授权令牌

import json 
r = json.dumps(reponse)
authorization_token = r['data']['authorization_code']

必须将授权令牌AND you app_id作为查询字符串传递给https://api.fyers.in/api/v1/genrateToken?
真实的用户将被要求接受您的应用程序登录,如果接受,用户将被重定向到URL * 我想象你在应用程序注册中通知。
让我知道是否有意义

相关问题