1

J'ai utilisé le mécanisme "ChallengeResponse" de Restlets pour authentifier les utilisateurs côté serveur. D'après ce que j'ai compris, "ChallengeResponse" exige que le nom d'utilisateur et le mot de passe soient mis dans les en-têtes. Toutefois, un client a besoin de mettre les informations d'identification dans l'URL comme ceci:Authentification de base depuis l'URL du Restor

https://username:[email protected]/my_secure_document 

Quand je regardais ce qui a été envoyé, il semble que le mot de passe est codé en Base64

Le client est un service Web externe (Twilio) qui envoie les informations d'authentification via l'URL au lieu des en-têtes ....

Quelle est la bonne façon de s'authentifier de cette manière en utilisant Restlet?

Répondre

2

Le fragment de code que vous avez placé ci-dessus ressemble à du côté serveur.

Je suppose que votre question concerne l'utilisation de cet URI par le client (et je présume également que votre client utilise Restlet). Vous pouvez construire une référence et extraire le nom d'utilisateur et mot de passe en utilisant Reference.getUserInfo() comme ceci:

Reference ref = new Reference("https://username:[email protected]/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(); 

(. Bien sûr, vous aurez besoin de vérifier si les informations utilisateur est nul avant de se séparer)

+0

Je suis désolé, j'aurais dû être plus précis. Le code est du côté serveur, mais le client est un service Web externe (Twilio) qui envoie les informations d'authentification via l'URL au lieu des en-têtes. –

+0

Ah OK. Dans ce cas, il n'est pas envoyé via l'URL, c'est juste une notation. Le client va automatiquement mettre cela dans les en-têtes. Pour clarifier les choses, comme faire http://example.com/test envoie cela en fait: HTTP GET/test/1.1 Host: example.com Le nom d'utilisateur: mot de passe sont également transformé automatiquement dans les en-têtes HTTP appropriées , le cas échéant (comme je l'ai dit dans la liste Restlet, cette option est désactivée avec certains navigateurs pour des raisons de sécurité). Le comportement dans ce cas est purement contrôlé par le client. Cela peut valoir la peine de consigner toutes les demandes pour voir ce qu'il envoie. – Bruno

+1

Puisqu'un mot de passe peut contenir lui-même un deux-points, considérer 'ref.getUserInfo(). Split (": ", 2)' (ce n'était pas mon idée, ça a été suggéré dans un montage, je pensais juste que c'était le mauvais endroit pour ça). –