簡體   English   中英

在獨立應用程序中使用OpenID

[英]Using OpenID in Standalone Application

目前,我正在獨立應用程序中使用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應用程序示例。 但是,我還沒有在獨立應用程序中看到一個。

有可能這樣做嗎?

由於您本質上是在假裝自己是瀏覽器並執行HTTP請求,因此您應該能夠輕松地復制OpenID設置。

只需查看HTTP請求Web應用程序執行的操作,然后使用HTTPUrlConnection使用您在此處發布的相同方法復制該HTTPUrlConnection

但是,我覺得我需要提一件事。 由於您沒有使用HTTPS,因此您網絡上的任何人都可能在嗅探用戶名和密碼。 您應該通過安全通道執行所有身份驗證和授權。

當用戶向其提供程序進行身份驗證時,OpenID不會說什么。 它可以是用戶名/密碼,可以是cookie,可以是SSL證書,可以是視網膜掃描。

最好的選擇是打開Web瀏覽器窗口小部件,並要求用戶以常規的OpenID樣式進行身份驗證(但由於缺少Web服務器,您必須弄清楚該怎么做)。

我是否可以在OpenID上應用類似的概念。 我看到有很多使用OpenID的Web應用程序示例。 但是,我還沒有在獨立應用程序中看到一個。

你使用的OpenID提供商僅僅是由谷歌提供的Web服務 您也可以使用簡單的servlet和在線托管在某個地方的數據庫來自己創建Web服務。

我是否可以在OpenID上應用類似的概念。 我看到有很多使用OpenID的Web應用程序示例。 但是,我還沒有在獨立應用程序中看到一個。

可能是因為,對於一個獨立的應用程序而言,使用嚴重依賴於Web范例和HTTP的東西並沒有多大意義。 除其他事項外,您將如何將用戶重定向到其OpenID提供程序? 身份驗證響應如何處理(應該作為來自OpenID提供程序的HTTP請求進入)? 怎么處理呢?

因此,不,我認為您不能/不應該為您的桌面應用程序使用OpenID(更不用說,如果不連接到網絡,則用戶將無法進行身份驗證,但這是另一回事了)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM