JWT認証のためのTeradata Databaseサーバーの構成
JSON Webトークン(JWT)認証メカニズムにより、ユーザーがTeradata UDAユーザー サービスに対して正常に認証されると、Teradata DatabaseへのSingle Sign-on (SSO)が有効になります。UDAユーザー サービスはTeradata AppCenterやTeradata® クエリー サービス (RESTサービス)などの各種のUDAアプリケーションおよびサービスに対してユーザーを認証します。アプリケーションまたはサービスの1つに対して認証されたユーザーは、JWTを使って、Single Sign-onを実行してTeradata Databaseとのセッションを確立することができます。
JWT認証の使用を有効にするには、次のセットアップを完了します。
- Teradata® クエリー サービス(REST API)を呼び出すことにより、UDAユーザー サービスから復号化および検証キーを取得します。これは、サービスに組み込まれたSwagger UIブラウザ インターフェースを介して、またはcURLコマンドを使用して実行することができます。デフォルトでは、Swagger UIエンドポイントはブロックされるように構成されているため、cURLを使用することを推奨します。
次のコマンドを使用してキーの認証と取得を行なうことができます。UDAユーザー サービスにアクセスできるデータベース ノードから次の操作を行ないます。
- Adminユーザーとして認証し、JWTを取得します。
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{ \ "password": <PW>, \ "username": <USERNAME> \ }' 'https://<server_name>:<port_num>/token'
- 復号化キーを取得します。
curl -X GET --header 'Accept: text/plain' --header 'Authorization: Bearer <MY JWT TOKEN>' 'https://<server_name>:<port_num>/decryptionKey'
- 署名(検証)キーを取得します。
curl -X GET --header 'Accept: text/plain' --header 'Authorization: Bearer <My JWT TOKEN>' 'https://<server_name>:<port_num>/signatureKey'
ここで、<server_name>はUDAユーザー サービスを実行しているサーバーで、<port_num>はUDAユーザー サービスのポート番号です。
ポート番号(<port_num>)は構成可能です。RPMバージョンのユーザー サービスの場合、通常は8001です。コマンド例の<port_num>を構成したポート番号に置き換えます。 - 鍵ファイルを任意のファイル名と場所に保存します。復号化と検証の鍵ファイルは.pem拡張子を持ち、ヘッダーとフッターを含む必要があります。
例えば、復号化キーは次のようになります。
# cat decryption_key.pem -----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQCdx3v70O97sQ4retwU54YFp+khWhqZ4qZ0ekUTz/9T9a36bbX6 2TnRTR/59tkITiu5mPwQCoAvL9DZNJWUUpzjugWjZGzBHlCFfKe3KTnhw6IXNnHb PJV7b5vunaoDt+iur+MkKcgj0i+4G/mmXUk/rIFiLJQtWVr4Coj3jYj+NQIDAQAB AoGBAIBnMyCJNgys2AJMl0Uv8mMx9kldQd7QlHSgeQ0ZrgpPG4p9tKb0F9ic8pQD 7zaSH4WI2kHXueAtAsNxxvWRkfl7pzVjUMrIqwnivkNFTY4iPzJeRw/3KLxhlgfv Q7l+CMprKnLuscl9Dt9oR4+Ypm745yPJ+6ZnHJyvXELPU0rVAkEA6fhqcumIEOsJ TU+Lo94xKngXHS4ms9dND0xZEhPImTXz4YPWCCwX11d6wII2Tz3k+LTQ/I/2rqy8 9DXpwBs4hwJBAKyikc9jvEEHfeUNNymjf5Bg9eRVnzPaq6QitTaXvT/zPgjElOFh GpADP7fUiUR4PtocZ47Q8co+jIMR8XEvTmMCQQC3SjmyLgq/HjGaVB+Tz0P6/js1 S+tb5eXjfy8j/0Wd6OtWlt48ZraCp3BtkVSUfWt7/sLdqLZans4kDnxBV9HPAkEA qNzoNW1AUneqjKdNovwbpjVBsJSUAlvN8uJEUV9BrdEXh+oKGx8ppV6YMA/EKWZZ TG3mWgtFx2dBeF/PxL/aMwJAWepYUPkM3MReuAp7oij4qIrOq9xPpHlO4+kBKMWp yR6wvSLqDxSX3erkBq6Eh39BMchta3clU7PXck4pKrDf0A== -----END RSA PRIVATE KEY-----
例えば、検証キーは次のようになります。
# cat verification_key.pem -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdx3v70O97sQ4retwU54YFp+kh WhqZ4qZ0ekUTz/9T9a36bbX62TnRTR/59tkITiu5mPwQCoAvL9DZNJWUUpzjugWj ZGzBHlCFfKe3KTnhw6IXNnHbPJV7b5vunaoDt+iur+MkKcgj0i+4G/mmXUk/rIFi LJQtWVr4Coj3jYj+NQIDAQAB -----END PUBLIC KEY-----
- Adminユーザーとして認証し、JWTを取得します。
- (マルチノード インストールの場合)キーを別のデータベース ノードに安全に転送します。キー ファイルの権限を調べ、Teradata Databaseがアクセスできることを確認します。キーを転送するには、以下を実行します。
- キーを含むデータベース ノードにログオンします。
- キーを別のデータベース ノードに移動します。
pcl -send <location>/<decryption_key_file_name> <location>/<decryption_key_file_name> pcl -send <location>/<verification_key_file_name> <location>/<verification_key_file_name>
復号化および検証キー ファイルはすべてのノードの同じ場所に格納します。
- TdgssUserConfigFile.xmlを編集し、次のセクションのコメントを外します。
<!-- JWT --> <!-- To modify JWT mechanism configuration, uncomment this section and edit <Mechanism Name="JWT"> <MechanismProperties MechanismEnabled="yes" DefaultMechanism="no" JWTDecryptionKeyFile="" JWTVerificationKeyFile="" JWTSkewTime="300" /> </Mechanism> (end of commented out section)-->
- JWTDecryptionKeyFileを復号化キーを含むファイルへの絶対パスに設定します。
- JWTVerificationKeyFileを検証キーを含むファイルへの絶対パスに設定します。
- オプション。 JWTSkewTimeを編集して設定します。 JWTSkewTimeは、有効期限が切れた後もJWTが有効となる秒数です。
- ファイルを保存します。
- run_tdgssconfigユーティリティを実行してTDGSSCONFIG GDOを更新します。
/opt/teradata/tdgss/bin/run_tdgssconfig
- tdgssfixpathsを実行して、JWTDecryptionKeyFileとJWTVerificationKeyFileの所有者と権限を設定します。
psh 'perl /opt/teradata/tdgss/bin/tdgssfixpaths'
- tparesetを実行し、TDGSS構成への変更をアクティブ化します。
tpareset
例: JDBCを使用してJWTに接続する
Programmatically connect to JWT through JDBC:
jdbc:teradata://<system_name>/LOGMECH=JWT,LOGDATA=”token=<JWT of user>”
Where:
- <system_name>はTeradata Databaseのシステム名です
- LOGMECHはJWT(メカニズム名)に設定されます
- <JWT of user>はユーザーのトークンの値で、次のようになります。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
関連情報
JWTについての詳細は、https://tools.ietf.org/html/rfc7519を参照してください。
JWTの構成の詳細については、JWTメカニズムおよびJWTサポート プロパティを参照してください。
クライアントからの接続の詳細については、以下を参照してください。
- Teradata JDBC Driverの参考文献(https://developer.teradata.com/connectivity/reference/jdbc-driverから入手可能)
- .NET Data Provider for Teradata(http://developer.teradata.com/connectivity/reference/dotnet-data-providerから入手可能)
- ODBC Driver for Teradata®ユーザー ガイド、B035-2526
- Teradata® CLI V2リファレンス-メインフレーム接続システム、B035-2417
- Teradata® CLI V2リファレンス-ワークステーション接続システム、B035-2418