当前位置 : 主页 > 手机开发 > cordova >

cordova – 将Google API与OAuth2联系时的Redirect_uri_mismatch

来源:互联网 收集:自由互联 发布时间:2021-06-10
我正在使用Sencha Touch和PhoneGap创建移动应用程序.我希望能够允许用户使用他们的Google凭据登录应用程序但是我遇到了初始请求的砖墙,并出现以下错误: 请求中的重定向URI:http://localh
我正在使用Sencha Touch和PhoneGap创建移动应用程序.我希望能够允许用户使用他们的Google凭据登录应用程序但是我遇到了初始请求的砖墙,并出现以下错误:

请求中的重定向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.

祝好运!

网友评论