在客户端进行身份验证,如何保护我的Java Rest API?

时间:2014-11-26 21:32:18

标签: java javascript api rest google-oauth

我有一个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获取内容,在后端创建请求并确认此用户是否真实?

我一直在苦苦挣扎,我认为不应该那么难。

谢谢!

0 个答案:

没有答案