2009-02-05 5 views
1

J'ai deux applications Web et les deux sont développés dans ASP.NET. Maintenant, je veux fournir une fonctionnalité qui permet à l'utilisateur de cliquer à partir d'une URL dans le site d'application (un répertoire virtuel d'IIS) A à l'autre URL dans le site d'application B (un autre répertoire virtuel d'IIS).Comment envoyer un ID utilisateur entre différentes applications dans ASP.Net?

J'ai deux idées pour les mettre en œuvre, mais les deux ont des problèmes. Je veux savoir quelle solution devrait être la solution optimale? Solution 1: en utilisant cookie, donc à partir des deux sites d'application, nous pourrions récupérer des informations d'identification de l'utilisateur de cookie de lecture, mais je crains que si cookie est désactivé dans le navigateur, cette fonctionnalité "saut" ne fonctionne jamais.

Solution 2: Lorsque l'utilisateur redirige vers une URL dans un autre site, je peux ajouter l'ID utilisateur après l'URL, je peux rediriger vers cette URL dans un autre site http://www.anotherapplicationsite.com/somesuburl?userID=foo, mais je suis un peu fâcheux de cette façon. facilement qui soulèvent des problèmes de sécurité.

Répondre

-1

Je ne pense pas que 1) fonctionnera à cause de la sécurité du navigateur (les cookies d'un domaine ne peuvent pas être lus par un autre domaine). J'irais avec 2), sauf que je crypterais la valeur de la chaîne de requête.

EDIT: Pour plus d'informations sur les problèmes de confidentialité/sécurité des cookies, consultez la section «Cookies de confidentialité et cookies tiers» here.

+0

Merci Kevin Tighe! "Je ne pense pas que 1) fonctionnera en raison de la sécurité du navigateur (les cookies d'un domaine ne peuvent pas être lus par un autre domaine)." - Je suis intéressé pour en savoir plus sur cette restriction de sécurité. à propos des restrictions de cookie? salutations, George –

+0

Je suis très intéressé par la façon dont vous "cryptez la valeur de la chaîne de requête". Je n'ai jamais fait ça avant. Pourriez-vous me recommander quelques exemples de codes à apprendre? –

+0

S'il redirige simplement d'un répertoire virtuel à un autre sur le même site, les cookies fonctionneront absolument. Les cookies fonctionneront même pour les sous-domaines (app1.myDomain.com peut lire les cookies de app2.myDomain.com). –

-1

Qu'est-ce que vous utilisez comme identifiant de l'utilisateur? Si vous utilisez leur numéro de sécurité sociale ou votre adresse électronique (quelque chose de sensible), vous devrez chiffrer la valeur avant de la mettre dans la chaîne de requête. Sinon (si l'identifiant de l'utilisateur est quelque chose d'ambigu comme un entier ou un GUID), il est bon de placer l'ID sur la chaîne de requête.

+0

Merci Andrew Hare, A propos de vos idées de "chiffrer la valeur avant de le mettre sur la chaîne de requête", je suis très intéressé et pense que ce devrait être une bonne idée. Pourriez-vous me recommander des didacticiels ou des exemples de codes à apprendre? Je n'ai jamais fait ça avant. :-) –

0

Tant que vous avez un bon système d'authentification en place sur le deuxième site Web, je pense que la solution 2 est celle pour vous, en tenant compte de la remarque qu'Andrew a faite au sujet des identifiants sensibles bien sûr.

Pour plus d'informations sur le cryptage: consultez la documentation du FormsAuthentication.Encrypt Method. Je pense qu'ils font même quelque chose avec l'écriture d'une valeur dans un cookie dans cet exemple.

+0

Si la méthode FormsAuthentication.Encrypt utilise un cookie, un autre domaine pourrait-il utiliser le cookie? Je pense que les informations de cookie ne peuvent pas être récupérées à partir d'un autre domaine? :-) –

-1

en utilisant plusieurs domaines, vous ne pouvez pas partager la session, donc je pensais à POST

idée 1

si peur de « montrer » le nom d'utilisateur dans l'adresse, pourquoi ne pas envoyer un POST ?

<form name="myForm" action="http://www.mydomain.com/myLandingPage.aspx"> 
    <input type="hidden" id="userid" value="myUsername" /> 
    <a href="javascript:myForm.Submit();">click here</a> 
</form> 

mais ... hors cours, "Afficher la source code" va montrer

idée 2

alors .. je me suis souvenu que je fais la même chose, mais l'envoi d'un Encrypted chaîne comme:

http://www.anotherapplicationsite.com/somesuburl?userID=HhN01vcEEtMmwdNFliM8QYg+Y89xzBOJJG+BH/ARC7g= 

vous pouvez utiliser l'algorithme Rijndael pour effectuer ce, lien ci-dessous a VB et C# code:

http://www.obviex.com/samples/EncryptionWithSalt.aspx

puis dans le site 2, juste Décrypter et vérifier si l'utilisateur existe ...si c'est le cas, continuez, si ce n'est pas dit que l'utilisateur a essayé de tempérer la chaîne de requête :)

