使用 AD 身份验证(不是 ADFS)创建 MVC 应用程序
Posted
技术标签:
【中文标题】使用 AD 身份验证(不是 ADFS)创建 MVC 应用程序【英文标题】:Create MVC application using AD authentication (Not ADFS) 【发布时间】:2017-08-06 13:47:22 【问题描述】:我正在 Visual Studio 2017 中创建一个新的 MVC Intranet 应用程序。
我想使用 Active Directory 来验证(和授权)各种控制器,但不是 Active Directory 联合服务器(因为我们不使用它)。
以下是我采取的步骤:
-
新建项目 -> ASP.NET Web 应用程序 (.NET Framework)
选择 MVC
点击更改身份验证
选择“工作或学校帐户”
选择“本地”
现在,本地授权机构需要元数据文档 URL。我知道这是我们没有的 ADFS 的外部 url。
如何设置我的应用程序以使用我们的 AD?我还需要使用 AD 中的组(例如,允许 WebAdmin 组中的用户访问 Admin 控制器等)。
提前致谢
【问题讨论】:
【参考方案1】:看来我使用了错误的设置。如果要使用标准 AD,请选择 Windows 身份验证。
“工作或学校帐户”似乎仅适用于 ADFS。
一旦您的应用程序被初始化,请转到 web.config。
你会看到这样的东西
<system.web>
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" />
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
<httpModules>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
</httpModules>
</system.web>
我们需要将 AD 组功能添加到我们的 web.config。完成此操作后,您的 system.web 部分应如下所示:
<system.web>
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" />
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
<!--NEW-->
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
<providers>
<clear />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
<httpModules>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
</httpModules>
</system.web>
您现在可以使用以下内容装饰您的控制器类/操作方法:
[Authorize(Roles = @"YourDomain\Some AD Group Name")]
或常用代码:
User.IsInRole(@"YourDomain\Some AD Group Name"))
【讨论】:
以上是关于使用 AD 身份验证(不是 ADFS)创建 MVC 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
针对 ADAM 和 AD FS 的 ASP.NET MVC 3 SSO
MVC 5、WIF (System.IdentityModel) 和 ADFS 未实际进行身份验证,联合注销时出错
使用 Azure Active Directory 或 ADFS 或 AD 的 SSO