Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cordova 使用OAuth2联系Google API时重定向uri不匹配_Cordova_Google Api_Oauth 2.0_Sencha Touch 2 - Fatal编程技术网

Cordova 使用OAuth2联系Google API时重定向uri不匹配

Cordova 使用OAuth2联系Google API时重定向uri不匹配,cordova,google-api,oauth-2.0,sencha-touch-2,Cordova,Google Api,Oauth 2.0,Sencha Touch 2,我正在使用Sencha Touch和PhoneGap创建一个移动应用程序。我希望能够允许用户使用他们的Google凭据登录应用程序,但我的初始请求遇到了障碍,出现了以下错误: 请求中的重定向URI:与注册的URI不匹配 我的Google API帐户注册了默认的2个URI(urn:ietf:wg:oauth:2.0:oob) 这两种我都试过了,但都没有成功 我正在发送的请求包含以下查询字符串参数: 响应类型:“代码” 客户识别码: 重定向\u uri:“” 作用域:“” 基本过程是: 如上所

我正在使用Sencha Touch和PhoneGap创建一个移动应用程序。我希望能够允许用户使用他们的Google凭据登录应用程序,但我的初始请求遇到了障碍,出现了以下错误:

请求中的重定向URI:与注册的URI不匹配

我的Google API帐户注册了默认的2个URI(urn:ietf:wg:oauth:2.0:oob)

这两种我都试过了,但都没有成功

我正在发送的请求包含以下查询字符串参数:

  • 响应类型:“代码”
  • 客户识别码:
  • 重定向\u uri:“”
  • 作用域:“”
基本过程是:

  • 如上所述构建URL
  • 打开新的浏览器窗口(使用ChildBrowser PhoneGap插件)
  • 导航到URL
  • 此时,Google登录页面显示并允许我输入凭据
  • 登录点击后,我被带到一个包含上述错误的错误页面
我在iPhone模拟器和我的iPhone上进行了测试,结果都是一样的。应用程序不会在url上运行,而是在file:///var/mobile/Applications///www/index.html 但是在Google控制台中没有添加此选项(…或者有吗?:)

有没有人对为什么这不起作用有什么建议?我几乎没有使用OAuth和谷歌API的经验,所以任何小提示都是非常受欢迎的

提前谢谢


斯图尔特

我建议你将此作为最佳的出发点来阅读,在你的情况下,你需要此:

可能您使用了错误的端点,要请求用户代码,您需要使用以下端点:

https://accounts.google.com/o/oauth2/device/code
这是一个使用curl的示例(在您的示例中,授权访问Google+API):

你会得到这样的答案:

{
  "device_code" : "4/AToZcyQ7U1BTV-xu4LAqpw02SgIW",
  "user_code" : "bqsj67hb",
  "verification_url" : "http://www.google.com/device",
  "expires_in" : 1800,
  "interval" : 5
}
{
  "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"
}
然后,您需要请求授权,向用户显示用户\u代码验证\u url,以便将您的应用程序与用户的用户帐户“配对”。或从:

在应用程序向用户显示用户\u代码验证\u url后,您的应用程序可以开始使用设备\u代码轮询Google端点,该设备\u代码是随用户\u代码验证\u url返回的。要轮询的端点的URL为,请求之间的间隔指定为以秒为单位的间隔

最后一步,使用curl请求访问令牌:

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" 
您将得到如下响应:

{
  "device_code" : "4/AToZcyQ7U1BTV-xu4LAqpw02SgIW",
  "user_code" : "bqsj67hb",
  "verification_url" : "http://www.google.com/device",
  "expires_in" : 1800,
  "interval" : 5
}
{
  "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"
}
最后,您可以使用获得的access\u令牌访问您授予的服务(不要忘记从API控制台配置访问权限,在您的例子中是Google+API)

curl https://www.googleapis.com/plus/v1/people/me?access_token=y23r9.AHES6ZT78qJl14pTueruthfh5676TYDF234-Eme33iQ

关于

“应用程序无法在url上运行”

答案是是的,这是预期的行为。此重定向\u uri告诉您在成功授予应用程序权限后在何处回调。在您的情况下,是移动设备

在“urn:ietf:wg:oauth:2.0:oob”的情况下,不完全是重定向。你需要“抓住”或“钩住”这个,简单地继续你的过程,也许或者


祝你好运

我遇到了一个类似的问题,我做了如下操作:在API控制台中将我的应用程序注册为Web应用程序,而不是已安装的应用程序。因此,我可以注册一个http://URL作为重定向uri。Apache服务器上我的重定向URL页面的主体是:

<? header("Location:myapp://authorize?code=".$_GET['code']); ?>


这样,该应用程序的行为实际上与其他OAuth授权服务(如facebook)的行为相同

我的答案不是关于移动应用程序,而是可能对其他人有帮助。我有一个重定向url不匹配,我通过在中编辑重定向url修复了这个问题。url必须完全匹配
http://localhost:8080
http://localhost:8080/


我可以通过在浏览器中打开来测试它(替换您的
客户端id
)。如果
重定向\u uri
错误,它会投诉;如果它是正确的,或者您已经授权访问,它将重定向到
localhost:8080
。此外,如果您已经获得了访问权限,则可以将其撤销。

感谢您给了我在地址栏中检查链接的想法,更快地修复了此问题