gpt4 book ai didi

jboss - Wildfly:使用客户端证书身份验证为用户分配默认角色

转载 作者:行者123 更新时间:2023-12-01 14:12:58 26 4
gpt4 key购买 nike

我正在使用 Wildfly 为我的应用程序构建一个注册页面,该页面要求用户使用他们的智能卡进行注册。我想要一个不需要任何身份验证的初始登录页面,然后当他们访问注册页面时,它会提示他们从他们的智能卡中选择一个证书。

我已经非常接近于按照我的预期完成这项工作,但我觉得碰壁肯定是由于我对 Wildfly/JBOSS 缺乏了解。

我在 standalone.xml 中定义了以下安全域

<security-domain name="client_cert_domain" cache-type="default">
<authentication>
<login-module code="Certificate" flag="required">
<module-option name="verifier" value="org.jboss.security.auth.certs.AnyCertVerifier"/>
<module-option name="securityDomain" value="client_cert_domain"/>
</login-module>
</authentication>
<jsse keystore-password="secret" keystore-url="file:${jboss.server.config.dir}/Certificates/HQ/KeyStore" truststore-password="secret" truststore-url="file:${jboss.server.config.dir}/Certificates/HQ/cacerts.jks" client-auth="true"/>
</security-domain>

我的 web.xml 是

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<security-constraint>
<web-resource-collection>
<web-resource-name>Registration page only</web-resource-name>
<url-pattern>/register/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>User</role-name>
</auth-constraint>
</security-constraint>

<login-config>
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Some Name For User To See</realm-name>
</login-config>

最后,我的 jboss-web.xml

<jboss-web>
<security-domain>client_cert_domain</security-domain>
</jboss-web>

这几乎完全符合我的要求。主页不需要任何身份验证,/register/需要客户端证书。唯一的问题是,因为这不是注册用户,他们没有分配给他们的角色,所以页面被阻止,因为他们不在 auth-constraint 标签中指定的“用户”角色中。

是否有一种简单的方法可以自动为使用客户端证书进行身份验证的任何用户分配默认角色,而无需在 roles.properties 文件中预先定义它们?

最佳答案

通常,我似乎在发布此问题后不久就偶然发现了我的答案。

我一直在挖掘列出的所有登录模块 here .查看 Identity 模块后,我想我会在我的证书身份验证后尝试包含它,并只指定“角色”模块选项。所以我最终得到了以下结果。

<security-domain name="client_cert_domain" cache-type="default">
<authentication>
<login-module code="Certificate" flag="required">
<module-option name="password-stacking" value="useFirstPass"/>
<module-option name="verifier" value="org.jboss.security.auth.certs.AnyCertVerifier"/>
<module-option name="securityDomain" value="client_cert_domain"/>
</login-module>
<login-module code="Identity" flag="required">
<module-option name="password-stacking" value="useFirstPass"/>
<module-option name="roles" value="User"/>
</login-module>
</authentication>
<jsse keystore-password="Password1" keystore-url="file:${jboss.server.config.dir}/Certificates/HQ/KeyStore" truststore-password="Password1" truststore-url="file:${jboss.server.config.dir}/Certificates/HQ/cacerts.jks" client-auth="true"/>
</security-domain>

这似乎在功能上做我想做的。通过在两个登录模块上指定密码堆栈选项,可以确保仅使用客户端证书进行身份验证。第二个登录模块 Identity 只是将角色“用户”添加到已登录的任何人。现在,当我访问我的 web.xml 中指定的 protected 目录下的任何资源时,系统会提示我输入我的证书并允许我进入。

希望这会在将来帮助其他人。

关于jboss - Wildfly:使用客户端证书身份验证为用户分配默认角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33351645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com