2012-12-11 2 views
0

Этот вопрос находится в в последующих до моего предыдущего вопросаGoogle OAuth Java клиент, чтобы получить маркер доступа терпит неудачу с «400 Bad Request {» Ошибка «:» invalid_request «}»

Google oauth java client to get an access token fails with "400 Bad Request { "error" : "invalid_request" }"

Я нырнула в API JAVA, чтобы решить проблему обмена кодом для authToken в API oAuth Google, но не смог найти ответа. Таким образом, я пошел очень упрощенным путем.

Я создал следующие JSPs

index.jsp

<%@page import="java.net.URLEncoder"%> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 
    </head> 
    <body> 
     <a href="https://accounts.google.com/o/oauth2/auth? 
scope=https://gdata.youtube.com/& 
redirect_uri=<%=URLEncoder.encode("http://localhost:8080/BroadCastr/step2.jsp","UTF-8")%>& 
response_type=code& 
client_id=X985XXXXXXXX.apps.googleusercontent.com&approval_prompt=force">Connect google account</a> 
    </body> 
</html> 

Эта страница представленной мне с простой ссылкой на «Connect Google аккаунт», который привел меня успешно на страницу Googles, где я должен был «Разрешить» мой приложение для доступа к YouTube от моего имени

в step2.jsp

<%@page import="java.net.URLEncoder"%> 
<%@page import="java.util.Iterator"%> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 
    </head> 
    <body> 

     <form id="frm" method="post" action="https://accounts.google.com/o/oauth2/token" enctype="application/x-www-form-urlencoded"> 
      <input type="hidden" name="code" value="<%=URLEncoder.encode(request.getParameter("code"),"UTF-8")%>"/> 
      <input type="hidden" name="client_id" value="XXXXXXXXXXX.apps.googleusercontent.com"/> 
      <input type="hidden" name="client_secret" value="XXXXxxxxXXXXXX"/> 
      <input type="hidden" name="redirect_uri" value="<%=URLEncoder.encode("http://localhost:8080/BroadCastr/step3.jsp","UTF-8")%>"/> 
      <input type="hidden" name="grant_type" value="authorization_code"/> 
      <input type="hidden" name="scope" value=""/> 
     </form> 
    </body> 
</html> 
<script> 
    document.getElementById("frm").submit(); 
</script> 

Но в конце концов step2.jsp представляет себя на сервер Google, все, что я получаю следующий бесполезных JSON

{ 
"error": "invalid_request" 
} 

Я действительно будет признателен за любую помощь на этом.

+0

Можете ли вы отправить запрос на отправку в Google? некоторый захват скрипача – Vlad

ответ

2

При создании POST к конечной точке доступа маркера требуемые параметры НЕ должны быть закодированы в url (по крайней мере, для API Google).

Здесь параметр redirect_uri закодирован и, следовательно, он не совпадает с тем, который использовался во время регистрации клиента, что привело к invalid_request.

На основании приведенного выше кода JSP, если параметр redirect_uri фиксируется, маркер ответа сервера может привести к invalid_grant, как code также кодируется. Обычно google выдает код авторизации, который не подходит для URL.

Извлечение кодировки для и redirect_uri параметра выше должно приводить к ответу сервера, содержащему токен доступа.

+1

Вы были правы, а не кодирование URI частично решает проблему. Теперь я получаю «ошибку»: «redirect_uri_mismatch» !! Я убедился, что http: // localhost: 8080/BroadCastr/step3.jsp настроен в Google Access Console – Sap

+0

Ну, вы были правы, я исправил последний вопрос, переименовав его на step2.jsp – Sap

Смежные вопросы