OpenID4java的验证失败问题

发布于 2021-11-14 10:58:17 字数 1604 浏览 882 评论 3

  最近在使用OpenID做一个开发,碰到一个问题,就是当RP使用consumerManger.verify验证OP发过来的请求时,出现异常,提示:

java.net.ConnectException: Invalid argument。

at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl .java:
333)
at java.net.PlainSocketImpl.connectToAddress
(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.j ava:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.j ava:366)
at java.net.Socket.connect(Socket.java:519)
网上查了一些资料,有些说是JDK 的bug,有些说是网络的问题,但我一直没有解决这个问题,困扰了好久。

  做了个测试,在RP的返回页面中http://myweb/myReturn.jsp中对OP传递过来的值验证时,如果执行verify("http://myweb/myReturn.jsp",requestList,discover),则提示异常;如果将地址改成另外一个随便的地址,比如http://myweb/test.jsp,执行 verify("http://myweb/test.jsp",requestList,discover)  ,则没有提示异常,能正常执行,只是验证肯定是不通过的。

感觉就是验证时,在当前页面中对当前的地址进行验证,就出现异常,也不知道为什么会这样,也不知道是不是网络的问题,因为不清楚verify这个函数里面到底是怎样进行验证的。

我的环境是SUSE+tomcat+JDK1.6.0,使用的是OpenID4java包。

若有相关方面的信息,请给我留言,非常感谢!


  

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

够钟 2021-11-15 01:40:22

我也在研究这个东西,可以交流一下:QQ:9526749。

我已经用OpenID4java架了一个RP,可以完成完整的登录验证过程,现在研究怎么架OP服务,遇到一些问,可以互相交流。

奢望 2021-11-15 01:06:23

在RP发现OP时,有些资料中说使用HTML 代码,在<HEAD>标签中提供:

<link rel="openid2.provider" href="http://openid.com/server/endpoint/url"/>

这一个怎么理解?是不是加入这个link后,consumerManager.discover时就不和OP通讯了,直接认定http://openid.com/server/endpoint/url为OP端的地址?

成熟稳重的好男人 2021-11-14 20:29:55

昨天改了一下,verify验证时出现了这个错误:0x704: I/O transport error

代码基本上和OpenId4java中的例子一样的:

<%@ page session="true" %>
<%@ page import="org.openid4java.discovery.Identifier, org.openid4java.discovery.DiscoveryInformation, org.openid4java.message.ax.FetchRequest, org.openid4java.message.ax.FetchResponse, org.openid4java.message.ax.AxMessage, org.openid4java.message.*, org.openid4java.OpenIDException, java.util.List, java.io.IOException, javax.servlet.http.HttpSession, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.openid4java.consumer.ConsumerManager, org.openid4java.consumer.InMemoryConsumerAssociationStore, org.openid4java.consumer.VerificationResult" %>

<%

    ConsumerManager manager=(ConsumerManager) pageContext.getAttribute("consumermanager", PageContext.APPLICATION_SCOPE);
try
        {
            // --- processing the authentication response

            // extract the parameters from the authentication response
            // (which comes in as a HTTP request from the OpenID provider)
            ParameterList responselist =
                    new ParameterList(request.getParameterMap());

            // retrieve the previously stored discovery information
            DiscoveryInformation discovered =
                    (DiscoveryInformation) session.getAttribute("openid-disco");

            // extract the receiving URL from the HTTP request
            StringBuffer receivingURL = request.getRequestURL();
            String queryString = request.getQueryString();
            if (queryString != null && queryString.length() > 0)
                receivingURL.append("?").append(request.getQueryString());

            // verify the response; ConsumerManager needs to be the same
            // (static) instance used to place the authentication request
            
            VerificationResult verification = manager.verify(receivingURL.toString(),responselist, discovered);
            // examine the verification result and extract the verified identifier
            Identifier verified = verification.getVerifiedId();
            if (verified != null)
            {
                AuthSuccess authSuccess =
                        (AuthSuccess) verification.getAuthResponse();

                session.setAttribute("openid", authSuccess.getIdentity());
                session.setAttribute("openid-claimed", authSuccess.getClaimed());
                response.sendRedirect(".");  // success
            }
            else
            {
%>
            Failed to login!
<%
            }
        }
        catch (OpenIDException e)
        {
            // present error to the user
            out.println("login error:"+e.getMessage());
        }

%>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文