2016-08-08 121 views
1

我試圖從Titanium應用程序的Google中獲取access_token以訪問Google+ API。 我在Google API Console 中註冊了一個Android Oauth2.0客戶端,所以我有一個客戶端ID和一些由Google生成的重定向uris:[「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" 

然後創建一個web視圖,並重定向到授權端點與appendend查詢字符串。谷歌登錄屏幕打開,我可以登錄和授予訪問應用程序。作爲回報,我得到一個帶有授權代碼的網址,我可以將它提取出來用於下一次通話。

爲了獲得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 =「token」,但如果我理解正確,那應該是隱式流。

有什麼建議嗎?

回答

相關問題