1

我一直在使用 Restlets “ChallengeResponse” 机制在服务器端对用户进行身份验证。

ChallengeResponse challengeResponse = getRequest().getChallengeResponse();
if( challengeResponse == null ){
     throw new RuntimeException("not authenticated");
}
String login = challengeResponse.getIdentifier();
String password = new String(challengeResponse.getSecret());

据我了解,“ChallengeResponse”要求将用户名和密码放入标题中。但是,客户端需要将凭据放入 url,如下所示:

https://username:password@www.myserver.com/my_secure_document

当我查看实际发送的内容时,密码似乎是 Base64 编码的

客户端是一个外部 Web 服务 (Twilio),它通过 URL 而不是标头发送身份验证信息....

使用 Restlet 以这种方式进行身份验证的正确方法是什么?

4

1 回答 1

2

您在上面放置的代码片段看起来像是在服务器端。

我想你的问题是关于从客户端使用这个 URI(我还假设你的客户端使用 Restlet)。您可以使用 Reference.getUserInfo() 构建参考并提取用户名和密码,如下所示:

Reference ref = new Reference("https://username:password@www.myserver.com/my_secure_document");
String[] userinfo = ref.getUserInfo().split(":"); // "username:password"
String username = userinfo[0];
String password = userinfo[1];
ClientResource clientRes = new ClientResource(ref);
clientRes.setChallengeResponse(ChallengeScheme.HTTP_BASIC, username, password);
clientRes.get();

(当然,你需要在拆分之前测试用户信息是否为空。)

于 2010-06-21T23:44:45.143 回答