python - 如何使用 Python 获取 oauth2 access_token

标签 python google-oauth

对于一个项目,有人给了我我在 Postman 中用于测试目的的这些数据:

在 Postman 中,这非常有效。

授权网址:https://api.example.com/oauth/access_token
访问 token 网址:https://api.example.com/access_token
客户编号:abcde
客户端密码:12345
代币名称:access_token
授予类型:客户凭证

我只需要取回访问 token 。

一次,我获得了可以继续的访问 token 。

我已经尝试了几个 Python 包和一些自定义代码,但不知何故,这个看似简单的任务开始让人头疼。

我试过的一个例子:

import httplib
import base64
import urllib
import json

def getAuthToken():
    CLIENT_ID = "abcde"
    CLIENT_SECRET = "12345"
    TOKEN_URL = "https://api.example.com/oauth/access_token"

    conn = httplib.HTTPSConnection("api.example.com")

    url = "/oauth/access_token"

    params = {
        "grant_type": "client_credentials"
    }

    client = CLIENT_ID
    client_secret = CLIENT_SECRET

    authString = base64.encodestring('%s:%s' % (client, client_secret)).replace('\n', '')

    requestUrl = url + "?" + urllib.urlencode(params)

    headersMap = {
        "Content-Type": "application/x-www-form-urlencoded",
        "Authorization": "Basic " + authString
    }

    conn.request("POST", requestUrl, headers=headersMap)

    response = conn.getresponse()

    if response.status == 200:
        data = response.read()
        result = json.loads(data)

        return result["access_token"]

然后我得到了这个:

import requests
import requests.auth

CLIENT_ID = "abcde"
CLIENT_SECRET = "12345"
TOKEN_URL = "https://api.example.com/oauth/access_token"
REDIRECT_URI = "https://www.getpostman.com/oauth2/callback"

def get_token(code):
    client_auth = requests.auth.HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET)
    post_data = {"grant_type": "client_credentials",
                 "code": code,
                 "redirect_uri": REDIRECT_URI}
    response = requests.post(TOKEN_URL,
                             auth=client_auth,
                             data=post_data)
    token_json = response.json()
    return token_json["access_token"]

如果这行得通,我应该在code 参数中输入什么

我真的希望有人能帮我解决这个问题。

提前致谢。

最佳答案

我终于能够通过使用 rauth 来完成它库(pip install rauth)。

这是我使用的代码:

from rauth import OAuth2Service

class ExampleOAuth2Client:
    def __init__(self, client_id, client_secret):
        self.access_token = None

        self.service = OAuth2Service(
            name="foo",
            client_id=client_id,
            client_secret=client_secret,
            access_token_url="http://api.example.com/oauth/access_token",
            authorize_url="http://api.example.com/oauth/access_token",
            base_url="http://api.example.com/",
        )

        self.get_access_token()

    def get_access_token(self):
        data = {'code': 'bar',  # specific to my app
                'grant_type': 'client_credentials', # generally required! 
               }

        session = self.service.get_auth_session(data=data, decoder=json.loads)

        self.access_token = session.access_token

关于python - 如何使用 Python 获取 oauth2 access_token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36719540/

相关文章:

php - Google Oauth2 身份验证大约需要 15 秒

python - (1054, "Unknown column ' 日期'在 'field list'")

python - 如何修复 "' pandas.compat' has no attribute 'string_types' “python3 中的错误

go - oauth2 无法获取 token : bad request

youtube - 使用youtube API登录并保存信息以供以后使用,例如为我的客户上传视频等

python - 使用刷新 token 刷新谷歌访问 token

python - SQLite 如何向列中添加数据?

python - Pandas 'replace' 如何在 'loc' 之后工作?

python - 在 python/pandas 中按月分组每日数据,而 firSTLy 按用户 id 分组

python-2.7 - app_identity_service.GetAccessToken() 需要比可用配额更多的配额