是否想试试给自己服务接上始皇论坛的认证,却因为没接触过而无从下手?
轻松动手,不用工具,使用 curl 就能尝尝成功的滋味,赶紧来试试吧!
- 取得 code
这边就拿始皇这篇的测试 client id 来使用。
直接打开始皇范例的 url,同意授权之后,导向 localhost ,没有架设服务的你,当然是打不开的。但是你可以手动从url
取得你的code
了
http://localhost:8181/oauth2/callback?code=democode&state=ttt1
- 有了 code 之后呢,就可以从
https://connect.linux.do/oauth2/token
接口领取refresh token
跟access token
。搞过 gpt 的佬友们想必对这两个名词都有 PTSD 或 c号戒断症 了。没错,就是熟悉的老朋友,access 有较短的有效期,而 refresh 则能刷新后者。
在 token 接口里,我们需要把 client id 跟 secret 中间以冒号间隔,编码成base64,然后附在 header 里。
始皇文章提供的测试用数值举例:hi3geJYfTotoiR5S62u3rh4W5tSeC5UG:VMPBVoAfOB5ojkGXRDEtzvDhRLENHpaN
你可以使用 windows 内建的编码工具
certutil -f -encode "C:\输入.txt" "C:\输出.txt"
或者你懒得创 txt 打指令,使用线上工具
我们就能得到结果为:
aGkzZ2VKWWZUb3RvaVI1UzYydTNyaDRXNXRTZUM1VUc6Vk1QQlZvQWZPQjVvamtHWFJERXR6dkRoUkxFTkhwYU4=
带进 header 里,就能向 token 请求:
curl -X POST -H "Authorization: Basic aGkzZ2VKWWZUb3RvaVI1UzYydTNyaDRXNXRTZUM1VUc6Vk1QQlZvQWZPQjVvamtHWFJERXR6dkRoUkxFTkhwYU4=" -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=authorization_code&code=你的代码&redirect_uri=http://localhost:8181/oauth2/callback" https://connect.linux.do/oauth2/token
返回例:
{"access_token":"eyJhb_A","expires_in":3600,"refresh_token":"e187zHrR7dPyzJ","token_type":"bearer"}
至此我们就能见到熟悉的老朋友了!
- 使用 access token 取得资料
curl -H "Authorization: Bearer eyJhb_A" https://connect.linux.do/api/user
返回例:
{
"id": 124,
"username": "Bee",
"name": "( ⩌ ˰ ⩌)",
"active": true,
"trust_level": 2,
"silenced": false
}
这样你的程序就能认证当前使用者的个人资料了。
在某些情况下,username
是可以被修改的,所以以 id
来辨别是比较好的方式。
- 那如果过期了怎么办?
我们把刚刚向 token 请求的内容改一下,grant_type=refresh_token
。
curl -X POST -H "Authorization: Basic aGkzZ2VKWWZUb3RvaVI1UzYydTNyaDRXNXRTZUM1VUc6Vk1QQlZvQWZPQjVvamtHWFJERXR6dkRoUkxFTkhwYU4=" -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=refresh_token&refresh_token=e187zHrR7dPyzJ" https://connect.linux.do/oauth2/token
返回例:
{"access_token":"eyJ403ioE","expires_in":3600,"token_type":"bearer"}
更新其他语言参考 ( ⩌ ˰ ⩌)