代码之家  ›  专栏  ›  技术社区  ›  Cheok Yan Cheng

在独立应用程序中使用OpenID

  •  2
  • Cheok Yan Cheng  · 技术社区  · 16 年前

    目前,我正在我的独立应用程序中使用谷歌帐户验证。

    public static boolean isValidAccount(String email, String password) {
        if (email == null || password == null) {
            return false;
        }
    
        try {
            // URL of target page script.
            final URL url = new URL("https://www.google.com/accounts/ClientLogin");
            final URLConnection urlConn = url.openConnection();
            urlConn.setDoInput(true);
            urlConn.setDoOutput(true);
            urlConn.setUseCaches(false);
            urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            // Send POST output.
            final DataOutputStream cgiInput = new DataOutputStream(urlConn.getOutputStream());
            // http://code.google.com/apis/base/faq_gdata.html#clientlogin
            String content = "accountType=" + URLEncoder.encode("HOSTED_OR_GOOGLE") + "&Email=" + URLEncoder.encode(email) + "&Passwd=" + URLEncoder.encode(password) + "&service=" + URLEncoder.encode("mail") + "&source=" + URLEncoder.encode("JStock-1.05b");
    
            cgiInput.writeBytes(content);
            cgiInput.flush();
            cgiInput.close();
            if (urlConn instanceof HttpURLConnection) {
                // 200 means OK. You OK. I OK. Google OK.
                return ((HttpURLConnection) urlConn).getResponseCode() == 200;
            }
            else {
                return false;
            }
        } catch (MalformedURLException ex) {
            Logger.getLogger(UploadServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
        catch (IOException ex) {
            Logger.getLogger(UploadServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }
    

    我可以知道我是否可以在OpenID上应用类似的概念。我看到有许多使用OpenID的Web应用程序示例。但是,我在独立应用程序中没有看到。

    可以这样做吗?

    4 回复  |  直到 16 年前
        1
  •  0
  •   Josh Lee ZZ Coder    16 年前

    OpenID对用户向其提供者进行身份验证时所发生的事情没有任何说明。它可以是用户名/密码,可以是cookie,可以是SSL证书,可以是视网膜扫描。

    您最好的选择可能是打开一个Web浏览器小部件,并要求用户以正常的openid样式进行身份验证(但是您必须找到解决缺少Web服务器的问题的方法)。

        2
  •  0
  •   Ben S    16 年前

    因为您本质上是假装成一个浏览器并执行HTTP请求,所以您应该能够轻松地复制OpenID设置。

    只需查看Web应用程序的HTTP请求,并使用您在此处发布的相同方法,通过使用 HTTPUrlConnection .

    但是,有一件事我觉得我 需要 更何况。因为您没有使用HTTPS,所以网络上的任何人都可以嗅探用户名和密码。您应该在安全通道上执行所有身份验证和授权。

        3
  •  0
  •   BalusC    16 年前

    我可以知道我是否可以在OpenID上应用类似的概念。我看到有许多使用OpenID的Web应用程序示例。但是,我在独立应用程序中没有看到。

    您使用的OpenID提供程序只是 Web服务 由谷歌提供。您也可以使用一个简单的servlet和一个在线托管的数据库自己创建一个WebService。

        4
  •  0
  •   Pascal Thivent    16 年前

    我可以知道我是否可以在OpenID上应用类似的概念。我看到有许多使用OpenID的Web应用程序示例。但是,我在独立应用程序中没有看到。

    可能是因为独立应用程序使用严重依赖Web范式和HTTP的东西没有多大意义。除此之外,您将如何将用户重定向到其OpenID提供程序?身份验证响应(应该作为来自OpenID提供程序的HTTP请求出现)怎么样?怎么处理?

    所以,不,我不认为你可以/不应该在你的桌面应用程序中使用OpenID(甚至没有提到,如果没有连接到网络,用户将无法进行身份验证,但这是另一回事)。