在GAE应用程序中管理用户身份验证

时间:2017-05-25 20:47:20

标签: google-app-engine session authentication usersession

Google App Engine应用程序中管理用户会话的最佳方法是什么?理想情况下,我希望保持我的应用程序无状态,而不是将任何与用户相关的数据保存在内存中,但是我也害怕在每次请求时都发送网络的用户凭据(更不用说在每个请求中对用户进行身份验证)需要拨打费用Datastore {。}}。

我查看了谷歌的OAuth 2.0解决方案,但根据我的理解,如果我的应用程序想要连接到任何Google API并需要客户授权才能访问他的Google帐户,这会有所帮助。

是否有管理用户会话的方法?最常见的情况是知道哪个用户发起了此请求,而无需将userId作为请求参数发送。

请注意我们不使用第三方提供商。用户通常会将自己注册到我们的页面并拥有自定义帐户。我正在寻找有助于将身份验证与第三方服务集成的工具。否则,我将使用谷歌的OAuth 2.0或类似的API

1 个答案:

答案 0 :(得分:0)

您始终可以实施身份验证器接口。

        public class MyAuthenticator implements Authenticator {
    @Override
    public User authenticate(HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        //
        return null;// if not authenticated, otherwise return User object.
    }
}

// Endpoints class.
@Api(name = "example", authenticators = { MyAuthenticator.class })
public class MyEndpoints {
    public Profile getProfile(User user) {

        if (user == null) {
            throw new UnauthorizedException("Authorization required");
        }
        return new Profile(user.getEmail(), "displayName");
    }

    // store this class somewhere in models
    public class Profile {
        private String email;
        private String displayName;

        public Profile(String email, String displayName) {
            this.email = email;
            this.displayName = displayName;
        }

        public String getEmail() {
            return email;
        }




        public String getdisplayName() {
            return displayName;
        }
    }
}

使用HttpServletRequest对象实现基于经典会话的登录或使用您自己的自定义标头。那取决于你的情况。未经过身份验证时返回null,并在进行身份验证时返回User对象。还要在双方(客户端和服务器)上实现某种加密,以阻止有会话密钥的人访问你的api。