在独立应用程序中使用OpenID

时间:2009-11-12 15:21:43

标签: java openid

目前,我在独立应用程序中使用Google帐户验证。

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 个答案:

答案 0 :(得分:0)

由于您实际上假装是浏览器并执行HTTP请求,因此您应该能够轻松复制OpenID设置。

只需查看HTTP请求Web应用程序的操作,并使用您在此处发布的相同方法,使用HTTPUrlConnection复制该应用程序。

然而,有一点我觉得我需要来提及。由于您没有使用HTTPS,因此网络上的任何人都可以嗅探用户名和密码。您应该通过安全通道执行所有身份验证和授权。

答案 1 :(得分:0)

OpenID没有说明用户向其提供商进行身份验证时会发生什么。它可以是用户名/密码,可以是cookie,也可以是SSL证书,也可以是视网膜扫描。

您最好的选择可能是打开一个Web浏览器小部件并要求用户以正常的OpenID样式进行身份验证(但您必须弄清楚如何处理缺少Web服务器的行为)。

答案 2 :(得分:0)

  

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

您使用的OpenID提供商只是Google提供的 webservice 。您也可以使用简单的servlet和在线托管的数据库自己创建Web服务。

答案 3 :(得分:0)

  

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

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

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