0

我一直在做一个项目,我有一个与 AD FS 集成的简单网页。身份验证和网站按预期工作。我正在使用 VS 2015。我的目标是限制用户可以在站点上访问的内容,即我所阅读和研究的“角色”。如果登录用户是管理员,则授予完全访问权限,但如果以普通用户身份登录,则限制可用页面。

这是场景,转到我的项目 URL,该 URL 被重定向到 AD FS 登录,成功登录后您就在我的网站上。没什么。

我已经在网上阅读了很多关于实现目标的不同方法的信息,因此我不确定哪个课程是最好的或最简单的配置。我在这里最好的选择是什么?请记住,我从未为此开发过 asp 或任何其他代码。任何帮助,将不胜感激。

4

2 回答 2

2

基于策略的授权可能是当前的最佳实践,但听起来基于角色的授权对您来说可能就足够了。

要执行基于角色的授权,您首先需要在 ADFS 中为发送角色声明类型的应用程序的依赖方信任设置声明规则“ http://schemas.microsoft.com/ws/2008/06/identity /声明/角色“。声明规则如下所示,

    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);

然后,当您的角色在这些声明中到达您的应用程序时,您将使用集成到 .NET Framework 4.5+ 中的 Windows Identity Foundation (WIF) 处理它们。我相信引用 System.Security.Claims 足以让 WIF 在您的项目中处理角色。然而,这种“处理”是由 WIF 为您完成的。

此时,您应该能够简单地装饰控制器和方法,如下所示,以执行基于角色的授权,这些角色等同于您在 Active Directory 中所属的组的名称。

[Authorize(Roles = "Administrators")]
public class AdminController : Controller
{
}
于 2017-04-04T13:30:55.547 回答
1

只是为了兴趣,还有其他方法可以做到这一点。

获得角色后,您可以使用 IsInRole(role)。

您也可以使用 web.config 例如

<location path="Page.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin, OtherAdmin" />
        <deny users="*" />
      </authorization>
    </system.web>
于 2017-04-04T19:25:20.593 回答