2017-04-04 66 views
0

我一直在做一个项目,我有AD FS集成了一个简单的网页实现ADFS。身份验证和网站按预期工作。我正在使用VS 2015.我的目标是限制用户可以在网站上访问的内容,以及我已阅读和研究过的“角色”。如果登录用户是管理员,则授予完全访问权限,但如果以常规用户身份登录,则会限制可用的页面。用asp.net角色

下面是这种情况,去哪个会被重定向到AD我的项目URL上你在我的网站FS上签字,成功注册后。没什么。

我有不同的方式来实现我的目标,我不确定是最好或最简单的配置这当然读了很多网上。我最好的选择是什么?请记住,我从来没有在asp或其他代码中为此发展过。任何帮助,将不胜感激。

回答

1

基于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身份验证基础(WIF),其集成到.NET框架4.5+处理它们。我相信引用System.Security.Claims足以让WIF处理角色的项目。这个“处理”是由WIF为您完成的。

此时,你应该能够简单的装饰控制器和方法,如下面的执行基于角色的授权,与这些角色等同于你的Active Directory中的成员组的名称。

[Authorize(Roles = "Administrators")] 
public class AdminController : Controller 
{ 
} 
+0

不知道基于政策的授权,我需要开始详细审查这一点。关于“装饰控制器和方法”的另一个问题,这些应放置在我的ASP应用程序中? Startup.cs还是我网站的每个页面?每个页面都有一个特定的组,管理员或用户。道歉,但对此很新颖。 – kow1969

+0

如果您使用的是ASP.NET MVC或Web API,那么您的AdminController类或该类中的方法就是这样。如果你使用的是Web Forms,那么@nzpcmad建议可能是最好的选择。对于IsInRole,你可以这样做,如果(Thread.CurrentPrincipal.IsInRole(“Administrators”))// Do Something – Gilligan

1

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

一旦你的角色,你可以使用IsInRole(角色)。

您还可以使用在web.config例如

<location path="Page.aspx"> 
    <system.web> 
     <authorization> 
     <allow roles="Admin, OtherAdmin" /> 
     <deny users="*" /> 
     </authorization> 
    </system.web>