2016-08-08 3 views
1

Я пытаюсь получить access_token из Google в приложении Titanium для доступа к API Google+. Я зарегистрировал клиент Oauth2.0 для Android в Google API Console , поэтому у меня есть идентификатор клиента и несколько URL-адресов перенаправления, созданных Google: ["urn: ietf: wg: oauth: 2.0: oob", "http://localhost"]. Я пытаюсь следовать за потоком кода авторизации, поэтому я сделал запрос на авторизацию в конечной точке «https://accounts.google.com/o/oauth2/v2/auth» со следующими параметрами как строки запроса:Google API OAuth 2.0 Titanium: Обязательный параметр отсутствует: response_type

client_id = encodeURI(<app id>) 
redirect_uri = encodeURI("urn:ietf:wg:oauth:2.0:oob") 
response_type = "code", 
state = <random generated number> 
scope = "https://www.googleapis.com/auth/plus.me" 

Тогда я создать WebView и перенаправляют к конечной точке авторизации с строками запроса appendend. Откроется экран входа в Google, и я могу войти в систему и предоставить доступ к приложению. Взамен я получаю url с введенным кодом авторизации, который я могу извлечь для использования для следующего вызова.

Чтобы получить access_token, я делаю запрос POST на «https://accounts.google.com/o/oauth2/v2/auth». Это функция:

function getAccessToken(code) { 

Ti.API.warn("Authorization code: " + code); 

var auth_data = { 
    code : code, 
    client_id : client_id, 
    redirect_uri : redirect_uri, 
    grant_type : "authorization_code", 
}; 


var client = Ti.Network.createHTTPClient({ 

    onload: function() { 
     var response_data = JSON.parse(this.responseText); 
     var access_token = response_data["access_token"]; 
     var expires_in = response_data["expires_in"]; 
    }, 


    onerror: function() { 
     Ti.API.error("HTTPClient: an error occurred."); 
     Ti.API.error(this.responseText); 
    } 

}); 

var body = ""; 

for (var key in auth_data) { 
    if (body.length) { 
     body += "&"; 
    } 
    body += key + "="; 
    body += encodeURIComponent(auth_data[key]); 
} 

client.open("POST", "https://accounts.google.com/o/oauth2/v2/auth"); 
client.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
client.send(body); 


} 

Но я получил код состояния 400 со следующим сообщением: «Параметр Обязательный отсутствует: response_type».

Я не уверен, почему я получаю это, поскольку от OAuth 2.0 specification требуемыми параметрами для запроса токена доступа являются только grant_type, code, client_id и redirect_uri. Я также попытался добавить response_type = «токен», но это должно быть для неявного потока, если я правильно понимаю.

Любые советы?

ответ

0

Кажется, я нашел проблему, конечная точка для обмена токена неправильная. Это должно быть «https://accounts.google.com/o/oauth2/token», по крайней мере, этот работал для меня.

Я хотел бы указать, что в последней документации Google конечная точка для обмена токенами такова: «https://accounts.google.com/o/oauth2/v2/token», но по какой-то причине она не работает для меня (ответ говорит, что URL-адрес не поддерживается сервер). Надеюсь, это поможет людям с подобной проблемой.

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

  • Нет связанных вопросов^_^