を使用すると、単純なガイドをスクリプト


コングとAutos 0は非常に強力なプラットフォームです.
もちろん、ツールで行うことができますより多くのドキュメントを読む必要があり、時にはイライラする可能性があります😬
だから、私はどのように簡単にローカル環境ですべてを設定することができますし、好きなように周りを再生表示するには、このガイドを作成しました.
この記事を短くするために、私はすでにあなたがDocker、コングとAutos 0について少し知っていると仮定しました.いずれにせよ、いくつかのリンクがあります.
  • Use the Docker command line
  • Kong JWT Plugin
  • Obtaining an Access Token example
  • また、次の3つのガイドが必要です.
  • テストのために使用できるAPI;
  • アクセストークンを生成することができます
  • Pythonスクリプトを実行するには
  • 私はどのように構成プロセスを自動化できるかの例としてPythonスクリプトを使用します.これは、実行中のシステムや別の環境のために設定する必要がある人々のための大きな助けかもしれません.

    最初にまず!


    Dockerコンテナで走っている香港から始めましょう.
    私たちは香港のためのDockerネットワークとデータベースを作成する必要があります.
    docker network create kong-net
    
    docker run -d --name kong-database \
                   --network=kong-net \
                   -p 5432:5432 \
                   -e "POSTGRES_USER=kong" \
                   -e "POSTGRES_DB=kong" \
                   -e "POSTGRES_PASSWORD=kong" \
                   postgres:9.6
    
    データベース移行
    docker run --rm \
         --network=kong-net \
         -e "KONG_DATABASE=postgres" \
         -e "KONG_PG_HOST=kong-database" \
         -e "KONG_PG_USER=kong" \
         -e "KONG_PG_PASSWORD=kong" \
         -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
         kong:latest kong migrations bootstrap
    
    さて、コンテナを動かすことができます.
    docker run -d --name kong \
         --network=kong-net \
         -e "KONG_DATABASE=postgres" \
         -e "KONG_PG_HOST=kong-database" \
         -e "KONG_PG_USER=kong" \
         -e "KONG_PG_PASSWORD=kong" \
         -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
         -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
         -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
         -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
         -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
         -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
         -p 8000:8000 \
         -p 8443:8443 \
         -p 127.0.0.1:8001:8001 \
         -p 127.0.0.1:8444:8444 \
         kong:latest
    
    テストを行います.
    curl -i http://localhost:8001/
    
    トラブルが起きたら、コンテナが動いているか確認してください.
    docker ps
    
    あなたが見ないならばkong and kong-database リスト内のコンテナでは、明示的に起動する必要があります.
    docker start kong kong-database 
    
    テスト用のPostmanを使うこともできます.

    いくつかのスクリプトのための時間!


    ところで、Pythonを使うことは必須ではありません.あなたがそれを好きでないならば、あなたはまだ他のどんな言語ででもそれらのステップに従うことができるか、カール命令を使うことができます.
    最初に新しいサービスとルートの設定オブジェクトを定義します.
    # you'll need those imports later
    import requests
    import json
    
    host = "192.168.1.98"
    
    config = {
        "service": {
            "name": "test-service",
            "url": "http://" + host + ":7400/api/test/data",
        },
        "route": {
            "protocols": ["http"],
            "methods": ["GET", "POST", "PUT", "DELETE"],
            "hosts": [host],
            "paths": ["/(data)/*"],
            "headers": None,
        },
    }
    
    ヒアservice.url 我々が電話をするならば、コングが我々をリダイレクトする場所ですlocalhost:8000/data ヘッダでHost 192.168.1.98 (理論的に)🙃).
    ローカルAPIを使用しない場合は、変更することができますservice.url and route.hosts あなたの値を使用する.さもなければ、あなたは質問をするかもしれません.その考えを持ちなさい、私はそれに戻ります.
    次のステップ-サービスを作成し、香港のルート.
    まず最初に、このスクリプトをあなたがあなたのConfigオブジェクトを持っている同じファイルにコピーし、そこで何が起こっているかを詳しく見てください.まだ実行しないでください-我々はまだ1つ以上のことを確認する必要があります.
    # create a service using our config object
    print(config["service"]["name"])
    serviceUrl = "http://localhost:8001/services"
    
    serviceResponse = requests.post(url=serviceUrl, json=config["service"])
    
    # print service id to ensure that it was successfully created 
    serviceId = (json.loads(serviceResponse.content))["id"]
    print("serviceId ", serviceId)
    
    # create a route using our config object
    routeUrl = "http://localhost:8001/routes"
    
    config["route"]["service"] = {
        "id": serviceId
    }
    
    routeResponse = requests.post(url=routeUrl, json=config["route"])
    routeId = (json.loads(routeResponse.content))["id"]
    
    # print route id because you'll need it to add a plugin later
    print("routeId", routeId)
    
    そして今、なぜ私たちは' 192.168.1.98 'を使用します.
    私は、私の地元のサービスを代理にしようとしています.私が香港を通して私のローカルAPIを呼んでいたとき、それはメッセージで502エラーを返し続けましたAn invalid response was received from the upstream server .
    理由は、香港が指摘されたからですlocalhost 私のDockerコンテナの.明らかに、私のサービスがそこで主催されなかったので、それは働きませんでした.
    もちろん、テスト用の外部APIを使用している場合は気にする必要はありません.
    簡単な解決策は、あなたのローカルホストマシンのIPアドレス(例えば192.168.1.98)であなたのサービスを登録することです.ところで、それはあなたのマシンで異なります.おそらく、あなたはそれをチェックしたいかもしれません.ラン/sbin/ifconfig Mac用またはipconfig Windowsマシン用.
    そのようにsmthを見ることができます.

    更新を忘れないでくださいhost Pythonでは、IPを使って設定してください.
    では、スクリプトを実行することができます.IDE出力でエラーが表示されない場合は、サービスやルートの一覧を受け取ることができます.

    今、あなたが十分に幸運であるならば、あなたは直接あなたのAPIにアクセスすることができなければなりません、あるいは、香港を通して.
    注意: APIは稼働しているはずです.
    直接要求

    香港経由

    ラストステップ.それを安全にしましょう!


    私はすでに私のAuth 0アカウントの公開鍵を持っていましたが、あなたがそれを持っていないならば、以下のコマンドを実行して、あなたのpythonスクリプトで同じディレクトリに公開キーでファイルを保存してください.
    注意:これらの値を置き換えることを忘れないでください{COMPANYNAME}.{REGION-ID}Autos 0アカウントのX 509証明書をダウンロードする必要があります.
    $ curl -o {COMPANYNAME}.pem https://{COMPANYNAME}.{REGION-ID}.auth0.com/pem
    
    そして、公開鍵をX 509証明書から取り出します.
    $ openssl x509 -pubkey -noout -in {COMPANYNAME}.pem > pubkey.pem
    
    すごい!今、我々はJWTのプラグインと消費者を追加する必要があります
    あなたのrouteIDを保存するのを忘れたならば、あなたはそれからそれを要求することができますhttp://localhost:8001/routes ( 1つ以上の場合はルートを見つけてください.
    # create a plugin for our route
    # here you'll need to insert your routeId
    pluginUrl = "http://localhost:8001/routes/" + {ROUTEID} + "/plugins"
    
    pluginData = {
        "name": "jwt"
    }
    
    requests.post(url=pluginUrl, json=pluginData)
    
    注意:スクリプトを同じフォルダに置くのを忘れた場合、スクリプトは動作しません.
    # create a global consumer
    consumerUrl = "http://localhost:8001/consumers"
    consumerData = {
        "username": "test-consumer",
        "custom_id": "test-consumer-id",
    }
    
    consumerResponse = requests.post(url=consumerUrl, json=consumerData)
    
    # print consumer id to ensure that it was successfully created
    consumerId = (json.loads(consumerResponse.content))["id"]
    print("consumerId ", consumerId)
    
    # Add JWT plugin with Auth0 public key
    basicUrl = consumerUrl + "/" + consumerId + "/jwt"
    basicData = {
        "algorithm": "RS256",
        "key": "https://{COMPANYNAME}.{REGION-ID}.auth0.com/",
        "rsa_public_key": open('pubkey.pem', 'rb')
    }
    
    requests.post(url=basicUrl, files=basicData)
    

    迂回路🥳


    現在、あなたはあなたのAPIをMonerトークンなしで香港を通して呼ぶことができません.また、Author 0で署名されたトークンのみが動作します.
    あなたは同じ呼び出しをしようとすることができますlocalhost:8000/data そして、あなたがすべてを正しくしたならば、あなたは無許可401を受けるべきです.
    ヘッダーHost 192.168.1.98 あなたが香港を呼んでいるとき、要求に付けられるべきです.

    ベアラートークンが添付されている場合は、リクエストを受け付けます.

    あと少し

  • あなたのトークンのスコープまたはクレームを確認し、あなたが香港Enterprise Versionを使用している必要がある場合は、JWT署名プラグインを見てみたいかもしれません.このプラグインは、あなたのためにトークンを確認し、再表示します.
  • たとえば、複数のAPIにアクセスすることを想定しているSPAアプリケーションがあれば、auht 0ドキュメントからこのトピックをチェックすることができますRepresent Multiple APIs Using a Single Logical API .
  • あなたが香港を持っていて、すべてのAPIがそれで保護されて、信頼されるならば、あなたはM 2 Mトークンを生成する必要はありません.もちろん、あなたがそれを必要とするか、それが価値があるとわかるならば、確かに、それのために行きます.それはちょうどあなたが考えている何かである、それは本当にあなたのシステムをより安全にするか、それは不要な費用をもたらすでしょうか?
  • ありがとう!


    このガイドが役に立つことを願っています.お読みありがとうございます.私に連絡することを躊躇しないでください、質問をするか、あなたが誤りを見つけたならば、私に知らせてください🤗