Kong技術調研&curl簡介

jopen 9年前發布 | 38K 次閱讀 kong

Kong

Kong是一款開源的API網關,基于Lua和Cassandra,支持分布式操作,有很強的可移植性和可擴展性。作為應用和API之間的中間層,加上眾多功能強大的插件,可以實現認證授權、訪問控制等功能;

  • 本文討論授權時的一般流程和基本使用:

    • kong前加上一層web后臺對應consumer,包括終端用戶的創建,一個consumer相當于一個注冊的應用;
    • 對于每一個用戶,第三方認證成功后,后臺得到用戶信息,后臺將用戶信息提交給kong驗證對應的API, 得到token;
    • 對于每一個用戶和每一個API都有一個access_token,通過consumer授權;
    • 利用authorization_userid對應終端用戶;
    • </ul> </li>

    • 項目主頁
    • </ul>

      一般流程, 授權:

      1. 進入網站后,判斷未登陸用戶, 引導到第三方登陸平臺;
      2. 在第三方登陸平臺登陸并授權, 返回code, 本地利用 code 請求得到token(此時授權成功), 再利用token得到用戶個人信息(公開信息), 用于創建本地用戶;
      3. 用戶要訪問某個api信息時,由web后臺利用用戶uid(或其他的唯一標識)來請求授權,并獲得對應的token(具體流程同oauth2),憑借token訪問api;
      4. </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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!