将OAUTH2令牌从iOS传递到Rails
我有一个Rails网站,它已经实现并运行了GoogleOAuth2 我们正在开发一个iOS应用程序,它将使用API与我的web服务器进行对话。有些API需要对用户进行身份验证。其思想是,iOS应用程序在设备上使用OAUTH2对用户进行身份验证,然后通过SSL将令牌从设备发布到web作为身份验证。我需要网站来验证令牌 在Google API控制台中,我添加了iPhone设备的客户端ID,并通过转到以下位置获得访问令牌:将OAUTH2令牌从iOS传递到Rails,ios,ruby-on-rails,oauth-2.0,Ios,Ruby On Rails,Oauth 2.0,我有一个Rails网站,它已经实现并运行了GoogleOAuth2 我们正在开发一个iOS应用程序,它将使用API与我的web服务器进行对话。有些API需要对用户进行身份验证。其思想是,iOS应用程序在设备上使用OAUTH2对用户进行身份验证,然后通过SSL将令牌从设备发布到web作为身份验证。我需要网站来验证令牌 在Google API控制台中,我添加了iPhone设备的客户端ID,并通过转到以下位置获得访问令牌: https://accounts.google.com/o/oauth2/au
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
当我尝试验证哈希时,返回以下错误:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Invalid Credentials"
}
}
从这里,我不知道为什么我指定了无效的凭据
ENV['GOOGLE\u API\u KEY']
指向与网站相同的API密钥,ENV['GOOGLE\u CLIENT\u API\u SECRET']
指向iOS客户端的秘密。我认为,我上面使用的URL给了我一个访问令牌。实际上,它会向我返回一个授权代码
(然后可以使用该代码获取访问令牌
)
解决方案是将授权码
交换为访问令牌
,然后我可以传递令牌并使用它
在谷歌网站上,授权码
和访问令牌
之间的区别有些模糊,但你可以在这里了解如何交换它们:
我不知道代码或Rails,但这个错误闻起来像是Google希望http请求上有一个“授权”头,但没有得到。