web-dev-qa-db-fra.com

Comment obtenir l'utilisateur Windows actuel avec ASP.NET Core RC2 MVC6 et IIS7

J'ai un site intranet intégré dans MVC6 utilisant ASP.NET Core RC2. Je souhaite obtenir le nom d'utilisateur Windows de la personne accédant au site intranet.

Ainsi, si Jim se rend sur le site intranet, je souhaite que le site reçoive "Domain\Jim". Si Anne se rend sur le site intranet, je souhaite que le site reçoive "Domain\Anne".

Seule l'authentification Windows est activée sur mon serveur IIS. L'authentification anonyme est désactivée.

Mon site est configuré pour utiliser l'authentification Windows et pour désactiver l'authentification anonyme.

<system.web>
    <authentication mode="Windows" />
    <authorization>
        <deny users="?"/>
    </authorization>
</system.web>

Grâce à Debug, je peux utiliser System.Security.Principal.WindowsIdentity.GetCurrent().Name, mais cela renvoie évidemment "IIS APPPOOL\SiteName" sur le serveur IIS.

J'ai trouvé de nombreux exemples d'anciennes versions d'ASP.NET en utilisant HttpContext, et j'ai essayé de l'injecter dans mon contrôleur avec les éléments suivants, mais le nom d'utilisateur finit par null.

//Startup.cs
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

//HomeController.cs
public HomeController(IHttpContextAccessor _accessor)
{
    string userName = _accessor.HttpContext.User.Identity.Name;
}

Quelle est la bonne façon de transmettre le nom d'utilisateur Windows à un site intranet dans ASP.NET Core RC2 MVC6?

8
Kyle

Pour toute autre personne utilisant l'authentification Windows sur une application intranet, qui souhaite simplement pouvoir récupérer des informations sur un utilisateur, il est plus simple de penser. 

Dans votre contrôleur, cette ligne va saisir le nom d'utilisateur de l'utilisateur actuel sous la forme DOMAIN\nom d'utilisateur.

var userId = this.User.Identity.Name;

J'ai passé un peu de temps à parcourir les autres réponses avant de réaliser que la plupart d'entre elles supposaient que je mettais en œuvre des comptes individuels pour être authentifiés auprès d'AD, et non de l'authentification Windows prête à l'emploi. 

5
Jonathan Leitner

ServiceSecurityContext.Current? .PrimaryIdentity

0

Peut aider quelqu'un qui cherche encore. Selon la documentation MS https://docs.Microsoft.com/en-us/aspnet/core/fundamentals/http-context?view=aspnetcore-2.2 , ajoutez HttpContextAccessor à la méthode ConfigureServices (startup.cs) Transmettez ce httpcontextaccessor dans le contrôleur et accédez à l'utilisateur connecté.

J'ai suivi cette procédure et j'ai pu obtenir l'utilisateur authentifié Windows connecté même après le déploiement du site Web principal sur IIS.

Voici les extraits de code

Dans Startup.cs (sous la méthode ConfigureServices), ajoutez la ligne

services.AddHttpContextAccessor();

Ensuite, dans votre fichier de contrôleur, ajoutez le morceau suivant de lignes de code nécessaires. Le code ci-dessous est un exemple.

public YourController : Controller
{
  private readonly IHttpContextAccessor _httpContextAccessor;
  private readonly string _user;
  public YourController(IHttpContextAccessor httpContextAccessor)
  {
    _httpContextAccessor = httpContextAccessor;
    _user = _httpContextAccessor.HttpContext.User.Identity.Name;
  }
}
0
Jabez

Utiliser var userId = this.User.Identity.Name; a fonctionné pour moi. Mon application est exécutée sur un intranet et tout ce que je cherchais à faire est d'obtenir l'ID de connexion de l'utilisateur sous Windows. Je n'avais pas besoin de stocker les informations de l'utilisateur, celles-ci étant déjà stockées dans Active Directory.

0
Delroy