Cordova 使用OAuth2联系Google API时重定向uri不匹配
我正在使用Sencha Touch和PhoneGap创建一个移动应用程序。我希望能够允许用户使用他们的Google凭据登录应用程序,但我的初始请求遇到了障碍,出现了以下错误: 请求中的重定向URI:与注册的URI不匹配 我的Google API帐户注册了默认的2个URI(urn:ietf:wg:oauth:2.0:oob) 这两种我都试过了,但都没有成功 我正在发送的请求包含以下查询字符串参数: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:“” 作用域:“” 基本过程是: 如上所
- 响应类型:“代码”
- 客户识别码:
- 重定向\u uri:“”
- 作用域:“”
- 如上所述构建URL
- 打开新的浏览器窗口(使用ChildBrowser PhoneGap插件)
- 导航到URL
- 此时,Google登录页面显示并允许我输入凭据
- 登录点击后,我被带到一个包含上述错误的错误页面
斯图尔特我建议你将此作为最佳的出发点来阅读,在你的情况下,你需要此: 可能您使用了错误的端点,要请求用户代码,您需要使用以下端点:
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
。此外,如果您已经获得了访问权限,则可以将其撤销。感谢您给了我在地址栏中检查链接的想法,更快地修复了此问题