gpt4 book ai didi

java - 在 Web 服务中调用 getUserPrincipal() 返回匿名

转载 作者:行者123 更新时间:2023-11-29 09:24:56 24 4
gpt4 key购买 nike

大家好,我正在尝试在我的 Web 服务和客户端应用程序之间使用纯 SSL。它们都在 GlassFish 2.1.1 中运行,并且各自位于不同的域中。客户端应用程序本身就是 Web 应用程序,我添加了 JVM 选项 -Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as 以便将其证书发送到 Web 服务。

我已经将证书导入到彼此的信任库中,一切正常。问题是我需要对 Web 服务中的客户端证书做一些事情,但是调用我之前声明的 WebServiceContext 的 getUserPrincipal 方法总是返回 ANONYMOUS。

为什么要这样做,我怎样才能取回证书中的内容。

编辑:我想我应该提到我创建了一个 CA 并创建了由 CA 为 WS 和客户端签名的新私钥和证书。我使用相同的 S1AS 默认名称将私钥添加到他们的 keystore ,并将新签名证书和 CA 证书添加到他们的信任库。

我在 web.xml 中使用以下规则保护 WS:

<security-constraint>
<display-name>Constraint1</display-name>
<web-resource-collection>
<web-resource-name>Customer</web-resource-name>
<description/>
<url-pattern>/basecustomer*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>WSClient</role-name>
</auth-constraint>
<user-data-constraint>
<description/>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>CLIENT-CERT</auth-method>
<realm-name>certificate</realm-name>
</login-config>
<security-role>
<description/>
<role-name>WSClient</role-name>
</security-role>

以及我的 sun-web.xml 中的以下内容:

<security-role-mapping>
<role-name>WSClient</role-name>
<group-name>WSClient</group-name>
</security-role-mapping>

最后在配置 -> 安全 -> 领域 -> 证书下的 GlassFish 中,我告诉它分配组:WSClient

最佳答案

看起来您还没有声明用于身份验证的用户名,因此匿名是正确答案。

getUserPrincipal() 不会读取证书来确定用户名。

如果您需要获取证书以根据其内容执行操作,则需要以不同的方式获取它。

您可能需要通读此 article about client-cert authentication获取更多信息和提示。文章比较老,但是概念和机制没有太大变化。

关于java - 在 Web 服务中调用 getUserPrincipal() 返回匿名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3310165/

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