В настоящее время я работаю над реализацией TMDb API .Существует метод под названием Аутентификация пользователя .Я успешно реализовал Шаг 1
Шаг 1. Создание токена запроса
Начните с вызова API нового метода токена.Это вернет новый токен запроса, который будет действителен в течение 60 минут.Токен запроса не авторизован пользователем на данном этапе.Маркеры запросов зависят от учетной записи API и связаны между вашим приложением и пользователем на шаге 2.
Для шага 1 у меня есть следующий код:
URL url = new URL("http://api.themoviedb.org/3/authentication/token/new?api_key=the_key");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringWriter writer = new StringWriter();
String line;
while ((line = reader.readLine()) != null) {
writer.write(line);
}
reader.close();
Map<String, List<String>> headerFields = connection.getHeaderFields();
String callBackUrl = null;
for(Map.Entry<String, List<String>> entry : headerFields.entrySet()) {
if(entry.getKey() != null && entry.getKey().equals("Authentication-Callback")) {
callBackUrl = entry.getValue().get(0);
}
}
Этопечать URL-адреса обратного вызова в консоли вместе с токеном запроса (если я преобразую writer.toString()
в объект Json).
Но вторая часть - это аутентификация пользователя по его имени пользователя и паролю.URL обратного вызова перенаправляет пользователя на страницу входа в TMDb.Я проверил это, скопировав URL обратного вызова из консоли в браузер.
Шаг 2 утверждает, что:
Шаг 2. Запрос авторизации у пользователя
После того, как у вас есть действительный токен запроса, ваше приложение должно открыть веббраузер и отправьте их в TMDb.HTTP-ответ при создании нового токена будет включать заголовок Authentication-Callback, который вы можете легко использовать для перенаправления.
Если пользователь не вошел в TMDb, он будет перенаправлен на страницу входа перед тем, какпопросили предоставить вашему приложению разрешение на использование их учетной записи.Как только пользователь предоставил вашему приложению разрешение на использование своей учетной записи, браузерная часть этого процесса закончилась, и вы можете вернуть их в свое приложение.
Так же, как запрос нового токена, утвержденный ответбудет включать заголовок Authentication-Callback, который, опять же, является удобным способом перенаправить ваше приложение обратно в API и сгенерировать реальный идентификатор сеанса.
Теперь мой вопрос: есть ли у меня имя пользователя и парольМогу ли я аутентифицировать этого пользователя с помощью HttpURLConnection или любым другим способом?
Я пробовал это:
url = new URL(callBackUrl);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
BASE64Encoder encoder = new BASE64Encoder();
String usernamepassword = "myusername" + ":" + "mypassword";
String encodedAuthorization = encoder.encode(usernamepassword.getBytes());
connection.setRequestProperty("Authorization", "Basic "+ encodedAuthorization);
headerFields = connection.getHeaderFields();
for(Map.Entry<String, List<String>> entry : headerFields.entrySet()) {
System.out.println(entry.getKey() + " : " +entry.getValue());
}
Но в консоли я получил:
null : [HTTP/1.1 404 Not Found]
Status : [404 Not Found]
X-Frame-Options : [sameorigin]
Date : [Tue, 28 Feb 2012 08:30:17 GMT]
Vary : [Accept-Encoding]
X-Cascade : [pass]
Content-Length : [7835]
X-XSS-Protection : [1; mode=block]
Set-Cookie : [tmdb.session=BAh7CUkiD3Nlc3Npb25faWQGOgZFRiJFNGRkMjc5ODYwMjJmYWYwZDlmOGE5%0AOTVjY2E0NWFjMzhhYTRiOGFjOGJiYjQ5ZGFhNzExNDdkMGM4MWNhZGUyMEki%0ADWxhbmd1YWdlBjsARkkiB2VuBjsARkkiC2xvY2FsZQY7AEZJIgd1cwY7AEZJ%0AIg5sb2dnZWRfaW4GOwBGRg%3D%3D%0A; path=/; expires=Thu, 29-Mar-2012 08:30:17 GMT; HttpOnly]
Content-Type : [text/html;charset=utf-8]
Connection : [keep-alive]
Server : [nginx]
Как вы можетесм .:
Status : [404 Not Found]
Так что последняя процедура не приносит результатов.
Неправильно ли я выполняю аутентификацию?
Я действительно ценю ваше предложение.
Заранее спасибо.