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 でエンコードされているようです

クライアントは、ヘッダーの代わりに URL を介して認証情報を送信する外部 Web サービス (Twilio) です。

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();

(もちろん、分割する前にユーザー情報が null かどうかをテストする必要があります。)

于 2010-06-21T23:44:45.143 に答える