2.2. 内置身份验证机制
Quarkus Security 提供以下内置身份验证支持:
2.2.1. 基本身份验证(Basic authentication) 复制链接链接已复制到粘贴板!
您可以使用内置的 HTTP 基本身份验证机制来保护 Quarkus 应用程序端点。如需更多信息,请参阅以下文档:
2.2.2. 基于表单的身份验证 复制链接链接已复制到粘贴板!
Quarkus 提供基于表单的身份验证,其的工作方式类似于传统的 Servlet 基于表单的身份验证。与传统的表单身份验证不同,经过身份验证的用户没有存储在 HTTP 会话中,因为 Quarkus 不支持集群的 HTTP 会话。相反,身份验证信息存储在加密的 cookie 中,该 Cookie 可以被共享同一加密密钥的所有群集成员读取。
要应用加密,请添加 quarkus.http.auth.session.encryption-key
属性,并确保您设置的值至少为 16 个字符。使用 SHA-256 对加密密钥进行哈希处理。生成的摘要用作 Cookie 值的 AES-256 加密的密钥。Cookie 包含作为加密值一部分的过期时间,因此集群中的所有节点都必须同步其时钟。一分钟内,如果会话正在使用,则使用更新的到期时间生成一个新的 Cookie。
使用单页应用程序(SPA)时,您通常希望通过删除默认页面路径来避免重定向,如下例所示:
现在,您已禁用了 SPA 的重定向,您必须以编程方式从客户端注销。以下是用于登录 j_security_check
端点并通过销毁 cookie 注销应用的 JavaScript 方法示例。
要从客户端注销 SPA,cookie 必须设置为 quarkus.http.auth.form.http-only-cookie=false
,以便您可以销毁 cookie,并可能重定向到您的主页面。
要从服务器的 SPA 注销,可以将 Cookie 设置为 quarkus.http.auth.form.http-only-cookie=true
,并使用此示例代码销毁 Cookie。
以下属性可用于配置基于表单的身份验证:
构建时修复的配置属性 - 所有其他配置属性可在运行时覆盖
类型 | default | |
如果启用了表单身份验证。
环境变量: | 布尔值 |
|
后位置。
环境变量: | string |
|
构建时修复的配置属性 - 所有其他配置属性可在运行时覆盖
类型 | default | |
包含客户端证书通用名称(CN)到角色映射的属性文件。仅在使用
属性文件应该具有
环境变量: | path | |
身份验证域
环境变量: | string | |
登录页面。可以通过设置
环境变量: | string |
|
username 字段名称。
环境变量: | string |
|
password 字段名称。
环境变量: | string |
|
错误页面。可以通过设置
环境变量: | string |
|
如果没有要重新重定向到的保存页面,则要重定向到的登录页面。可以通过设置
环境变量: | string |
|
控制用于重定向用户要访问的位置的 Cookie 名称的选项。
环境变量: | string |
|
达到不活跃超时时不活动(空闲)超时,Cookie 不会被续订,并强制进行新的登录。
环境变量: |
| |
Cookie 在被替换为更新超时的新 Cookie 之前可以如何替换它,也称为"renewal-timeout"。请注意,较小的值会稍微多于服务器负载(因为新的加密 Cookie 将更频繁地生成);但是,较大的值会影响不活动超时,因为在生成 Cookie 时设置了超时。例如,如果将其设置为 10 分钟,并且不活跃超时为 30m,如果用户的最后请求是 Cookie,则实际超时会在最后一次请求后发生 21m,因为仅在生成新 Cookie 时刷新超时。也就是说,服务器端不会跟踪超时;时间戳在 Cookie 本身中经过编码和加密,并且会为每个请求解密并解析。
环境变量: |
| |
用于存储持久会话的 Cookie
环境变量: | string |
|
会话和位置 Cookie 的 Cookie 路径。
环境变量: | string |
|
设置 HttpOnly 属性,以防止通过 JavaScript 访问 Cookie。
环境变量: | 布尔值 |
|
会话和位置 Cookie 的 SameSite 属性。
环境变量: |
|
|
确定是否启用整个权限集。默认情况下,如果定义了权限集,它会被启用。
环境变量: | 布尔值 | |
此权限集链接到的 HTTP 策略。有三个内置策略:allow、deny 和 authentication。可以根据角色的策略定义,扩展也可以添加自己的策略。
环境变量: | string |
必需
|
此权限集应用到的方法。如果没有设置,则它们适用于所有方法。请注意,如果请求与任何权限集的路径匹配,但由于未列出方法,不匹配约束,则请求将被拒绝。特定于方法的权限优先于没有设置任何方法的匹配项。这意味着,例如,如果 Quarkus 配置为允许 GET 和 POST 请求发送到 /admin,且没有将 PUT 请求配置为 /admin,则拒绝将 PUT 请求配置为 /admin。
环境变量: | 字符串列表 | |
此权限检查应用到的路径。如果路径以 VRF 结尾,则它将被视为路径前缀,否则它将被视为完全匹配。匹配按长度进行,因此最具体的路径匹配具有优先权。如果多个权限集与同一路径匹配,则显式方法匹配优先于没有设置方法的匹配项,否则会应用限制性最强的权限。
环境变量: | 字符串列表 | |
特定于路径的验证机制,必须用于验证用户。它需要匹配
环境变量: | string | |
表示此策略总是适用于匹配的路径,除了具有获奖路径的策略之外。避免创建多个共享策略,以最大程度降低性能影响。
环境变量: | 布尔值 |
|
允许访问此策略保护的资源的角色。默认情况下,允许访问任何经过身份验证的用户。
环境变量: | 字符串列表 |
|
根据
环境变量: |
| |
如果此策略成功应用,则授予
环境变量: |
| |
此策略授予的权限将使用此配置属性指定的
环境变量: | string |
|
要写入持续时间值,请使用标准的 java.time.Duration
格式。如需更多信息,请参阅 Duration#parse ()Java API 文档。
您还可以使用简化的格式,从数字开始:
- 如果该值只是一个数字,则代表以秒为单位。
-
如果值是数字,后跟
ms
,则表示时间(毫秒)。
在其他情况下,简化的格式转换为 java.time.Duration
格式进行解析:
-
如果该值是一个数字,后跟
h
、m
或s
,则使用PT
前缀。 -
如果该值是一个数字,后跟
d
,则前缀为P
。
2.2.3. 双向 TLS 身份验证 复制链接链接已复制到粘贴板!
Quarkus 提供 mutual TLS (mTLS)身份验证,以便您可以根据其 X.509 证书验证用户。
要使用此验证方法,您必须首先为应用程序启用 SSL/TLS。如需更多信息,请参阅 Quarkus "HTTP 参考"指南中的支持使用 SSL/TLS 的安全连接 部分。
应用程序接受安全连接后,下一步是将 quarkus.http.ssl.certificate.trust-store-file
属性配置包含应用程序信任的所有证书的名称。指定文件还包括应用程序在客户端(如浏览器或其他服务)时如何询问证书的信息,尝试访问其中一个受保护的资源。
当传入的请求与信任存储中的有效证书匹配时,应用程序可以通过注入 SecurityIdentity
来获取主题,如下所示:
获取主题
您还可以使用以下示例中介绍的代码获取证书:
获取证书
import java.security.cert.X509Certificate; import io.quarkus.security.credential.CertificateCredential; CertificateCredential credential = identity.getCredential(CertificateCredential.class); X509Certificate certificate = credential.getCertificate();
import java.security.cert.X509Certificate;
import io.quarkus.security.credential.CertificateCredential;
CertificateCredential credential = identity.getCredential(CertificateCredential.class);
X509Certificate certificate = credential.getCertificate();
2.2.3.1. 将证书属性映射到角色 复制链接链接已复制到粘贴板!
客户端证书的信息可用于将角色添加到 Quarkus SecurityIdentity
。
在检查客户端证书的通用名称(CN)属性后,您可以在 SecurityIdentity
中添加新角色。添加新角色的最简单方法是使用 certificate 属性到角色映射功能。
例如,您可以更新部分中显示的属性,它引入了 Mutual TLS 身份验证,如下所示:
假定假定配置,如果客户端证书的 CN 属性等于 alice
或 bob
,则请求会被授权,如果它等于 jdoe
,则请求会被禁止。
2.2.3.2. 使用证书属性增强 SecurityIdentity 复制链接链接已复制到粘贴板!
如果自动映射 证书属性到 roles 选项不适合,则始终可以注册 SecurityIdentityAugmentor
。自定义 SecurityIdentityAugmentor
可以检查不同客户端证书属性的值,并相应地增强 SecurityIdentity
。
有关自定义 SecurityIdentity
的更多信息,请参阅 Quarkus " 安全提示和技巧"指南中的安全身份自定义 部分。