Использование OpenID в автономном приложении - PullRequest
2 голосов
/ 12 ноября 2009

В настоящее время я использую подтверждение учетной записи 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. Тем не менее, я не видел ни одного в отдельном приложении.

Возможно ли это сделать?

Ответы [ 4 ]

0 голосов
/ 12 ноября 2009

Могу ли я знать, возможно ли, что я могу применить аналогичную концепцию к OpenID. Я видел много примеров веб-приложений, использующих OpenID. Однако я не видел ни одного в отдельном приложении.

Возможно, потому что для отдельного приложения не имеет особого смысла использовать что-то, что сильно зависит от веб-парадигм и HTTP. Помимо прочего, как вы собираетесь перенаправить пользователя к его провайдеру OpenID? Как насчет ответа аутентификации (который должен прийти как HTTP-запрос от поставщика OpenID)? Как с этим бороться?

Так что нет, я не думаю, что вы можете / должны использовать OpenID для настольного приложения (даже не упоминая, что, если не подключиться к Интернету, пользователи не смогут пройти аутентификацию, но это уже другая история). 1007 *

0 голосов
/ 12 ноября 2009

OpenID ничего не говорит о том, что происходит, когда пользователь проходит аутентификацию у своего провайдера. Это может быть имя пользователя / пароль, это может быть файл cookie, это может быть сертификат SSL, это может быть сканирование сетчатки глаза.

Лучшим вариантом может быть открытие виджета веб-браузера и запросить у пользователя аутентификацию в обычном стиле OpenID (но вам придется выяснить, что делать в случае отсутствия веб-сервера).

0 голосов
/ 12 ноября 2009

Могу ли я знать, возможно ли, что я могу применить аналогичную концепцию к OpenID. Я видел много примеров веб-приложений, использующих OpenID. Однако я не видел ни одного в отдельном приложении.

Используемый вами провайдер OpenID - это просто веб-служба , предоставляемая Google. Вы также можете создать веб-сервис самостоятельно, используя простой сервлет и базу данных, размещенную где-то в Интернете.

0 голосов
/ 12 ноября 2009

Поскольку вы, по сути, притворяетесь браузером и выполняете HTTP-запросы, вы сможете легко скопировать настройки OpenID.

Просто посмотрите, что HTTP-запросы делают веб-приложения, и скопируйте его, используя тот же метод, который вы опубликовали здесь, используя HTTPUrlConnection.

Однако, я чувствую одну вещь, которую нужно упомянуть . Поскольку вы не используете HTTPS, любой в вашей сети может прослушивать имя пользователя и пароли. Вы должны выполнять все аутентификации и авторизации по безопасному каналу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...