Question

J'aimerais créer une architecture de service Web pouvant être appelée par diverses plates-formes telles que des appareils mobiles, des applications Winforms, un iphone, un blackberry, etc. Donc, aller avec quelque chose comme WCF et la liaison wsHttp tue probablement ceci et j’aurais besoin de passer à une liaison basicHttp pour des raisons de compatibilité.

Cela dit, j’ai besoin d’un système qui génère un jeton lors de la connexion initiale (authentification), puis l’utilise pour tous les appels suivants, je suppose, pour valider l’authentification et permettre à la méthode de s’exécuter.

Quelqu'un a des conseils ou des suggestions sur la façon de s'y prendre? 1) Générer un jeton et que comprend un jeton sécurisé? 2) Pendant combien de temps le jeton est-il bon, certains utilisateurs peuvent utiliser leur application pendant des heures et éventuellement même "dormir" leur ordinateur

Merci pour le conseil.

Était-ce utile?

La solution

Si vous utilisez un seul jeton fourni par le serveur lors de l'authentification initiale, il peut être utilisé pour toute requête si elle est interceptée. Votre seule défense est le délai d'expiration.

Au-delà, cela dépend de vos options de mise en œuvre.

Un système plus sécurisé consiste à ajouter un horodatage (et éventuellement un nonce) à chaque demande, à le signer et à l'inclure à chaque demande. Pour ce faire, le client doit gérer les informations d’authentification, connaître l’implémentation de la signature et signer chaque demande.

Vous pouvez également demander au serveur de s'authentifier à chaque demande (ce qui peut être fait avec OpenID) ou de distribuer un nombre de jetons et de vous authentifier à nouveau si nécessaire (ce qui pourrait être fait avec OAuth). Si le client peut stocker des informations d'identification, celles-ci peuvent être invisibles pour l'utilisateur. Celles-ci sont plus complexes, nécessitant un transport crypté tel que SSL pour certaines des interactions et un client capable de parler des redirections HTTP et de gérer les cookies ou tout autre état stocké. Le client n'aurait pas à savoir comment signer, mais si vous pouvez utiliser SSL, vous n'aurez probablement pas besoin de la complexité.

Si vous n'avez pas besoin d'être agnostique envers le client, vous souhaiterez probablement signer des demandes.

Pour signer des implémentations, des exemples et des bibliothèques, consultez Amazon Web Services, OpenID ou OAuth.

En ce qui concerne le délai d'expiration du jeton, cela dépend de vos besoins. Une durée de vie plus longue des jetons augmente les attaques par relecture de fenêtre. Un nonce crée un jeton à usage unique, mais nécessite davantage d’état sur le serveur.

Autres conseils

Vous devriez consulter OAuth . C’est un standard pour l’authentification par API, vous pouvez probablement simplement connecter une implémentation existante à votre service.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top