我目前正在使用Google App Engine / Java上的RESTlet开发一个小项目。
我正在搜索..正在搜索..并且无法找到我怀疑的确切或可理解的解决方案。
我的问题是我怎么想实现自己的SignIn& SignUp模块没有使用谷歌的UserService或Spring Security ??
是否有可用的实际示例代码?
我的意思是SignUp部分只是一个简单的JDO插入&选择模块。我只想说我已经做到了。
我应该如何处理每个用户的请求会话和身份验证?
我正在考虑在每个请求上使用HTTPS。
任何建议或帮助都会非常感激!
提前致谢。
答案 0 :(得分:1)
在Restlet中,您在客户端和服务器端都有安全支持。在客户端,您可以使用ChallengeResponse实体指定安全提示。此功能已打开,您可以指定所需的身份验证类型。在以下代码中,我使用基于用户名/密码的http基本身份验证:
ClientResource cr = new ClientResource(uri);
ChallengeScheme scheme = ChallengeScheme.HTTP_BASIC;
ChallengeResponse authentication = new ChallengeResponse(
scheme, "username", "password");
cr.setChallengeResponse(authentication);
Restlet将在相应的请求中自动构建必要的标头。您可以注意到Restlet通过其扩展支持各种身份验证类型。我知道目前已经完成了一些工作来支持OAuth v2(参见http://wiki.restlet.org/developers/172-restlet/257-restlet/310-restlet.html)。
在服务器端,您需要使用ChallengeAuthenticator实体在路由级别保护访问,如下所述。这可以在您的Restlet应用程序中完成:
public Restlet createInboundRoot() {
Router router = new Router(getContext());
ChallengeAuthenticator guard = new ChallengeAuthenticator(getContext(),
ChallengeScheme.HTTP_BASIC, "realm");
guard.setVerifier(verifier);
guard.setEnroler(enroler);
guard.setNext(router);
return guard;
}
与客户端类似,此支持是通用的,并且基于需要在防护上指定的两个接口:
您可以注意到双方都需要使用相同的安全技术......
如果要管理用户的身份验证会话,则需要使用cookie自行实现。
当在服务器端成功进行身份验证时,您可以返回包含安全令牌的cookie,该令牌允许您从数据库中检查用户(例如)。下面的一些代码可以实现:
CookieSetting cookie = new CookieSetting(0,
SECURITY_COOKIE_NAME, securityToken);
Series<CookieSetting> cookieSettings = response.getCookieSettings();
cookieSettings.clear();
cookieSettings.add(cookie);
您可以扩展例如Restlet的SecretVerifier类,以便对收到的安全数据添加测试,并在接收安全cookie时添加此代码。
在客户端,您需要首次添加身份验证提示,然后按照以下时间重新发送安全cookie:
ClientResource clientResource = (...)
(...)
Cookie securityCookie = new Cookie(0,
SECURITY_COOKIE_NAME, securityToken);
clientResource.getRequest().getCookies().clear();
clientResource.getRequest().getCookies().add(securityCookie);
希望它会对你有所帮助! 亨利
答案 1 :(得分:0)
如果您对重新使用社交帐户感兴趣,则需要与facebook oauth
等每个帐户进行整合和/或使用app engine authentication via OpenID
两种方式都定义了一个API来验证客户端,您可以使用UserService或通过cookie管理您自己的状态。