我有一個Rails網站,它已經實現並正在使用Google OAUTH2。將iOS的OAUTH2令牌傳遞給Rails
我們正在開發一個iOS應用程序,它將使用API與我的Web服務器通信。某些API需要用戶進行身份驗證。這個想法是,iOS應用程序使用設備上的OAUTH2對用戶進行身份驗證,然後通過SSL將設備上的令牌通過SSL從設備發佈到Web上作爲身份驗證。我需要網站來驗證令牌。
在谷歌API控制檯,我添加了客戶端ID爲iPhone設備,並要得到一個訪問令牌:
https://accounts.google.com/o/oauth2/auth?
scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&
redirect_uri=urn:ietf:wg:oauth:2.0:oob&
response_type=code&
client_id={my client id}
然後,我通過令牌到我的網站。在我的網站,我驗證通過令牌:
google = OmniAuth::Strategies::GoogleOauth2.new(ENV['GOOGLE_API_KEY'],['GOOGLE_CLIENT_API_SECRET'])
client = OAuth2::Client.new(ENV['GOOGLE_API_KEY'],['GOOGLE_CLIENT_API_SECRET'], google.options.client_options)
access_token = OAuth2::AccessToken.new(client, params[:token], google.options.access_token_options || {})
google.access_token = access_token
google.auth_hash
當我嘗試auth_hash
,返回以下錯誤:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Invalid Credentials"
}
}
從這裏,我不知道爲什麼我指定憑據無效。
ENV['GOOGLE_API_KEY']
指向與網站相同的API密鑰,而ENV['GOOGLE_CLIENT_API_SECRET']
指向iOS客戶端的祕密。
我不知道代碼或者Rails,但錯誤的氣味就像Google期待的那樣,http請求上的「授權」標題並未獲得。 – drekka 2012-08-10 02:17:22