我一直致力于一个项目,我有一个与AD FS集成的简单网页。身份验证和网站正在按预期工作。我正在使用VS 2015.我的目标是限制用户可以访问的网站,#34;角色"从我所阅读和研究的内容。如果登录用户是管理员,则授予完全访问权限,但如果以普通用户身份登录,则限制可用的页面。
这是一个场景,转到我的项目URL,重定向到AD FS登录,成功登录后,你在我的网站上。不是很多。
我已经在线阅读了很多关于实现目标的不同方法的内容,我不确定哪种课程最好或最简单。我最好的选择是什么?请记住,我从未开发过asp或任何其他代码。任何帮助将不胜感激。
答案 0 :(得分:2)
基于policy的授权可能是当前的最佳做法,但听起来基于role的授权可能就足够了。
要执行基于角色的授权,您首先需要在ADFS中为您的应用程序的依赖方信任设置一个声明规则,该规则发送角色声明类型“http://schemas.microsoft.com/ws/2008/06/identity/claims/role”。索赔规则看起来像这样,
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> add(store = "Active Directory", types = ("http://schemas.microsoft.com/ws/2008/06/identity/claims/role"), query = ";tokenGroups;{0}", param = c.Value);
然后,当您的角色在这些声明中到达您的应用程序时,您将使用Windows Identity Foundation(WIF)处理它们,它集成到.NET Framework 4.5+中。我相信引用System.Security.Claims足以在项目中获取WIF以处理角色。然而,这种“处理”是由WIF为您完成的。
此时,您应该能够简单地装饰控制器和方法,如下所示,以执行基于角色的授权,这些角色等同于您在Active Directory中成员的组的名称。
[Authorize(Roles = "Administrators")]
public class AdminController : Controller
{
}
答案 1 :(得分:1)
只是为了兴趣,还有其他方法可以做到这一点。
获得角色后,您可以使用IsInRole(角色)。
您也可以使用web.config,例如
<location path="Page.aspx">
<system.web>
<authorization>
<allow roles="Admin, OtherAdmin" />
<deny users="*" />
</authorization>
</system.web>