Kong是一款开源的API网关,基于Lua和Cassandra,支持分布式操作,有很强的可移植性和可扩展性。作为应用和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;
在多个Kong实例之前加上一层nginx,所有都请求都发送到某一个端口,由这个端口的nginx服务进行分发,分发到各个实例,实现负载均衡;
curl ,简单的命令行http工具,用于发送各种http请求,利用的参数可以附带各种信息,辅助我们在web开发中进行高效测试;
常用的一些参数: -i 加上头部信息 -I 只查看头部信息 -o -O -X 指定动词 GET, POST, PUT 等 --data 添加数据, POST常用 --header 添加头部信息 --url --user-agent 设置user_agent(伪造) 还支持设置cookie, 远程创建目录, 模拟表单提交等等功能