J'ai lu plusieurs questions sur ce sujet, telles que ici , ici , ici et ici ; mais aucun n'a fourni une solution de travail dans mon cas.
Ce que je veux faire:
Implémentez l'authentification Windows pour une application Web qui n'est utilisée que par nos propres employés. De cette façon, ils ne devraient pas avoir besoin de se connecter à l'application, mais doivent déjà être authentifiés en se connectant à Windows.
De plus, je dois restreindre certaines zones de l'application, en fonction des groupes de sécurité Active Directory auxquels l'utilisateur peut être affecté.
Je veux donc pouvoir décorer les contrôleurs/actions avec
[Authorize(Roles="SomeRole")]
Ce que j'ai essayé:
J'ai
<authentication mode="Windows" />
dans mon web.config. Et j'ai ajouté plusieurs permutations d'un <roleManager>
Que l'on trouve dans certains des messages liés à ci-dessus. Actuellement, j'ai ce gestionnaire de rôles
<roleManager defaultProvider="WindowsProvider"
enabled="true"
cacheRolesInCookie="false">
<providers>
<add
name="WindowsProvider"
type="System.Web.Security.WindowsTokenRoleProvider" />
</providers>
</roleManager>
comme trouvé dans this post.
En l'état, si je décore un contrôleur avec [Authorize]
, Je peux y accéder correctement.
Cependant:
Je peux voir dans mes paramètres utilisateur sur le réseau, que je fais partie d'un groupe de sécurité AD appelé "IT". Mais si je décore le même contrôleur avec [Authorize(Roles="IT")]
j'obtiens l'écran vide qui est servi par le serveur de développement asp.net pour un 401 non autorisé. C'est inattendu. Je pense que je devrais être en mesure d'afficher la page car je suis connecté à Windows et que je fais partie du groupe "IT" .
Presque tout ce que je trouve sur ce sujet rend très simple l'accomplissement de ce que j'essaie de faire, mais il me manque clairement quelque chose ici.
Pour dev, j'utilise IISExpress avec les propriétés du serveur de développement du projet MVC configurées de sorte que l'authentification anonyme soit désactivée et l'authentification Windows activée. La configuration Web est déployée à l'aide de notre serveur de génération TFS pour tester et libérer des serveurs pour lesquels l'authentification est également configurée comme ci-dessus et fonctionne également dans ces emplacements.
Dans mon web.config j'ai.
<system.web>
....
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
<providers>
<clear />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
....
</system.web>
Je peux utiliser
[Authorize(Roles = @"DOMAIN\ADGroup")]
Public ActionResult Index()
{...}
ou
public ActionResult Index()
{
var User = System.Web.HttpContext.Current.User;
if (User.IsInRole("DOMAIN\\ADGroup"))
{
return RedirectToAction("IRSAdmin");
}
return View();
}
Après que je me souvienne de me déconnecter et de me reconnecter, l'autorisation qui m'a été accordée au groupe AD a été appliquée.