请求中的重定向URI:http://localhost与注册的URI不匹配.
我的Google API帐户已注册默认的2个URI(http://localhost和urn:ietf:wg:oauth:2.0:oob).
我试过这两个都没有成功.
我发送的请求包含以下查询字符串参数:
> response_type:’code’
> client_id:< client id>
> redirect_uri:’http://localhost‘
>范围:’https://www.googleapis.com/auth/plus.me‘
基本过程是:
>如上所述构建URL
>打开新的浏览器窗口(使用ChildBrowser PhoneGap插件)
>导航到URL
>此时Google登录页面显示并允许我输入凭据
>点击登录后,我将进入包含上述错误的错误页面.
我在iPhone模拟器和我的iPhone上测试它,两者都有相同的结果.该应用程序不能在http://localhost网址上运行,而是在文件:/// var / mobile / Applications /< guid> /< app name> /www/index.html上运行,但没有选项可以添加谷歌控制台(..或在那里?:))
有没有人有任何关于为什么这不起作用的建议?我几乎没有使用OAuth和Google的API的经验,因此任何小提示都非常受欢迎!
提前致谢
斯图尔特
我建议你把它作为 Google API with OAuth2的最佳起点,在你的情况下你需要这个: OAuth2 for Devices.您可能正在使用错误的端点来请求用户代码,您需要使用以下端点:
https://accounts.google.com/o/oauth2/device/code
这是一个使用curl的示例(在您的情况下授权访问Google API):
curl https://accounts.google.com/o/oauth2/device/code -d "client_id=**your_client_id**" -d "scope=https://www.googleapis.com/auth/plus.me" -d "redirect_uri=urn:ietf:wg:oauth:2.0:oob"
你会得到这样的答案:
{ "device_code" : "4/AToZcyQ7U1BTV-xu4LAqpw02SgIW", "user_code" : "bqsj67hb", "verification_url" : "http://www.google.com/device", "expires_in" : 1800, "interval" : 5 }
然后,您需要请求授权,向用户显示user_code和verification_url,以便将您的应用与用户的用户帐户“配对”. Here there is a good example of this或documentation:
After your application has shown the user the user_code and the verification_url, your application may begin polling a Google endpoint with the device_code that was returned with the user_code and verification_url. The URL of the endpoint to poll is 07004, and the interval between requests is specified as the interval in seconds.
最后一步,使用curl请求access_token:
curl https://accounts.google.com/o/oauth2/token -d "client_id=**your_client_id**&client_secret=**your_client_secret**&code=**the _device_code_obtained_before**&grant_type=http://oauth.net/grant_type/device/1.0"
你会得到这样的回复:
{ "access_token" : "y23r9.AHES6ZT78qJl14pTueruthfh5676TYDF234-Eme33iQ", "token_type" : "Bearer", "expires_in" : 3600, "id_token" : "eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwiYXVkIjoiNzgyMTM3OTUzMjkwLmFwcHMuZ29vZ2iLCJ0b2tlbl9oYXNoIjoiUUt0YmxTZUdsRUdNOVdPcUliRGR2QSIsImlhdCI6MTMzNDE3MDI1NywiZXhwIjoxMzM0MTc0MTU3fQ.Iz_Sv9X2fCydj4VfEdDxwWVH70DEK-rSzA5pWV9bvBdYB5VwgwFd8CSnotesDzJxq5pSKGwnAgvBfxSUbuGVmdET3E2sbrLODKymO9FoBzenfVooCwRXurzxvjKWF1EL3007lOPzTx9UGjqwShjjKQRoNjLFs-OmGCJsZGTHTGE", "refresh_token" : "1/gjgpKUyppp223s43HMerTX-zS_2JUxQOCk" }
最后,您可以访问已授予的服务(不要忘记从API控制台配置访问权限,在您的情况下是Google API),并获取access_token.
curl https://www.googleapis.com/plus/v1/people/me?access_token=y23r9.AHES6ZT78qJl14pTueruthfh5676TYDF234-Eme33iQ
关于的问题
“The application doesn’t apear to run on the 07005 url”.
答案是肯定的,这是预期的行为.此redirect_uri告诉您在成功授予应用程序权限后回调的位置.在您的情况下是一个移动设备.
在“urn:ietf:wg:oauth:2.0:oob”的情况下,并不完全是重定向.您需要“捕获”或“挂钩”这一点,只需继续您的过程,可能是this can help you或this.
祝好运!