メインコンテンツまでスキップ

エンドポイントのJWT認証モジュール

Version: 1
  • auth
Download Canvas JSON
logo

エンドポイントにJWT (JSON Web Token) 認証を追加することで、認証されたユーザーのみにアクセスを許可します。 これにより、APIのセキュリティが強化され、権限のないユーザーからのアクセスを防ぐことができます。

想定ユーザー

既存のWebAPIのセキュリティを強化したいStudio利用者。
※ Studio入門編

紹介動画

概要

テンプレート動作

  • 入力

    • 環境変数

      環境変数内容備考
      API_HOST_ID保護対象のWebAPIサーバのName
      EXPIRES_INWTトークンの有効期間(分)
      PSWD_HASH_ALGOユーザのパスワードの暗号化方式sha256, sha512が選択可能
    • Injection機能による初期設定

      • Injection の /app/config/login-user.json に、IDとパスワードを設定してデプロイします。
        • パスワードは以下の手順に従って、Hash化したものを設定します。
      • パスワードのHash化
        以下のどちらかの方法でHash化したパスワードを取得できます。
        1. Windows/PowerShellコマンド
          PowerShellで以下を実行する。

          1. 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
          2. 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
        2. Python
          以下のPythonコードを実行する。

          1. SHA-256

            import hashlib
            raw_password = "xxxxxxx"
            digest256 = hashlib.sha256(password.encode("utf-8")).hexdigest()

            print(digest256)
          2. SHA-512

            digest512 = hashlib.sha512(password.encode("utf-8")).hexdigest()

            print(digest512)
  • Output

    • 認証されたユーザーのみがAPIにアクセスできるようになる。

利用方法

単体での動作確認

  1. テンプレート動作に従い、環境変数・ID・パスワードを設定。
  2. デプロイボタンを押す。
  3. JWT認証の確認。
    1. 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利用時に設定することで、認証がされる仕組みです。
    2. トークンを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"}と返る。
    3. 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"}と返る。

他のアセットとの連携

  • 本認証モジュールでは、他のStudioアセットで特に認証機能を持っていないSideApp等との接続を想定しています。
  • 方法は以下の通りです。
    1. 既存のSideAppを含むStudioキャンバスを開く。
    2. jwt-proxyのSideAppをendpointと既存のSideAppの間に配置する。
    3. 矢印で接続する。
  • 上記の手順により、個々のWebAPI側に認証機能を付与することなく、JWTプロキシを手前に置くことでWebAPI保護を行うことができます。

関連情報

  1. JWT (JSON Web Token) 認証
    • JSONデータを安全に送受信するためのオープンスタンダード(RFC 7519)。