我正在尝试在Web应用程序中实现文件传输功能。用户将访问该页面,单击“从Google云端硬盘传输”按钮,然后他们可以选择要发送到我的应用程序的文件。当然,这涉及一些Oauth2流,我想知道我的设置是否安全。
为了让用户选择文件,我正在使用Google Picker API / javascript库(https://developers.google.com/picker/)。这将运行基于浏览器的OAuth2流,在此期间,客户端会使用OAuth2令牌。用户选择文件并单击“确定”后,便有一个回调函数。在https://developers.google.com/picker/docs/中的“ hello world”示例中,它们仅打印所选文件的URL。
在我的应用程序中,我想下载文件,因此我正在使用该回调将文件ID和OAuth2令牌发送到我的后端服务器,然后由我下载服务器。相关的客户端脚本为:
function pickerCallback(data) {
if (data.action == google.picker.Action.PICKED) {
// get the unique File IDs
var allFileIds = [];
for(var i=0; i < data.docs.length; i++){
allFileIds.push(data.docs[i].id);
}
// oauthToken was set elsewhere
data = {"file_ids": allFileIds, "token": oauthToken};
csrf_token = getCsrfToken();
$.ajax(
{
url:"https://<MY URL>",
type:"post",
data:{"data": JSON.stringify(data)},
headers:{"X-CSRFToken": csrf_token},
dataType:"json",
success: function (data) {
console.info(data);
}
}
);
}
}
我已确认这可行(一旦后端具有文件ID和令牌,便可以下载文件)。我的问题是,在ajax请求中发送OAuth2令牌是否安全...?仅当我的服务器为https时才安全吗?还是可以将其放在标题中?哪个是“最佳”?
如果它不安全,我还能怎么做(不惹恼用户)?用户必须首先授予访问权限以启动客户端“选择器”,但是我显然不想再问我,以便我的Web服务器可以执行整个OAuth2流并为后端获取其他令牌。
谢谢!