来自Restlet中url的基本身份验证

时间:2010-06-17 16:09:27

标签: java authentication restlet basic-authentication url-encoding

我一直在使用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以这种方式进行身份验证的正确方法是什么?

1 个答案:

答案 0 :(得分: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();

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