エンドポイントのJWT認証モジュール
エンドポイントにJWT (JSON Web Token) 認証を追加することで、認証されたユーザーのみにアクセスを許可します。 これにより、APIのセキュリティが強化され、権限のないユーザーからのアクセスを防ぐことができます。
想定ユーザー
既存のWebAPIのセキュリティを強化したいStudio利用者。
※ Studio入門編
紹介動画
概要
テンプレート動作
-
入力
-
環境変数
環境変数 内容 備考 API_HOST_ID 保護対象のWebAPIサーバのName EXPIRES_IN WTトークンの有効期間(分) PSWD_HASH_ALGO ユーザのパスワードの暗号化方式 sha256, sha512が選択可能 -
Injection機能による初期設定
- Injection の /app/config/login-user.json に、IDとパスワードを設定してデプロイします。
- パスワードは以下の手順に従って、Hash化したものを設定します。
- パスワードのHash化
以下のどちらかの方法でHash化したパスワードを取得できます。-
Windows/PowerShellコマンド
PowerShellで以下を実行する。-
SHA-256
$ms = [System.IO.MemoryStream]::new()
$sw = [System.IO.StreamWriter]::new($ms)
$sw.write("user1")
$sw.Flush()
$ms.Position = 0
Get-FileHash -InputStream $ms -Algorithm sha256 | Select-Object Hash
$sw.close -
SHA-512
$ms = [System.IO.MemoryStream]::new()
$sw = [System.IO.StreamWriter]::new($ms)
$sw.write("user1")
$sw.Flush()
$ms.Position = 0
Get-FileHash -InputStream $ms -Algorithm sha512 | Select-Object Hash
$sw.close
-
-
Python
以下のPythonコードを実行する。-
SHA-256
import hashlib
raw_password = "xxxxxxx"
digest256 = hashlib.sha256(password.encode("utf-8")).hexdigest()
print(digest256) -
SHA-512
digest512 = hashlib.sha512(password.encode("utf-8")).hexdigest()
print(digest512)
-
-
- Injection の /app/config/login-user.json に、IDとパスワードを設定してデプロイします。
-
-
Output
- 認証されたユーザーのみがAPIにアクセスできるようになる。
利用方法
単体での動作確認
- テンプレート動作に従い、環境変数・ID・パスワードを設定。
- デプロイボタンを押す。
- JWT認証の確認。
- JWT認証
jwt-proxyのエンドポイント+"/login"に設定したユーザ名とパスワードを送信。=> ログインに成功すると、curl -X 'POST' https://studio.{env-name}.studio.exabase.ai/{namespace_id}/ws/login \
-H 'Content-Type: application/json' \
-d '{"userid": "user1", "password": "user1"}'{"token":"xxxxxx....."}
のようにトークンが返却。以後このBearerトークンをAPI利用時に設定することで、認証がされる仕組みです。 - トークンをBearerにセット。
WebAPIの/api/v1/health呼出。=>curl -H GET 'https://studio.{env-name}.studio.exabase.ai/{namespace_id}/ws/api/v1/health' \
-H 'Authorization: Bearer ここに取得したトークン内容を貼り付け'{"health":"ok"}
と返る。 - WebAPIにアクセス。
WebAPIの/api/v1/estimate呼出。=>curl -X 'POST' 'https://studio.{env-name}.studio.exabase.ai/{namespace_id}/ws/api/v1/estimate' \
-H 'Authorization: Bearer ここに取得したトークン内容を貼り付け' \
-H 'Content-Type: application/json' \
-d '{"text": "sample text"}'{"response":"sample text"}
と返る。
- JWT認証
他のアセットとの連携
- 本認証モジュールでは、他のStudioアセットで特に認証機能を持っていないSideApp等との接続を想定しています。
- 方法は以下の通りです。
- 既存のSideAppを含むStudioキャンバスを開く。
- jwt-proxyのSideAppをendpointと既存のSideAppの間に配置する。
- 矢印で接続する。
- 上記の手順により、個々のWebAPI側に認証機能を付与することなく、JWTプロキシを手前に置くことでWebAPI保護を行うことができます。
関連情報
- JWT (JSON Web Token) 認証
- JSONデータを安全に送受信するためのオープンスタンダード(RFC 7519)。