Kong技術調研&curl簡介
Kong
Kong是一款開源的API網關,基于Lua和Cassandra,支持分布式操作,有很強的可移植性和可擴展性。作為應用和API之間的中間層,加上眾多功能強大的插件,可以實現認證授權、訪問控制等功能;
- 本文討論授權時的一般流程和基本使用:
- kong前加上一層web后臺對應consumer,包括終端用戶的創建,一個consumer相當于一個注冊的應用;
- 對于每一個用戶,第三方認證成功后,后臺得到用戶信息,后臺將用戶信息提交給kong驗證對應的API, 得到token;
- 對于每一個用戶和每一個API都有一個access_token,通過consumer授權;
- 利用authorization_userid對應終端用戶; </ul> </li>
- 項目主頁 </ul>
- 進入網站后,判斷未登陸用戶, 引導到第三方登陸平臺;
- 在第三方登陸平臺登陸并授權, 返回code, 本地利用 code 請求得到token(此時授權成功), 再利用token得到用戶個人信息(公開信息), 用于創建本地用戶;
- 用戶要訪問某個api信息時,由web后臺利用用戶uid(或其他的唯一標識)來請求授權,并獲得對應的token(具體流程同oauth2),憑借token訪問api; </ol>
-
為 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" }
</li> -
為 api 配置 oauth2 插件;此時會得到 privision_key(自動生成) 和 scope(手工配置)
</li> -
為 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;
</li> -
為用戶配置 oauth2 服務;
</li> </ul>認證過程:
-
請求 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"
</li> -
請求 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 }</pre></li> -
利用 access_token 訪問 API;
curl -X GET http://localhost:8000?access_token=170e6dcd8ffb4f18cf310dd53a051c9b \ -- header "Host: mockbin.com"
</li> </ul>為一個用戶存儲對應 API 的 token 信息, 此時可以成功訪問相應的 API;
負載均衡
在多個Kong實例之前加上一層nginx,所有都請求都發送到某一個端口,由這個端口的nginx服務進行分發,分發到各個實例,實現負載均衡;
curl 命令的使用
curl,簡單的命令行http工具,用于發送各種http請求,利用的參數可以附帶各種信息,輔助我們在web開發中進行高效測試;
常用的一些參數: -i 加上頭部信息 -I 只查看頭部信息 -o -O -X 指定動詞 GET, POST, PUT 等 --data 添加數據, POST常用 --header 添加頭部信息 --url --user-agent 設置user_agent(偽造) -F 提交表單 -T 上傳 還支持設置cookie、遠程創建目錄等功能
- 一些例子
- 提交表單
curl -F "name=udvoid;type=text/foo" www.test.com或
curl -F "file=@localfile;filename=nameinpost" www.test.com@可引用文件位置; - 下載文件
curl test.com -o "index.html"(-O 選項使用原本的文件名) - 上傳文件
curl -T test.com/upload "{1.txt, 2.txt}"
</ul>
</li>
</ul>
來自:http://blog.limijiaoyin.com/kongcurl-20150808
- 提交表單
- 一些例子
-
一般流程, 授權:
前期:
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!