web-dev-qa-db-fra.com

Asp.net Core Web API - Authentification de l'utilisateur actuel et Windows

Nous avons la pile technique suivante dans notre application AngularJS2 API Asp.Net Core SQL Server

Nous devons maintenant stocker le nom d'utilisateur pour la table Utilisateur connecté dans lors de la création/modification pour un élément donné, c'est-à-dire dans l'API principale.

Nous avons essayé avec 

  • WindowsIdentity.GetCurrent (). Name, cela donne IIS APPPOOL\Asp.netCore
  • HttpContext.User.Identity donne la valeur null

J'obtiens le nom d'utilisateur avec WindowsIdentity lorsque je travaille avec Visual Studio, mais avec IIS, cela donne la valeur Asp.Netcore, c'est-à-dire le nom du pool.

L'authentification Windows est activée et l'authentification anonyme est désactivée.

Utilisation de IIS version 6.1

Est-ce que je manque quelque chose?

5
Manish Joisar

J'ai regardé autour de moi et il a été suggéré de créer l'application Asp.Net Core WebApi en utilisant l'authentification Windows.

Ainsi, lorsque j'ai créé Asp.Net Core WebApi à l'aide de l'authentification Windows, cela a fonctionné et j'ai obtenu des valeurs dans les objets User.Identity.

J'ai donc créé 2 applications, une avec authentification Windows et une sans, puis comparé tous les fichiers et trouvé les modifications dans les fichiers suivants.

  • forwardWidnowsAuthToken - C'est vrai, cela a déjà été essayé mais le problème n'a pas été résolu et Daboul a suggéré la même chose
  • launchSettings.json, définissez "windowsAuthentication": true & "anonymousAuthentication": false

Après cela, j'ai été capable de valeurs dans l'objet User.Identity.


Le fichier launchSettings.json:

{
  "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": false
    }
}

Le Web.Config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore forwardWindowsAuthToken="true" processPath="C:\Program Files\dotnet\dotnet.exe" arguments=".\YourWebsite.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
        <security>
            <authentication>
                <windowsAuthentication enabled="true" />
                <anonymousAuthentication enabled="false" />
            </authentication>
        </security>
  </system.webServer>
</configuration>
4
Manish Joisar

Avez-vous le paramètre forwardWindowsAuthToken défini sur true dans le fichier web.config?

<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="true"/>
3
Daboul

Sous Windows Server 2012 R2/IIS 8.0, même après la définition de forwardWindowsAuthToken = true dans web.config, User.Identity.Name ne renvoyait pas le nom d'utilisateur mais IIS APPPOOL afin de résoudre le problème que j'ai modifié ci-dessous.

  1. Accéder à l'application Web dans IIS
  2. Ouvrir l'éditeur de configuration
  3. Remplacez Section par system.webServer/serverRuntime
  4. Changez authentifiéUserOverride en UseAuthenticatedUser (pour moi, il a été défini sur UseWorkerProcessUser)

Pour plus de détails, voir le lien ci-dessous: https://blogs.iis.net/jaroslad/what-does-the-authenticateduseroverrideuser-do

0
Iftikhar Ali