kong.jwe
JWEユーティリティモジュールは、JSON Web暗号化に関するユーティリティ関数を提供します。
kong.enterprise_edition.jwe.decrypt(key, token)
JWEで暗号化されたJWTトークンを復号化し、そのペイロードをプレーンテキストとして返します
サポートされているキー(key
引数)は以下のとおりです。
- サポートされているキー形式:
-
JWK
(string
またはtable
として指定) -
PEM
(string
として指定) -
DER
(string
として指定)
-
- サポートされているキーのタイプ:
RSA
-
EC
、サポートされている曲線:P-256
P-384
P-521
パラメータ
-
key (
string|table
): 秘密鍵 -
トークン (
string
):JWE 暗号化されたJWTトークン
戻り値
-
string
: プレーンテキストのJWTトークンペイロード、またはnil -
string
: エラーメッセージ、または nil
使用法
local jwe = require "kong.enterprise_edition.jwe"
local jwk = {
kty = "EC",
crv = "P-256",
use = "enc",
x = "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
y = "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
d = "870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE",
}
local plaintext, err = jwe.decrypt(jwk,
"eyJhbGciOiJFQ0RILUVTIiwiZW5jIjoiQTI1NkdDTSIsImFwdSI6Ik1lUFhUS2oyWFR1NUktYldUSFI2bXci" ..
"LCJhcHYiOiJmUHFoa2hfNkdjVFd1SG5YWFZBclVnIiwiZXBrIjp7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYi" ..
"LCJ4IjoiWWd3eF9NVXRLTW9NYUpNZXFhSjZjUFV1Z29oYkVVc0I1NndrRlpYRjVMNCIsInkiOiIxaEYzYzlR" ..
"VEhELVozam1vYUp2THZwTGJqcVNaSW9KNmd4X2YtUzAtZ21RIn19..4ZrIopIhLi3LeXyE.-Ke4ofA.MI5lT" ..
"kML5NIa-Twm-92F6Q")
if plaintext then
print(plaintext) -- outputs "hello"
end
kong.enterprise_edition.jwe.decode(token)
JWE で暗号化された JWT トークンをデコードし、その部分を含むテーブルを返します。この関数は次のようなテーブルを返します。
{
[1] = protected header (as it appears in token)
[2] = encrypted key (as it appears in token)
[3] = initialization vector (as it appears in token)
[4] = ciphertext (as it appears in token)
[5] = authentication tag (as it appears in token)
protected = protected key (base64url decoded and json decoded)
encrypted_key = encrypted key (base64url decoded)
iv = initialization vector (base64url decoded)
ciphertext = ciphertext (base64url decoded)
tag = authentication tag (base64url decoded)
aad = protected header (as it appears in token)
}
以下の方法で、元の入力を再構築できます。
local token = table.concat(<decoded-table id="sl-md0000000">, ".")
JWTトークンに上記5つの部分が揃っていない場合、またはデコードに失敗した場合は、エラーが返されます。
パラメータ
-
トークン (
string
):JWE 暗号化されたJWTトークン
戻り値
-
string
:デコードされたJWTトークン部分を含むテーブル、またはnil -
string
: エラーメッセージ、または nil
使用法
local jwe = require "kong.enterprise_edition.jwe"
local jwt, err = jwe.decode(
"eyJhbGciOiJFQ0RILUVTIiwiZW5jIjoiQTI1NkdDTSIsImFwdSI6Ik1lUFhUS2oyWFR1NUktYldUSFI2bXci" ..
"LCJhcHYiOiJmUHFoa2hfNkdjVFd1SG5YWFZBclVnIiwiZXBrIjp7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYi" ..
"LCJ4IjoiWWd3eF9NVXRLTW9NYUpNZXFhSjZjUFV1Z29oYkVVc0I1NndrRlpYRjVMNCIsInkiOiIxaEYzYzlR" ..
"VEhELVozam1vYUp2THZwTGJqcVNaSW9KNmd4X2YtUzAtZ21RIn19..4ZrIopIhLi3LeXyE.-Ke4ofA.MI5lT" ..
"kML5NIa-Twm-92F6Q")
if jwt then
print(jwt.protected.alg) -- outputs "ECDH-ES"
end
kong.enterprise_edition.jwe.encrypt(alg,enc、key、plaintext、options)
JWE 暗号化を使用してプレーンテキストを暗号化し、JWT トークンを返します。サポートされているアルゴリズム(alg
引数)は以下となります:
"RSA-OAEP"
"ECDH-ES"
サポートされる暗号化アルゴリズム (enc
引数):
"A256GCM"
サポートされているキー(key
引数)は以下のとおりです。
- サポートされているキー形式:
-
JWK
(string
またはtable
として指定) -
PEM
(string
として指定) -
DER
(string
として指定)
-
- サポートされているキーのタイプ:
RSA
-
EC
、サポートされている曲線:P-256
P-384
P-521
サポートされているオプション(options
引数)は以下のとおりです。
-
{ zip = "DEF" }
: 暗号化する前にプレーンテキストを収縮させるかどうか -
{ apu = <string|boolean> }
:Agreement PartyUInfoヘッダーパラメータ -
{ apv = <string|boolean> }
:Agreement PartyVInfo ヘッダーパラメータ
apu
とapv
をfalse
に設定して、自動生成(ランダム16バイト)されて一時的な公開鍵に追加されるのを防ぐことができます。
パラメータ
-
alg (
string
): キー管理に使用されるアルゴリズム -
enc (
string
):コンテンツの暗号化に使用される暗号化アルゴリズム -
key (
string|table
):公開鍵 -
plaintext (
string
):プレーンテキスト -
options (
table
, 任意 ): Options(任意)、デフォルト:nil 返される値
-
string
:JWE暗号化JWTトークン、またはnil -
string
: エラーメッセージ、または nil
使用法
local jwe = require "kong.enterprise_edition.jwe"
local jwk = {
kty = "EC",
crv = "P-256",
use = "enc",
x = "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
y = "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
}
local token, err = jwe.encrypt("ECDH-ES", "A256GCM", jwk, "hello", {
zip = "DEF,
})
if token then
print(token)
end