+0

Je n'ai pas vu comment dans votre code javascript, vous envoyez par POST et crypter l'ID utilisateur? Confus. –

+0

ils sont 2 idées, seulement après avoir écrit le premier j'ai réalisé que vous devriez éviter d'écrire le nom d'utilisateur dans un champ caché. la 2ème idée utilise le code .NET dans le lien pour transmettre le nom d'utilisateur chiffré. – balexandre

0

Si vous mettez l'ID utilisateur dans une chaîne de requête et que toute la 2ème application utilise pour autoriser la connexion, qu'est-ce qui me retient manuellement taper dans d'autres utilisateurs id? Vous devrez toujours demander un mot de passe sur le nouveau site.

J'utiliserais une base de données pour conserver les informations de connexion, et les deux sites référenceraient cette même base de données. Utilisez-le comme si vous utilisiez une session.

D

+0

Merci. Ma confusion actuelle est comment écrire du code qui pourrait crypter l'ID utilisateur et envoyer à un autre site via la méthode POST? Des exemples de codes à apprendre? –

1

Je travaille beaucoup avec ce genre de choses. Ce que vous recherchez ressemble à une solution candidate à l'authentification unique ou à la sécurité fédérée.

Vous pourriez essayer de faire quelque chose de semblable à ce qui suit:

  1. Créer simple db ou toute autre sorte de stockage de table avec deux colonnes « nonce » et « nom d'utilisateur »

  2. Lorsque vous construisez la lien vers l'autre site crée un GUID ou un autre identifiant unique à utiliser comme un nonce unique, en le passant comme un querystring? id =. Insérez une entrée dans la table avec le nom d'utilisateur authentifié actuel et l'identifiant unique que vous avez créé. Lorsque vous atteignez la destination de votre lien, passez l'identifiant unique pour appeler un service web qui va faire correspondre l'identifiant avec le nom d'utilisateur dans la base de données que vous avez inséré avant de sauter sur le second site (sécuriser avec ssl).

  3. Si le nonce vérifie avec un nom d'utilisateur valide, vous êtes tous définis. Le webservice doit supprimer l'entrée utilisée et la table doit rester plus ou moins vide chaque fois que vous n'êtes pas au milieu d'une transaction.

Il est également bon d'inclure un datetime dans votre table nonce/nom d'utilisateur et d'expirer en 60 secondes ou moins pour minimiser les risques d'attaques de relecture. Nous avons également besoin de certificats clients pour les applications externes pour appeler le service Web afin de vérifier l'identité de l'appelant. Les applications internes ne nécessitent pas vraiment l'utilisation de certificats clients.

Une chose à ce sujet est qu'il adapte assez bien à autant de sites que vous souhaitez utiliser

pas de sécurité parfaite, mais nous avons jamais eu un compromis significatif avec un tel système.

Questions connexes