解决方法
我误以为图 2 为 access_token
导致一直出现未授权访问。在我使用下面的代号获得正确的 access_token
后这个问题就解决了。我暂时还不知道图 2 的授权码是做什么用的。
问题
https://ruby-china.org/api/v3/hello.json?access_token=我的授权码
Postman 请求状态总是 401 Unauthorized
,授权信息为 WWW-Authenticate →Bearer realm="Ruby China", error="invalid_token", error_description="Access Token æ æ"
。
是我遗漏了什么地方吗?
我想使用 API 自动更新我在 Ruby-China 发的主题内容。
Authorization 选了什么呢? 一般来说直接加 header
Authorization: Bearer your_token
也是 ok 的。
#3 楼 @gyorou 我没有选择 Authorization 因为我以为 access_token
是从 URL 传过去的。我现在试试看用下你的方法。 我在 Headers 中添加了,
GET /api/v3/hello.json HTTP/1.1
Host: ruby-china.org
Authorization: acabe162311af514ab8c72db304be4983a57c2470ed55cbxxxxxx625e6741214
Cache-Control: no-cache
Postman-Token: a56d862e-95e7-f009-d1b8-30d571797ad7
依旧是同样的问题(401
)。
我参考的是 API 文档中的代码,因为我使用 GitHub 账号登陆所以并没有用户名和密码。
require "oauth2"
client = OAuth2::Client.new('client id', 'secret', site: 'https://ruby-china.org')
access_token = client.password.get_token('username', 'password')
Faraday.get("https://ruby-china.org/api/v3/hello.json?access_token=\#{access_token.token}").body
curl -X 'POST' 'https://ruby-china.org/oauth/token?code=<授权码(图2)>&client_id=<应用 ID(图1)>&client_secret=<应用私钥(图1)>&redirect_uri=<登录回调地址(图1)>&grant_type=authorization_code'
{
"access_token": "...",
"token_type": "bearer",
"expires_in": 86400,
"refresh_token": "...",
"created_at": 1476426804
}
curl -X 'GET' 'https://ruby-china.org/api/v3/hello.json?access_token=<access_token>'
{
"user": {
"id": 5,
"login": "mimosa",
"name": "Howl王",
"avatar_url": "https://l.ruby-china.com/user/avatar/5.jpg!large"
},
"meta": {
"time": "2016-10-14T12:34:58.127+08:00"
}
}
Authorization: Bearer acabe162311af514ab8c72db304be4983a57c2470ed55cbxxxxxx625e6741214
#13 楼 @li_xinyang 好吧,其实按照 postman 里面的 authorization 勾选 oauth2 然后按说明来就是了。