我正在尝试使用客户端密钥进行客户端身份验证来制作网络应用程序。我想我已经弄清楚了整个信任库问题,所以我可以让客户端真正获得身份验证。但是我不想要求客户端身份验证。我只想对其进行测试并启用功能(如果已启用)。
我可以使用 .wantClientAuth 来请求它,但如果它不存在则允许连接。但我找不到任何属性来确定请求是否已通过身份验证。
这应该存在,否则wantClientAuth的目的是什么。我该如何使用它?
我正在尝试使用客户端密钥进行客户端身份验证来制作网络应用程序。我想我已经弄清楚了整个信任库问题,所以我可以让客户端真正获得身份验证。但是我不想要求客户端身份验证。我只想对其进行测试并启用功能(如果已启用)。
我可以使用 .wantClientAuth 来请求它,但如果它不存在则允许连接。但我找不到任何属性来确定请求是否已通过身份验证。
这应该存在,否则wantClientAuth的目的是什么。我该如何使用它?
我没有在这里运行设置,现在可以测试它,但不应该
request.getUserPrincipal()
给
request.getAuthType()
你你想要的。
请参阅http://www.docjar.com/docs/api/javax/servlet/http/HttpServletRequest.html
(假设您可以在您工作的上下文中访问 servlet 请求)
如果您使用 servlet API,请使用 Tim 的方法。以下是一些其他想法,具体取决于您的调用上下文。
握手完成后,您可以在 SSLSession 上调用 getCertChain。如果它为空,则客户端未使用客户端证书进行身份验证。
在此处查看自定义方法:
http://www.javadocexamples.com/java_source/org/mortbay/jetty/security/SslSocketConnector.java.html
或者,您可以在 HttpsURLConnection 上调用 getLocalPrincipal 或 getLocalCertificates。如果它们为空,则没有客户端证书。