ClientLogin с именем пользователя / паролем
Если вы хотите использовать ClientLogin с клиентской библиотекой API Google для Java , вам необходимо настроить HttpRequestFactory, которыйподдерживает аутентификацию.
private static HttpTransport transport = new ApacheHttpTransport();
public static HttpRequestFactory createRequestFactory(
final HttpTransport transport) {
return transport.createRequestFactory(new HttpRequestInitializer() {
public void initialize(HttpRequest request) {
GoogleHeaders headers = new GoogleHeaders();
headers.setApplicationName("MyApp/1.0");
request.headers=headers;
try {
authorizeTransport(request);
} catch (Exception e) {
e.printStackTrace();
}
}
});
Обратите внимание на метод authorizeTransport, который в основном авторизует запрос.AuthorizeTransport выглядит следующим образом:
private void authorizeTransport(HttpRequest request) throws HttpResponseException, IOException {
// authenticate with ClientLogin
ClientLogin authenticator = new ClientLogin();
authenticator.authTokenType = Constants.AUTH_TOKEN_TYPE;
authenticator.username = Constants.USERNAME;
authenticator.password = Constants.PASSWORD;
authenticator.transport = transport;
try {
Response response = authenticator.authenticate();
request.headers.authorization=response.getAuthorizationHeaderValue();
} catch (HttpResponseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Вы в основном настраиваете метод аутентификации ClientLogin, предоставляя имя пользователя / пароль.Метод authenticate аутентифицируется на основе предоставленных значений и возвращает объект ответа, который можно добавить в заголовок HTTP для обеспечения аутентификации ClientLogin.
Android AccountManager
В порядкедля интеграции с Android AccountManager (чтобы пользователь Android не вводил свое имя пользователя / пароль), вы можете найти пример кода здесь http://code.google.com/p/google-api-java-client/wiki/AndroidAccountManager
Тот факт, что пользователю не нужно вводить ключв его имени пользователя / паролях повышается уровень комфорта пользователей, но решение остается относительно небезопасным.
Я бы настоятельно рекомендовал сделать следующее:
Использовать клиентскую библиотеку
Я бы предложил перейти на Клиентскую библиотеку API Google для Java для этого типа взаимодействия.Это совместимая с Android клиентская библиотека java для всех видов API Google.
Вам не нужно беспокоиться о реализации низкоуровневых HTTP, безопасности и JSON-соединений.
Задача Google Руководство по разработке API также упоминает ту же библиотеку.Библиотека позаботится об аутентификации для вас.Если вы хотите использовать ClientLogin, все, что вам нужно сделать, это указать имя пользователя / пароль или интегрировать с Android AccountManager.
Избегайте использования ClientLogin
ClientLoginсчитается небезопасным, и был обнаружен ряд дыр в безопасности в отношении этого механизма аутентификации.Google также не рекомендует .Однако, если вы решите продолжать использовать ClientLogin, клиентская библиотека Google API для Java его поддерживает.