J'essaie d'utiliser l'authentification Windows dans mon application ASP.NET. Chaque fois que j'essaie de voir l'application, elle m'envoie sur une page de connexion. Comment puis-je le faire fonctionner sans avoir à me connecter manuellement via le navigateur?
<system.web>
<authentication mode="Windows"></authentication>
<anonymousIdentification enabled="false"/>
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
<customErrors mode="Off"></customErrors>
<identity impersonate="true"></identity>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime />
</system.web>
Most likely causes:
No authentication protocol (including anonymous) is selected in IIS.
Only integrated authentication is enabled, and a client browser was used that does not support integrated authentication.
Integrated authentication is enabled and the request was sent through a proxy that changed the authentication headers before they reach the Web server.
The Web server is not configured for anonymous access and a required authorization header was not received.
The "configuration/system.webServer/authorization" configuration section may be explicitly denying the user access.
<authentication>
<anonymousAuthentication enabled="false" />
<basicAuthentication enabled="false" />
<clientCertificateMappingAuthentication enabled="false" />
<digestAuthentication enabled="false" />
<iisClientCertificateMappingAuthentication enabled="false">
</iisClientCertificateMappingAuthentication>
<windowsAuthentication enabled="true">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
J'ai pu le faire fonctionner en supprimant le fournisseur de négociation.
<windowsAuthentication enabled="true">
<providers>
<add value="NTLM" />
</providers>
</windowsAuthentication>
Authentification Windows avec IISExpress
Mettez à jour votre web.config
Assurez-vous que votre fichier web.config active à la fois l'authentification Windows et refuse également l'authentification anonyme. HttpContext.Current.User.Identity.Name
sera vide si l'application passe à l'authentification anonyme. Votre configuration devrait ressembler à ceci:
<authentication mode="Windows" />
<authorization>
<deny users="?"/>
</authorization>
Erreur 401.2 non autorisée Parfois, vous pouvez obtenir l'erreur 401.2 Unauthorized: Logon failed due to server configuration error
. Si vous le faites, vérifiez que vous êtes autorisé à afficher ce répertoire ou cette page en fonction des informations d'identification que vous avez fournies. Assurez-vous également que les méthodes d'authentification sont activées sur le serveur Web.
Mise à jour de applicationhost.config
Vous pouvez également constater que vous devez mettre à jour le fichier IISExpress applicationhost.config (ne vous inquiétez pas - je ne le savais pas non plus). Il s'agit essentiellement de la version de fichier de l'outil de configuration IIS, où vous pouvez configurer le serveur Web lui-même. Trouver le applicationhost.config
le fichier peut être délicat. Cela pourrait être dans:
%userprofile%\documents\iisexpress\config\applicationhost.config
ou
%userprofile%\my documents\iisexpress\config\applicationhost.config
Une fois que vous l'avez trouvé, mettez à jour les lignes suivantes (en accordant une attention particulière à enabled=true
):
<windowsAuthentication enabled="true">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
Nous utilisons l'authentification Windows pour presque toutes nos applications intranet, y compris SharePoint. Les employés doivent se connecter si leur navigateur n'envoie pas automatiquement leurs informations d'identification Windows au site.
Sur IE, c'est une question de configuration du navigateur. Je pense qu'il existe également des moyens de configurer Chrome et Firefox pour envoyer automatiquement la connexion Windows. Je pense que Chrome suivra les paramètres Internet de Windows (sur le client) comme IE. Essayez de définir les options d'authentification utilisateur sur "Connexion automatique avec nom d'utilisateur et mot de passe actuels".
Voir la capture d'écran ci-dessous pour une illustration de l'endroit où cela se trouve.
Notez également que cela implique que le navigateur de l'utilisateur envoie un jeton Windows à l'application. L'application doit comprendre et faire confiance à la source de ce jeton, et cela fonctionnerait avec le support d'un "domaine" dans lequel résident à la fois l'utilisateur et l'application. Je pense que cela fonctionnera sur une seule machine (pendant le débogage), mais si vous voulez que cela fonctionne sur plusieurs ordinateurs sur un réseau, vous devez envisager de créer un domaine. Un moyen typique de créer un domaine est Active Directory.
Faites le moi savoir.
Lors du débogage de mon application Web dans VS 2017, j'ai constaté que je devais mettre à jour [chemin de la solution] \. Vs\config\applicationhost.config. J'ai remplacé la section d'authentification par:
<authentication>
<anonymousAuthentication enabled="false" userName="" />
<basicAuthentication enabled="false" />
<clientCertificateMappingAuthentication enabled="false" />
<digestAuthentication enabled="false" />
<iisClientCertificateMappingAuthentication enabled="false">
</iisClientCertificateMappingAuthentication>
<windowsAuthentication enabled="true">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>