Question

J'ai une application web asp.net dans lequel j'utilise plusieurs services nous pour servir plusieurs demandes de ajax. Le problème est de savoir comment déterminer si l'appel correspondant est la page que j'ai servi. J'utilise l'authentification des formulaires dans mes pages. Est-il possible dans lequel je peux autoriser l'utilisateur d'appeler la weservice par la même authentification par formulaire.

Était-ce utile?

La solution

Grande question, sans doute!

Cela me rappelle un vieille question que je déjà répondu à . Votre scénario est différent, mais le problème de fond reste le même: si vous appelez un service Web à partir d'un formulaire Web, comment partage données d'authentification avec la forme

?

Il n'y a pas de solution simple et forme proche de celle. Vous pouvez penser à la mise en œuvre WS-Security dans le service Web, et ont le Formulaire Web s'authentifie contre le service Web après avoir vérifié que l'utilisateur est autorisé.

Le service Web ne partagera pas d'informations sur la connexion de l'utilisateur qu'elle ne soit adoptée explicitement comme méthode de paramètre (ie. De void PerformAction(string userId, ...)), mais rappelez-vous que, dans ce cas, la perspective change radicalement.

Ceci est la meilleure idée qui me vient à l'esprit, cependant, garder à l'esprit que ce soit vous redessiner profondément votre service Web ou vous ne pouvez pas laisser les clients générés par les utilisateurs (par exemple. Les applications de bureau compilées contre votre WSDL) pour utiliser votre service.

[Ajouter] maintenant que vous nous avez expliqué votre scénario un peu plus détaillée, voici la partie intéressante de l'ingénierie logicielle:)

Comme je l'ai dit dans mon commentaire, vous disposez de plusieurs options, par exemple:

  1. Stockage nom d'utilisateur / mot de passe dans le balisage de la page (dans les variables Javascript) et ont JQuery les envoyer comme paramètre pour le service Web. WS alors authentifier la demande de Baser sur ces données. Unrecommended parce que si quelqu'un peut accéder à cache utilisateur le mot de passe est exploité (il existe des moyens plus faciles à vola le mot de passe de quelqu'un sur un partage / ordinateur public, je ne vais pas les discuter), et aussi parce que si vous envisagez de passer de simple HTTP vers HTTPS à authentification sécurisée vous devez assurer le service web aussi
  2. avoir une application Web génère une authentification jeton qui est valable pour le service Web. L'idée ressemble à ceci: d'abord, ont un objet partagé entre webapp et service Web (comme un objet à l'intérieur de la collection Application) ou, si webapp et service web sont sur des serveurs différents, utiliser un SGBD; puis, pour chaque authentification réussie de webapp, générer un jeton unique (ID de session peut être fine) et le stocker dans une variable JS qui sera transmis au service Web; enfin, lorsque le service Web est invoquée, se reférer à cet objet partagé que le jeton est valide (ie. utilisateur est authentifié et toujours connecté, avec l'autorisation d'accéder à ce service Web, de sorte que l'authentification et l'autorisation ) , sinon rejeter

Si d'autres gars ont des idées, ne pas hésiter à aider;)

Autres conseils

vous pouvez faire quelque chose comme ça dans votre WebMethod Puisque vous faites l'authentification des forums

If Not HttpContext.Current.User.Identity.IsAuthenticated Then
    Return Nothing
End If

Il est peut-être préférable de jeter une exception si vous faites un GET si, de cette façon le résultat vide ne soit pas mis en cache sur le côté client.

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