我有一个Web应用程序,它在服务器端运行Java Rest API(Jersey和JAX-RS),在客户端运行基本的JS + Angular。用户使用google登录,如下所示,
this.handleClientLoad = function () {
gapi.client.setApiKey(apiKey);
gapi.auth.init(function () { });
this.checkAuth();
deferred = $q.defer();
return deferred.promise;
};
this.checkAuth = function() {
gapi.auth.authorize({
client_id: clientId,
scope: scopes,
immediate: true,
cookie_policy: cookies,
hd: domain
}, this.handleAuthResult);
};
this.handleAuthResult = function(authResult) {
if (authResult && !authResult.error) {
var data = {};
gapi.client.load('oauth2', 'v2', function () {
var request = gapi.client.oauth2.userinfo.get();
request.execute(function (resp) {
user.email = resp.email;
user.uid = resp.id;
user.name = resp.name;
this.loggedIn = true;
//deferred.resolve(data);
user.getUser().then(function(data){
//add user loc to loc
user.loc.lat = data.lat;
user.loc.lon = data.lon;
user.loc.radius = data.radius;
user.loc.set = true;
user.loc.inDB = true;
// start loading the book list
deferred.resolve(data);
}, function(err){
user.loc.inDB = false;
user.loc.set = true;
deferred.resolve(data);
});
});
});
} else {
this.loggedIn = false;
deferred.reject('error');
}
};
在此之后,我们拥有了我们需要的用户信息,但任何Rest Client都可以在我们的API中发出请求。我们迄今为止(大致)保护它的唯一方法是通过请求向用户发送Google ID,并使用id作为过滤器进行查询。但是,我知道这不是最合适的方式。
我一直在努力了解如何使用OAuth和获取令牌,但是当用户同意他/她的信息时,似乎令牌才会出现。
如何从前端的Google获取内容,在后端创建请求并确认此用户是否真实?
我一直在苦苦挣扎,我认为不应该那么难。
谢谢!