使用OAuth2与用户名和密码

问题描述:

我已经获得REST API接入某个服务作为beta的一部分。我被告知授权通过OAuth2。使用OAuth2与用户名和密码

我有以下几点:

  1. ID
  2. SECRET
  3. 现场

我也是在Ruby中获得一个代码示例:

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

我想用在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第一个响应,但没有任何的排序完成了。

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

+0

是使用三向OAuth Twitter等描述这里]这个服务(https://github.com/joestump /蟒蛇-的oauth2 /维基/ Twitter的三足的OAuth)? – skyline75489

+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)