我正在开发一个在登录时使用OAuth2的App Engine Java程序。换句话说,用户必须在使用该应用程序之前获得批准。我现在想要集成Google Picker功能,而无需在客户端上进行身份验证(再次请求权限)。
我所做的是传递一个对象(loginInfo是一个json对象),并将该标记作为属性。
虽然令牌在服务器端完全正常,但在客户端上我收到UnAuthorized 401错误。 的修改 我应该提一下,服务器端的范围包括Picker上Views的所有必要权限,以及我的Picker Api以及Drive API。
现在我的问题是,处理这种情况的最佳方法是什么?在客户端上发布authToken是否安全?如何才能实现此方案,以便用户不会批准两次仍然使用Picker?是否有比Picker更好的解决方案上传到云端硬盘,Picassa或其他Google服务?
答案 0 :(得分:0)
首先,让我道歉,因为我忘了提到我正在使用GWT来编写应用程序。话虽如此,似乎错误来自使用GWT-Ajaxloader库;显然它必须以过时的方式呼叫api。所以我的解决方案是将请求硬编码到html中 因此
<!-- The Following proves that picker works with oAuth2 -->
<script type="text/javascript">
// Use the API Loader script to load google.picker and gapi.auth.
function onApiLoad() {
gapi.load('picker');
}
</script>
<script type="text/javascript" src="https://apis.google.com/js/api.js?onload=onApiLoad"></script>
完成此操作后,我可以使用已加载的picker对象并放入setDeveloperKey()方法。现在一切都很好吃。还有一点需要注意...... 确保服务器上的AccessKey尚未过期。关于Java Api 这可以通过检查它何时到期来完成Credential.getExpiresInSeconds()我亲自给了自己一个小时
if(cred.getExpiresInSeconds() <= 3600){
cred.refreshToken();}
这是对我有用的修复方法。