基于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
{
}
不知道基于政策的授权,我需要开始详细审查这一点。关于“装饰控制器和方法”的另一个问题,这些应放置在我的ASP应用程序中? Startup.cs还是我网站的每个页面?每个页面都有一个特定的组,管理员或用户。道歉,但对此很新颖。 – kow1969
如果您使用的是ASP.NET MVC或Web API,那么您的AdminController类或该类中的方法就是这样。如果你使用的是Web Forms,那么@nzpcmad建议可能是最好的选择。对于IsInRole,你可以这样做,如果(Thread.CurrentPrincipal.IsInRole(“Administrators”))// Do Something – Gilligan