1

J'ai une application de base ASP.net (NET Framework 4.7) qui utilise l'authentification par cookie comme ce qui est en this linkComment pouvez-vous utiliser l'authentification Windows core asp.net avec l'authentification par cookie?

app.UseCookieAuthentication(new CookieAuthenticationOptions() 
    { 
     AuthenticationScheme = "CookieAuthentication", 
     LoginPath = new PathString("/Login/"), 
     AccessDeniedPath = new PathString("/Login/"), 
     AutomaticAuthenticate = true, 
     AutomaticChallenge = true 
    }); 

Ce que je veux faire est de permettre l'authentification Windows avec l'authentification des cookies. Ainsi, si l'utilisateur est dans le domaine de l'entreprise, il n'a pas à entrer son nom d'utilisateur et son mot de passe. Mais s'il provient d'un domaine externe, il est redirigé vers la page de connexion et saisit son nom d'utilisateur et son mot de passe. .

+0

Comment authentifiez-vous actuellement les utilisateurs du domaine externe? – Win

+0

Je le fais par l'authentification des cookies. – Baso

Répondre

1

Si l'utilisateur est dans le domaine de l'entreprise, il/elle ne doit pas entrer le nom d'utilisateur et le mot de passe .

doesn't have to enter user name and password est la partie difficile. Pour autant que je sache, vous ne pouvez pas satisfaire à la fois l'authentification en même temps. Cependant, vous pouvez demander aux deux types d'utilisateurs d'entrer un nom d'utilisateur et un mot de passe, et de s'authentifier d'abord auprès de votre système. Si l'authentification échoue, vous pouvez vous authentifier avec un compte de domaine.

Si ce scénario est réalisable, vous pouvez utiliser Novell.Directory.Ldap dans ASP.NET Core. Here est l'exemple de code.

public bool ValidateUser(string domainName, string username, string password) 
{ 
    string userDn = $"{username}@{domainName}"; 
    try 
    { 
     using (var connection = new LdapConnection {SecureSocketLayer = false}) 
     { 
     connection.Connect(domainName, LdapConnection.DEFAULT_PORT); 
     connection.Bind(userDn, password); 

     if (connection.Bound) 
      return true; 
     } 
    } 
    catch (LdapException ex) 
    { 
     // Log exception 
    } 
    return false; 
} 

Note: A ce jour, System.DirectoryServices est pas disponible dans ASP.NET base encore.

+0

Je pensais que je peux mettre l'app.UseCookieAuthentication après app.UseMvc et activer Windows auth et anonyme anonyme de cette façon si Windows auth n'a pas fonctionné le pipeline continuera à atteindre le CookieAuthentication. dans le temps, permettez à mon contrôleur de connexion d'accéder [AllowAnonymous] et le reste du contrôleur à l'attribut [Authorize]. Est-ce possible d'une manière ou d'une autre? Merci, – Baso

+0

Vous pourriez être en mesure de ces deux middle-ware ensemble. Je n'ai jamais essayé, donc je ne pourrais pas dire à coup sûr. – Win