Apache APISIX OpenID Connectプラグインを使用した集中型ID認証
API7.ai
September 7, 2021
Apache APISIXのOpenID Connectプラグインを使用してOkta認証を設定するのは、簡単な3ステップのプロセスです。これにより、従来の認証モードから集中型ID認証モードに切り替えることができます。以下のセクションでは、Apache APISIXのOpenID Connectプラグインを使用してOkta認証を設定する手順を説明します。
集中型ID認証モードは、従来の認証モードと比較して以下の利点があります:
- 集中型ID認証は、アプリケーション開発プロセスを簡素化します。
- 集中型ID認証は、ビジネスのセキュリティを向上させます。
前提条件
使用するためのOktaアカウントを準備してください。
ステップ1: Oktaの設定
- Oktaアカウントにログインし、「Create App Integration」をクリックしてOktaアプリケーションを作成します。
- サインインメソッドとして「OIDC- OpenID Connect」を選択し、アプリケーションタイプとして「Web Application」を選択します。
- ログインとログアウトのリダイレクトURLを設定します。「Sign-in redirect URIs」は、ログイン成功後にリダイレクトが許可されるリンクで、「Sign-out redirect URIs」は、ログアウト成功後にリダイレクトされるリンクです。この例では、ログインリダイレクトとログアウトリダイレクトのURIを両方ともhttp://127.0.0.1:9080/に設定します。
- 設定が完了したら、「Save」をクリックして変更を保存します。
- アプリケーションのGeneralページにアクセスして、以下の設定を取得します。これは、Apache APISIX OpenID Connectを設定するために必要です。
- Client ID: アプリケーションIDで、以下のclient_idに対応します。
- Client secret: アプリケーションキーで、以下のclient_secretに対応します。
- Okta domain: アプリケーションが使用するドメイン名で、以下の{ISSUER}に対応します。
ステップ2: Apache APISIXのインストール
依存関係のインストール
Apache APISIXの実行環境には、NGINXとetcdの依存関係が必要です。Apache APISIXをインストールする前に、使用しているオペレーティングシステムに応じて依存関係をインストールしてください。CentOS7、Fedora 31 & 32、Ubuntu 16.04 & 18.04、Debian 9 & 10、およびMacOSの依存関係インストール手順を提供しています。詳細については、Install Dependenciesを参照してください。
RPMパッケージによるインストール(CentOS 7)
このインストール方法はCentOS 7に適しています。以下のコマンドを実行してApache APISIXをインストールしてください。
sudo yum install -y https://github.com/apache/apisix/releases/download/2.7/apisix-2.7-0.x86_64.rpm
Dockerによるインストール
詳細については、Installing Apache APISIX with Dockerを参照してください。
Helm Chartによるインストール
詳細については、Installing Apache APISIX with Helm Chartを参照してください。
ソースリリースによるインストール
-
apisix-2.7
という名前のディレクトリを作成します。mkdir apisix-2.7
-
Apache APISIX Releaseのソースパッケージをダウンロードします。
wget https://downloads.apache.org/apisix/2.7/apache-apisix-2.7-src.tgz
Apache APISIXの公式ウェブサイトからもApache APISIX Releaseのソースパッケージをダウンロードできます。Apache APISIX Official Website - Download Pageには、Apache APISIX、APISIX Dashboard、およびAPISIX Ingress Controllerのソースパッケージも提供されています。
-
Apache APISIX Releaseのソースパッケージを解凍します。
tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
-
実行に必要なLuaライブラリをインストールします。
# apisix-2.7ディレクトリに移動 cd apisix-2.7 # 依存関係を作成 make deps
依存関係の初期化
以下のコマンドを実行して、NGINX設定ファイルとetcdを初期化します。
# NGINX設定ファイルとetcdを初期化
make init
ステップ3: Apache APISIXを起動し、対応するルートを設定
-
以下のコマンドを実行してApache APISIXを起動します。
apisix start
-
ルートを作成し、OpenID Connectプラグインを設定します。以下のコード例では、Apache APISIX Admin APIを使用してルートを作成し、アップストリームパスをhttpbin.orgに設定します。httpbin.orgは、リクエストを受信して応答するシンプルなバックエンドサービスです。以下では、httpbin.orgのgetページを使用します。詳細については、http bin getを参照してください。具体的な設定項目については、Apache APISIX OpenID Connect Pluginを参照してください。
OpenID Connectの設定フィールドは以下の通りです:
フィールド | デフォルト値 | 説明 |
---|---|---|
client_id | "" | OAuthクライアントID。 |
client_secret | "" | OAuthクライアントシークレット。 |
discovery | "" | アイデンティティプロバイダーのサービスディスカバリーエンドポイント。 |
scope | openid | アクセスするリソースのスコープ。 |
relm | apisix | WWW-Authenticateレスポンスヘッダーの認証情報を指定します。 |
bearer_only | false | リクエストヘッダーのトークンをチェックするかどうか。 |
logout_path | /logout | ログアウトURI。 |
redirect_uri | request_uri | アイデンティティプロバイダーがリダイレクトするURIで、デフォルトはリクエストアドレスです。 |
timeout | 3 | リクエストのタイムアウト時間で、単位は秒です。 |
ssl_verify | false | アイデンティティプロバイダーのSSL証明書を検証します。 |
introspection_endpoint | "" | アイデンティティプロバイダーのトークン認証エンドポイントのURLで、空白の場合はdiscoveryから抽出されます。 |
introspection_endpoint_auth_method | client_secret_basic | トークンイントロスペクションの認証方法の名前。 |
public_key | "" | 認証トークンの公開鍵。 |
token_signing_alg_values_expected | "" | 認証トークンのアルゴリズム。 |
set_access_token_header | true | リクエストヘッダーにアクセストークンを含めるかどうか。 |
access_token_in_authorization_header | false | アクセストークンをAuthorizationヘッダーに含めるかどうか。この値がtrueに設定されている場合、アクセストークンはAuthorizationヘッダーに含まれ、falseに設定されている場合はX-Access-Tokenヘッダーに含まれます。 |
set_id_token_header | true | X-ID-TokenリクエストヘッダーにIDトークンを含めるかどうか。 |
set_userinfo_header | true | X-Userinfoリクエストヘッダーにユーザー情報を含めるかどうか。 |
curl -XPOST 127.0.0.1:9080/apisix/admin/routes -H "X-Api-Key: edd1c9f034335f136f87ad84b625c8f1" -d '{
"uri":"/*",
"plugins":{
"openid-connect":{
"client_id":"{YOUR_CLIENT_ID}",
"client_secret":"{YOUR_CLIENT_SECRET}",
"discovery":"https://{YOUR_ISSUER}/.well-known/openid-configuration",
"scope":"openid profile",
"bearer_only":false,
"realm":"master",
"introspection_endpoint_auth_method":"client_secret_post",
"redirect_uri":"http://127.0.0.1:9080/"
}
},
"upstream":{
"type":"roundrobin",
"nodes":{
"httpbin.org:80":1
}
}
}'
検証
-
"http://127.0.0.1:9080/get"にアクセスすると、OpenID Connectプラグインが有効になっているため、ページはOktaのログインページにリダイレクトされます。
-
ユーザーのOktaアカウントのユーザー名とパスワードを入力し、「Sign In」をクリックしてOktaアカウントにログインします。
-
ログインが成功すると、"httpbin.org"のgetページにアクセスできます。"httpbin.org/get"ページは、X-Access-Token、X-Id-Token、およびX-Userinfoを含むリクエストデータを返します。
"X-Access-Token": "******Y0RPcXRtc0FtWWVuX2JQaFo1ZVBvSlBNdlFHejN1dXY5elV3IiwiYWxnIjoiUlMyNTYifQ.***TVER3QUlPbWZYSVRzWHRxRWh2QUtQMWRzVDVGZHZnZzAiLCJpc3MiOiJodHRwczovL3FxdGVzdG1hbi5va3RhLmNvbSIsImF1ZCI6Imh0dHBzOi8vcXF0ZXN0bWFuLm9rdGEuY29tIiwic3ViIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImlhdCI6MTYyODEyNjIyNSwiZXhwIjoxNjI4MTI5ODI1LCJjaWQiOiIwb2ExMWc4ZDg3TzBGQ0dYZzY5NiIsInVpZCI6IjAwdWEwNWVjZEZmV0tMS3VvNjk1Iiwic2NwIjpbIm9wZW5pZCIsInByb2Zpb***.****iBshIcJhy8QNvzAFD0fV4gh7OAdTXFMu5k0hk0JeIU6Tfg_Mh-josfap38nxRN5hSWAvWSk8VNxokWTf1qlaRbypJrKI4ntadl1PrvG-HgUSFD0JpyqSQcv10TzVeSgBfOVD-czprG2Azhck-SvcjCNDV-qc3P9KoPQz0SRFX0wuAHWUbj1FRBq79YnoJfjkJKUHz3uu7qpTK89mxco8iyuIwB8fAxPMoXjIuU6-6Bw8kfZ4S2FFg3GeFtN-vE9bE5vFbP-JFQuwFLZNgqI0XO2S7l7Moa4mWm51r2fmV7p7rdpoNXYNerXOeZIYysQwe2_L****", "X-Id-Token": "******aTdDRDJnczF5RnlXMUtPZUtuSUpQdyIsImFtciI6WyJwd2QiXSwic3ViIjoiMDB1YTA1ZWNkRmZXS0xLdW82OTUiLCJpc3MiOiJodHRwczpcL1wvcXF0ZXN0bWFuLm9rdGEuY29tIiwiYXVkIjoiMG9hMTFnOGQ4N08wRkNHWGc2OTYiLCJuYW1lIjoiUGV0ZXIgWmh1IiwianRpIjoiSUQuNGdvZWo4OGUyX2RuWUI1VmFMeUt2djNTdVJTQWhGNS0tM2l3Z0p5TTcxTSIsInZlciI6MSwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImV4cCI6MTYyODEyOTgyNSwiaWRwIjoiMDBvYTA1OTFndHAzMDhFbm02OTUiLCJub25jZSI6ImY3MjhkZDMxMWRjNGY3MTI4YzlmNjViOGYzYjJkMDgyIiwiaWF0IjoxNjI4MTI2MjI1LCJhdXRoX3RpbWUi*****", "X-Userinfo": "*****lfbmFtZSI6IlpodSIsImxvY2FsZSI6ImVuLVVTIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsInVwZGF0ZWRfYXQiOjE2MjgwNzA1ODEsInpvbmVpbmZvIjoiQW1lcmljYVwvTG9zX0FuZ2VsZXMiLCJzdWIiOiIwMHVhMDVlY2RGZldLTEt1bzY5NSIsImdpdmVuX25hbWUiOiJQZXRlciIsIm5hbWUiOiJQZXRl****"
X-Access-Token: Apache APISIXは、ユーザープロバイダーから取得したアクセストークンをX-Access-Tokenリクエストヘッダーに含めます。オプションで、プラグイン設定のaccess_token_in_authorization_headerを使用してAuthorizationリクエストヘッダーに含めることもできます。
X-Id-Token: Apache APISIXは、ユーザープロバイダーから取得したIdトークンをBase64エンコードしてX-Id-Tokenリクエストヘッダーに含めます。この機能は、プラグイン設定のset_id_token_headerを使用して有効にするかどうかを選択できます。デフォルトでは有効です。
X-Userinfo: Apache APISIXは、ユーザープロバイダーから取得したユーザー情報をBase64エンコードしてX-Userinfoに含めます。この機能は、プラグイン設定のset_userinfo_headerを使用して有効にするかどうかを選択できます。デフォルトでは有効です。
ご覧の通り、Apache APISIXはX-Access-Token、X-Id-Token、およびX-Userinfoリクエストヘッダーをアップストリームに送信します。アップストリームはこれらのヘッダーを解析して、ユーザーID情報やユーザーメタデータを取得できます。
Oktaから直接Apache APISIX Gatewayに集中型ID認証を構築するプロセスを示しました。無料のOkta Developer Accountに登録して始めるのは簡単です。このアプローチにより、開発者の負担を軽減し、安全で効率的な体験を実現できます。
Oktaについて
Oktaは、アプリケーションに認証と認可サービスを追加するためのカスタマイズ可能で安全なドロップインソリューションです。開発のオーバーヘッド、セキュリティリスク、およびメンテナンスを伴わずに、アプリケーションにスケーラブルな認証を組み込むことができます。どのような言語やスタックのアプリケーションでもOktaに接続し、ユーザーのサインイン方法を定義できます。ユーザーが認証を試みるたびに、OktaはそのIDを確認し、必要な情報をアプリに返します。
Apache APISIXについて
Apache APISIXは、動的でリアルタイムの高性能APIゲートウェイです。Apache APISIXは、ロードバランシング、動的アップストリーム、カナリアリリース、サーキットブレーカー、認証、可観測性などの豊富なトラフィック管理機能を提供します。Apache APISIXを使用して、従来の南北トラフィックだけでなく、サービス間の東西トラフィックも処理できます。また、k8s ingressコントローラーとしても使用できます。
世界中の数百の企業がApache APISIXを使用しており、金融、インターネット、製造、小売、通信事業者など、NASA、欧州連合のデジタルファクトリー、TravelSky、Tencent、Huawei、Weibo、中国移動、Taikang、360などが含まれます。
Github: https://github.com/apache/apisix
Website: https://apisix.apache.org