在Google App Engine
应用程序中管理用户会话的最佳方法是什么?理想情况下,我希望保持我的应用程序无状态,而不是将任何与用户相关的数据保存在内存中,但是我也害怕在每次请求时都发送网络的用户凭据(更不用说在每个请求中对用户进行身份验证)需要拨打费用Datastore
{。}}。
我查看了谷歌的OAuth 2.0
解决方案,但根据我的理解,如果我的应用程序想要连接到任何Google API并需要客户授权才能访问他的Google帐户,这会有所帮助。
是否有管理用户会话的方法?最常见的情况是知道哪个用户发起了此请求,而无需将userId
作为请求参数发送。
请注意我们不使用第三方提供商。用户通常会将自己注册到我们的页面并拥有自定义帐户。我不正在寻找有助于将身份验证与第三方服务集成的工具。否则,我将使用谷歌的OAuth 2.0
或类似的API
答案 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。