在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;
}
像客戶端,這種支持是通用的,是基於需要在保護指定的兩個接口:
- 驗證者之一檢查,如果認證成功
- 的enroler一個填補角色的身份驗證的用戶
你可以注意到,同樣的安全技術必須是在兩邊使用...
如果您想管理用戶的身份驗證會話,則需要使用cookie自行實施。
當服務器端的認證成功時,您可以返回一個包含安全令牌的cookie,以允許您從數據庫中檢查用戶(例如)。像下面的一些代碼可以實現:
CookieSetting cookie = new CookieSetting(0,
SECURITY_COOKIE_NAME, securityToken);
Series<CookieSetting> cookieSettings = response.getCookieSettings();
cookieSettings.clear();
cookieSettings.add(cookie);
可以擴展例如SecretVerifier類的Restlet的增加對接收的安全數據的測試和接收安全cookie時添加此代碼。
在客戶端,你需要添加提示進行身份驗證的第一次,然後重新發送安全Cookie以下時間,如下所述:
ClientResource clientResource = (...)
(...)
Cookie securityCookie = new Cookie(0,
SECURITY_COOKIE_NAME, securityToken);
clientResource.getRequest().getCookies().clear();
clientResource.getRequest().getCookies().add(securityCookie);
希望它會幫助你的! Thierry
添加一些更多的解釋,我有一個iPhone或Android應用程序在客戶端和服務器端我使用谷歌appengine與客戶端一起工作。 – jlc488 2011-03-23 15:15:58
,我希望這個客戶端登錄並註冊自己的社交賬戶信息,如Facebook,雅虎,微博等。 – jlc488 2011-03-23 15:17:21
它與任何這些網站登錄後,我希望這個客戶端訪問GAE上的RESTlet資源。謝謝。 – jlc488 2011-03-23 15:19:02