2.10. 使用 bearer 令牌配置身份验证和授权
2.10.1. bearer 令牌身份验证 复制链接链接已复制到粘贴板!
您可以使用 BEARER_TOKEN 身份验证机制授权发送到应用程序的 HTTP 请求。在 Web 浏览器等客户端向应用程序发送 HTTP 请求后,BEARER_TOKEN 机制验证请求 的授权 HTTP 标头中是否存在 bearer 令牌。
Elytron 支持使用 bearer 令牌(如 OpenID Connect ID 令牌)或利用 OAuth2 兼容授权服务器发布的不透明令牌进行身份验证。请参阅其他资源部分。
以下示例显示 Authorization HTTP 标头包含 mF_9.B5f-4.1JqM bearer 令牌:
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
BEARER_TOKEN 机制现在可以提取 bearer 令牌字符串,并将它传递到 token-realm 实施以进行验证。如果实施成功验证 bearer 令牌,Elytron 将根据令牌代表的信息创建一个安全性上下文。应用可以使用此安全上下文来获取请求者的信息。然后,它可以通过提供请求者对 HTTP 资源的访问权限来决定是否满足请求。
如果请求者不提供 bearer 令牌,BEARER_TOKEN 机制会返回 401 HTTP 状态代码。例如:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example"
如果请求者无权访问资源,BEARER_TOKEN 机制将返回 403 HTTP 状态代码。
HTTP/1.1 403 Forbidden
其他资源
- 有关 JWT 验证的详情,请参阅配置 JSON Web 令牌(JWT)身份验证。
- 有关 OAuth2 验证的详情,请参考使用兼容 OAuth2 授权服务器 发布的令牌配置身份验证。
-
有关可用于
token-realm的属性的更多信息,请参阅 如何配置服务器安全 指南中 的表 A.93.token-realmAttributes。
2.10.2. 配置 JSON Web 令牌(JWT)身份验证 复制链接链接已复制到粘贴板!
您可以通过在 elytron 子系统 中指定令牌 域来启用对 JWT 的支持。
在 token-realm 中,您可以指定属性和 jwt 令牌验证器。Elytron 完成以下检查:
-
自动过期检查
exp声明和nbf声明中指定的值。 可选:根据以下方法之一提供的公钥进行签名检查:
-
使用
公钥或证书属性. - 使用带命名公钥的密钥映射.
-
使用
client-ssl-context属性从jkuclaim 中指定的 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-realmjwt属性的更多信息,请参阅 如何配置服务器安全 指南中 的表 A.94. token-realm jwt Attributes。
2.10.3. 使用兼容 OAuth2 的授权服务器发布的令牌配置身份验证 复制链接链接已复制到粘贴板!
Elytron 支持由 OAuth2 兼容的授权服务器发布的 bearer 令牌。您可以配置令牌域,以针对预定义的 oauth2-introtion 端点验证令牌。
流程
创建令牌域。
使用
elytron子系统创建令牌域示例:/subsystem=elytron/token-realm=<token_realm_name>:add(principal-claim=<principal_claim_key>, oauth2-introspection={client-id=<client_id>, client-secret=<client_secret>, introspection-url=<introspection_URL>})以下示例显示了 token
-元素。此令牌域配置为针对预定义的realm元素中指定的 oauth2-introspectionoauth2-introtion端点验证令牌。oauth2-introspection端点使用client-id 和 client-secret属性中指定的值来识别客户端。token元素示例:-realm元素中的 oauth2-introspection<token-realm name="${token_realm_name}" principal-claim="${principal_claim_key}"> <oauth2-introspection client-id="${client_id}" client-secret="${client_secret}" introspection-url="${introspection_URL}" host-name-verification-policy="${hostname_verification_policy_value}"/> </token-realm>
后续步骤
- 要为应用程序配置身份验证,请参阅为应用程序配置身份验证。
其他资源
-
如需有关令牌内省端点的更多信息,请参阅 Table A.95。
token-realmoauth2-introspectionAttributes。
2.10.4. 为应用程序配置 bearer 令牌身份验证 复制链接链接已复制到粘贴板!
您可以使用 JWT 格式的 bearer 令牌(如 OpenID Connect ID 令牌)或者使用 OAuth2 兼容授权服务器发布的不透明令牌来配置应用身份验证。
先决条件
根据您需要的身份验证方法,完成以下步骤之一来创建
token-realm:
流程
在
elytron子系统中创建安全域。确保您在安全域中指定您的令牌安全域。在
elytron子系统中创建安全域的示例./subsystem=elytron/security-domain=<security_domain_name>:add(realms=[{realm=<token_realm_name>,role-decoder=<role_decoder_name>}],permission-mapper=<permission_mapper_name>,default-realm=<token_realm_name>)创建使用
BEARER_TOKEN机制的http-authentication-factory。创建
http-authentication-factory 的示例./subsystem=elytron/http-authentication-factory=<authentication_factory_name>:add(security-domain=<security_domain_name>,http-server-mechanism-factory=global,mechanism-configurations=[{mechanism-name=BEARER_TOKEN,mechanism-realm-configurations=[{realm-name=<token_realm_name>}]}])在
undertow子系统中配置application-security-domain。在
undertow子系统中配置application-security-domain的示例:/subsystem=undertow/application-security-domain=<application_security_domain_name>:add(http-authentication-factory=<authentication_factory_name>)-
配置应用的
web.xml和jboss-web.xml文件。您必须确保应用程序的web.xml指定BEARER_TOKEN身份验证方法。此外,确保jboss-web.xml使用您在 JBoss EAP 中配置的application-security-domain。
其他资源
-
有关
BEARER_TOKEN身份验证机制的更多信息,请参阅 Bearer 令牌身份验证。 -
有关
token-realmjwt属性的更多信息,请参阅 如何配置服务器安全 指南中 的表 A.94. token-realm jwt Attributes。 -
有关可用于 OAuth2 令牌端点的属性的更多信息,请参阅 Table A.95。
token-realmoauth2-introspectionAttributes。 -
有关配置应用程序的 web.xml 和
jboss-的更多信息,请参阅《 如何配置身份管理 指南》中的 配置 Web 应用程序使用 Elytron 或 Legacy Security for Authentication。web.xml