将OAuth2与用户名和密码

时间:2016-03-04 16:51:07

标签: python ruby authentication oauth2

作为测试版的一部分,我已获得REST API访问某个服务。我被告知授权是通过OAuth2进行的。

我得到了以下内容:

  1. ID
  2. SECRET
  3. SITE
  4. 我还在Ruby中获得了一个代码示例:

    client = OAuth2::Client.new(key, secret, :site => site) 
    token = client.password.get_token('your_email@mail.com', 'your_password') 
    access_token = OAuth2::AccessToken.new(client, token) 
    JSON.parse access_token.get("/v1/users/me").body rescue {} 
    

    我尝试使用oauth2包在python中实现相同的代码段,但没有成功:

    consumer = oauth2.Consumer(key=self._client_id,
                               secret=self._client_secret)
    request_token_url = "api.theservice.com/"
    token = oauth2.Token(key=self._email, secret=self._password)
    client = oauth2.Client(consumer, token)
    resp, content = client.request(request_token_url, "GET")
    pprint.pprint(resp)
    pprint.pprint(content)
    resp, content = client.request(request_token_url + 'v1/users/me', "GET")
    pprint.pprint(resp)
    pprint.pprint(content)
    

    第二个回复包含以下内容:

    'www-authenticate': 'Bearer realm="Doorkeeper", error="invalid_token", '
                        'error_description="The access token is invalid"',
    

    我还尝试创建一个没有令牌的oauth2.Client对象,并检查了access_token的第一个响应,但没有出现任何类型。

    在此进行身份验证的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

据我所知,oauth2和requests-oauth2都不支持用户名/密码策略。所以你需要自己获取访问令牌。

检查您的API文档以获取详细信息,但一般情况下应该是这样的:

r = requests.post('http://api.theservice.com/auth',
                  data = {'email':email, 'password': password}).json()

token = oauth2.Token(key=r['key'], secret=r['secret'])
consumer = oauth2.Consumer(key=self._client_id,
                           secret=self._client_secret)

client = oauth2.Client(consumer, token)