2011-06-27 2 views
4

J'ai une collection d'environ 400 utilisateurs qui utilisent le courrier électronique ici dans notre société et nous commençons un intranet pour eux, j'utilise .Net Framework (C#) pour la couche application. Nous aimerions authentifier ces utilisateurs en utilisant les mêmes identifiants qu'ils ont pour leur email, notre fournisseur de messagerie n'a pas de tel service donc j'ai eu l'idée de les authentifier en utilisant le serveur SMTP (qui nécessite une authentification).Authentification des utilisateurs pour un intranet utilisant smtp

J'ai cherché une méthode Authenticate() sur la classe SmtpClient mais en vain, il n'y a aucun moyen de Authentifier seulement. Quelqu'un at-il déjà dû résoudre ce genre de problème? Je pense que je vais devoir ouvrir une socket sur le serveur SMTP et envoyer les commandes moi-même, mais peut-être y a-t-il un moyen plus simple d'y parvenir.

Répondre

4

Puisque vous avez un serveur SMTP, je suppose que vous avez également un serveur POP3. Je pense que je suis également sûr en supposant que les informations d'identification pour POP3 et SMTP sont les mêmes.

Si mes hypothèses sont correctes (ce qui est très probable), vous pouvez les authentifier par POP3 au lieu de SMTP.

Ainsi, vous pouvez utiliser la classe Pop3Client, qui fournit plus d'une méthode d'authentification:

De cette façon, votre code:

  1. Connect
  2. Authentifier (vérifier des exceptions)
  3. Disconnect

Et vous êtes tous ensemble!

+0

Cela a fait l'affaire, merci. –

0

En utilisant SmtpClient sur votre serveur SMTP, vous sollicitez un service. Votre application doit uniquement spécifier si vous souhaitez utiliser l'authentification Windows (qui sera Kerberos ou NTLM en fonction de la configuration de votre intranet) ou la spécification des informations d'identification, et si vous souhaitez utiliser SSL. En ce qui concerne l'authentification d'application, vous pouvez faire référence à WindowsIdentity à System.Security.Principal.WindowsIdentity.GetCurrent(). Plus précisément, vous pouvez utiliser la propriété IsAuthenticated.

Avant d'essayer un appel au serveur SMTP, si vous souhaitez utiliser l'authentification Windows, essayez quelque chose comme ceci:

SmtpClient client = new SmtpClient(server, port); 
client.Credentials = CredentialCache.DefaultNetworkCredentials; 

Ensuite, laissez le serveur SMTP autorise si l'utilisateur peut effectivement effectuer l'action tentée. Si vous voulez dire, désactivez un bouton d'action parce que le serveur SMTP rejette l'action de l'utilisateur et que vous essayez d'être proactif et empêchez l'utilisateur de faire quelque chose qu'il ne peut pas faire, alors ce rejet doit être déterministe avant de toucher le serveur SMTP (c'est-à-dire que vous ne vous fiez pas simplement au serveur SMTP pour vous le dire, vous aurez besoin d'une sorte de couche de sécurité d'entreprise en place).

Questions connexes