L'authentification de l'utilisateur lors de la consommation d'un REPOS webservice avec ServiceStack
La ServiceStack docs sont plein d'exemples sur la façon d'utiliser côté serveur mise en œuvre de l'authentification d'un utilisateur. Mais comment peut-on définir l'identification de l'utilisateur sur le côté client?
- Je utiliser ServiceStack de consommer un JSON REST
ce type de service:
var restClient = new JsonServiceClient (baseUri);
var response = restClient.Get<MyResponse> ("/some/service");
Comment puis-je ajouter toute forme d'authentification de la demande? Le webservice je veux consommer utilise OAuth 1.0
, mais je suis intéressé par l'ajout de l'authentification personnalisée, trop.
Dans mon code, j'ai déjà effectué jeton OAuth échange avec succès, donc j'ai déjà un jeton d'accès valide et doivent signer chaque demande RESTE maintenant à l'aide de ce jeton d'accès et son token_secret
.
OriginalL'auteur Dynalon | 2012-12-09
Vous devez vous connecter pour publier un commentaire.
ServiceStack de AuthTests montre les diverses méthodes d'authentification lors de l'utilisation de la ServiceStack Service Clients. Par défaut BasicAuth et DigestAuth est construit dans les clients, l'e.g:
Derrière les coulisses ServiceStack tenterons de vous envoyer la demande normalement, mais lorsque la demande est rejetée et contesté par le Serveur, les clients seront automatiquement réessayer la même demande, mais cette fois avec la de Base/Digest Auth-têtes.
De sauter le tronçon supplémentaire lorsque vous savez que vous avez accès à un service sécurisé, vous pouvez dire aux clients de toujours envoyer les BasicAuth en-tête:
L'autre moyen d'Authentifier est de faire un appel explicite à la
Auth
service (cela nécessite CredentialsAuthProvider activé) e.g:Après un appel réussi à l'
Auth
service le client est Authentifié et si RememberMe est définie, le client conservera les Cookies de Session ajouté par le Serveur sur les demandes ultérieures, qui est ce qui permet aux futures demandes de client pour être authentifié.cool, retiré de Q. merci de me laisser savoir!
OriginalL'auteur mythz
Répondre à moi-même, j'ai trouvé une belle façon de le faire à l'aide de la
LocalHttpWebRequestFilter
crochet dans leJsonServiceClient
:De la sécurisation d'un service web avec OAuth 1.0 a, chaque requête http à envoyer un spécial
Autorisation:
en-tête. Au sein de ce champ d'en-tête, une table de hachage (signature) doit être envoyer qui utilise certaines caractéristiques de la demande de saisie de données, comme le nom, l'url de la requête et d'autres.Maintenant il semble que le
LocalHttpWebRequestFilter
est appelé par ServiceStack juste avant la requête http, et expose le sous-jacentHttpWebRequest
objet, où on peut ajouter des en-têtes supplémentaires et accéder aux champs de la demande.Donc ma solution est maintenant essentiellement:
Noter que j'utilise le Devdefined.OAuth bibliothèque pour faire tous les trucs lourds dans
CalculateSignature()
. La création de jeton de demande, l'obtention de l'autorisation de l'utilisateur, et de l'échange à la demande de jeton jeton d'accès tel que requis par le protocole OAuth est effectué à l'extérieur de ServiceStack, les appels de service.Le
CalculateSignature
est juste un mannequin que j'ai passé, vous auriez à faire le OAuth choses là. J'utilise DevDefined.OAuth pour que. Le jeton d'échange est effectué une seule fois et non à chaque demande. J'ai utilisé ServiceStack+DevDefined.OAuth pour l'échange. L'ensemble du projet est open source, donc vous pouvez prendre un coup d'oeil. Le jeton d'échange est fait ici: github.com/Dynalon/Rainy/blob/master/Rainy/WebService/OAuth/... et le filtre qui vérifie l'autorisation à chaque demande se fait ici: github.com/Dynalon/Rainy/blob/master/Rainy/WebService/OAuth/...merci, check it out!
OriginalL'auteur Dynalon