@UDvoid
2015-08-07T11:51:16.000000Z
字数 3778
阅读 3255
进入网站后,判断未登陆用户, 引导到第三方登陆平台;
在第三方登陆平台登陆并授权, 返回code, 本地利用 code 请求得到token(此时授权成功), 再利用token得到用户个人信息(公开信息), 用于创建本地用户;
用户要访问某个api信息时,由web后台利用用户uid来请求授权,并获得对应的token(具体流程同oauth2),凭借token访问api;
为 kong 实例 add api;
api信息
{
"public_dns":"mockbin.com",
"id":"01bac53d-814f-4cff-cc86-438e5a55f50b",
"target_url":"http:\/\/mockbin.com\/bin\/974b6f74-9d3c-430a-8957-baace2e44d0b",
"created_at":1438676467000,
"name":"AnKangDeRiChang_0x00"
}
为 api 配置 oauth2 插件;
此时会得到 privision_key(自动生成) 和 scope(手工配置)
为 kong 实例建立consumer;
curl -X POST http://localhost:8001/consumers/ \
--data "username=wangao" \
--data "custom_id=wangao"
返回
consumer信息
{
"consumer_id":"286edf35-9975-4c6e-ccc4-fff6ff5b6836",
"client_id":"78c0d1106e9845e0c5217afbe830553d",
"id":"f9f95714-e6db-473e-c724-0887130af34d",
"name":"Test_oauth2","created_at":1438766198000,
"redirect_uri":"http:\/\/ak.limijiaoyin.com\/",
"client_secret":"31fc46bd8be14754c7c046c72acff2e7"
}
生成 client_id, client_secret;
为用户配置 oauth2 服务;
请求 code
curl -X POST http://localhost:8000/oauth2/authorize \
--data client_id=78c0d1106e9845e0c5217afbe830553d \ // from consumer
--data "response_type=code" \
--data "authenticated_userid=ankang_0x00" \ //终端用户的id, 取值唯一, 可以采用在本地注册之后的uid, web后台提供
--data "provision_key=d9edf1d54de24d50cdbea1799133e76a" \
--data "scope=email,phone,address" \ //from oauth2 plugin of API
--header "Host: mockbin.com"
请求 token
curl -X POST http://localhost:8000/oauth2/token \
--data "code=d49e05b26fc14cb8cc61623fa63a43b6" \
--data "client_id=78c0d1106e9845e0c5217afbe830553d" \
--data "client_secret=31fc46bd8be14754c7c046c72acff2e7" \
--data "grant_type=authorization_code" \
--header "Host: mockbin.com"
{
"refresh_token":"50ff3a4a6eb64b9ccbb16543fd76d38d",
"token_type":"bearer",
"access_token":"170e6dcd8ffb4f18cf310dd53a051c9b",
"expires_in":7200
}
利用 access_token 访问 API;
curl -X GET http://localhost:8000?access_token=170e6dcd8ffb4f18cf310dd53a051c9b \
-- header "Host: mockbin.com"
为一个用户存储对应 API 的 token 信息, 此时可以成功访问相应的 API;
curl,简单的命令行http工具,用于发送各种http请求,利用的参数可以附带各种信息,辅助我们在web开发中进行高效测试;
常用的一些参数:
-i 加上头部信息
-I 只查看头部信息
-o
-O
-X 指定动词 GET, POST, PUT 等
--data 添加数据, POST常用
--header 添加头部信息
--url
--user-agent 设置user_agent(伪造)
还支持设置cookie, 远程创建目录, 模拟表单提交等等功能
curl -X POST http://localhost:8000/oauth2/authorize
--data client_id=78c0d1106e9845e0c5217afbe830553d
--data "response_type=code"
--data "authenticated_userid=ankang_0x00"
--data "provision_key=d9edf1d54de24d50cdbea1799133e76a"
--data "scope=email,phone,address"
--header "Host: mockbin.com"
curl -X POST http://localhost:8000/oauth2/token
--data "code=d49e05b26fc14cb8cc61623fa63a43b6"
--data "client_id=78c0d1106e9845e0c5217afbe830553d"
--data "client_secret=31fc46bd8be14754c7c046c72acff2e7"
--data "grant_type=authorization_code"
--header "Host: mockbin.com"
code=4f59f90460614a48ca631055e5280f8a ankang_0x00
curl -X POST http://localhost:8000/oauth2/token
--data "code=4f59f90460614a48ca631055e5280f8a"
--data "client_id=78c0d1106e9845e0c5217afbe830553d"
--data "client_secret=31fc46bd8be14754c7c046c72acff2e7"
--data "grant_type=authorization_code"
--header "Host: mockbin.com"
token
{
"refresh_token":"9c3e0189caab4a9ecafcfd2338b42b02",
"token_type":"bearer",
"access_token":"ff1aeced67ef4f3ccf99b247adf67452",
"expires_in":7200
}
code=1b81746145a246b7c66a275a2b26691b ankang_0x01
curl -X POST http://localhost:8000/oauth2/token
--data "code=1b81746145a246b7c66a275a2b26691b"
--data "client_id=78c0d1106e9845e0c5217afbe830553d"
--data "client_secret=31fc46bd8be14754c7c046c72acff2e7"
--data "grant_type=authorization_code"
--header "Host: mockbin.com"
token
{
"refresh_token":"147f4c404c2b4abecaf0f7e19dd687e8",
"token_type":"bearer",
"access_token":"5c95e552e0c244a5c41f82175026e918",
"expires_in":7200
}
Kong