【发布时间】:2015-09-21 03:49:43
【问题描述】:
我一直在努力使用 Google OAuth 2.0 身份验证获取 Google+ 的用户个人资料,我从 Cordova 的 InAppBrowser 访问。我已经能够从 InAppBrowser 获得响应代码。当我想使用响应代码获取授权令牌时会出现问题,我想使用它来访问 Google+ API。我不知道应该使用哪个 URL 来获取令牌,对于 client_secret,我使用的是 Google Developers 控制台凭据中提供的那个(Android 应用程序的密钥:API 密钥)。
代码如下:
authorize: function(options) {
var deferred = $.Deferred();
var authUrl = 'https://accounts.google.com/o/oauth2/auth?' + $.param({
response_type: 'code',
client_id: options.client_id,
redirect_uri: options.redirect_uri,
scope: options.scope
});
var authWindow = cordova.InAppBrowser.open(authUrl, '_blank', 'location=no,toolbar=no');
$(authWindow).on('loadstart', function(e) {
var url = e.originalEvent.url;
var code = app.getParameterByName(url, 'code').trim();
var error = app.getParameterByName(url, 'error');
if (code || error) {
authWindow.close();
if (code) {
$.post('https://accounts.google.com/o/oauth2/token', {
code: code,
client_id: options.client_id,
client_secret: options.client_secret,
redirect_uri: options.redirect_uri,
grant_type: 'authorization_code'
}).done(function(data) {
deferred.resolve(data);
}).fail(function(response) {
console.log(JSON.stringify(response));
deferred.reject(response.responseJSON);
});
} else if (error) {
deferred.reject({error: error});
}
}
});
return deferred.promise();
}
此请求将始终被捕获为失败,并带有响应消息: {"readyState":0,"status":0,"statusText":"Error: SecurityError: DOM Exception 18"}
真的需要你的帮助。
谢谢
【问题讨论】:
-
快速猜测,尝试卸载插件“cordova-plugin-whitelist”,然后添加“cordova-plugin-legacy-whitelist”。请注意,这不是推荐的解决方案,但如果它解决了您的问题,则意味着您必须正确配置安全设置。你测试的是什么版本的安卓?
-
我正在使用安装了 android v4.0.2 的 cordova v5.1.1。我刚刚尝试了您的建议,将白名单插件替换为旧插件。不幸的是,结果是一样的。响应仍然失败。那么对于令牌 url,我应该使用googleapis.com/oauth2/v3/token 来访问吗?我也试过那个,但还是失败了。有没有我为请求输入错误的参数?响应错误消息也不够清楚,我无法在 Google 上搜索。还有其他建议吗?
-
它是关于 Content-Security-Policy,就像在使用 cordova-plugin-whitelist 的 cordova v5.1.1 中,它指定:ssl.gstatic.com'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
-
我使用 adb logcat 收到的错误消息:[INFO:CONSOLE(0)] "拒绝连接到 'accounts.google.com/o/oauth2/token',因为它违反了以下内容安全策略指令:"default-src' self' data: gap: ssl.gstatic.com 'unsafe-eval'"。请注意,'connect-src' 没有显式设置,因此 'default-src' 用作后备。
-
认为使用 cordova-plugin-legacy-whitelist 会禁用所有 CSP 检查...看来我错了
标签: android cordova oauth google-plus inappbrowser