2.10.2. 配置 JSON Web 令牌(JWT)身份验证
您可以通过在 elytron
子系统 中指定令牌
域来启用对 JWT 的支持。
在 token-realm
中,您可以指定属性和 jwt
令牌验证器。Elytron 完成以下检查:
-
自动过期检查
exp
声明和nbf
声明中指定的值。 可选:根据以下方法之一提供的公钥进行签名检查:
-
使用
公钥或
证书
属性. - 使用带命名公钥的密钥映射.
-
使用
client-ssl-context
属性从jku
claim 中指定的 URL 检索远程 JSON Web 密钥(JWK)。
-
使用
-
可选:检查 JWT,以确保它只包含
中
支持的值和aud
声明。您可以使用签发
者和使用者
属性来执行这些检查。
下例演示了 token-realm
作为安全域,而 principal-claim
作为属性。principal-claim
属性定义 elytron 用于
获取主体名称的声明的名称。jwt
元素指定令牌必须被验证为 JWT。
配置的 token-realm
示例
<token-realm name="${token_realm_name}" principal-claim="${principal_claim_key}"> <jwt issuer="${issuer_name}" audience="${audience_name}" <public-key="${public_key_in_PEM_format}"/> </token-realm>
您可以为您的 token-realm
定义密钥映射。然后,您可以使用不同的密钥对来验证签名并轻松地轮转这些密钥对。Elytron 从令牌获取一名 孩子
索赔,并使用对应的公钥进行验证。
-
如果 JWT 中不存在
孩子
声明,则token-realm
使用jwt
的public-key
属性中指定的值来验证签名。 -
如果 JWT 中不存在
孩子
声明,并且您尚未配置公钥,则 token
-realm
将使令牌失效。
为 token-realm
配置的密钥映射示例。
<token-realm name="${token_realm_name}" principal-claim="${principal_claim_key}"> <jwt issuer="${issuer_name}" audience="${audience_name}"> <key kid="${key_ID_from_kid_claim}" public-key="${public_key_in_PEM_format}"/> <key kid="${another_key_ID_from_kid_claim}" public-key="${public_key_in_PEM_format}"/> </jwt> </token-realm>
流程
使用
keytool
创建密钥存储使用
keytool
创建密钥存储keytool -genkeypair -alias <alias_name> -keyalg <key_algorithm> -keysize <key_size> -validity <key_validity_in_days> -keystore <key_store_path> -dname <distinguished_name> -keypass <key_password> -storepass <key_store_password>
接下来,在
elytron
子系统中添加密钥存储
定义。在
elytron
子系统中添加密钥存储
定义的示例:/subsystem=elytron/key-store=<key_store_name>:add(path=<key_store_path> , credential-reference={clear-text=<key_store_password>}, type=<keystore_type>)
在
elytron
子系统中创建token-realm
,并为您的token-realm
指定属性和jwt
令牌验证器。在
elytron
子系统中创建令牌域
的示例:/subsystem=elytron/token-realm=<token_realm_name>:add(jwt={issuer=[<issuer_name>],audience=[<audience_name>],key-store=<key_store_name>,certificate=<alias_name>},principal-claim=<principal_claim_key>)
其他资源
-
有关
token-realm
jwt
属性的更多信息,请参阅 如何配置服务器安全 指南中 的表 A.94. token-realm jwt Attributes。