.NET 4.5如何创建此自定义声明类型?

时间:2014-02-13 13:35:42

标签: c# authentication forms-authentication .net-4.5 claims-based-identity

背景

目前,我正在开展的一个项目是以不太好的方式进行安全保护。我试图将其升级到基于声明的安全性,因为我认为它与我们存储的信息类型匹配得更好。但是,我是新手,所以尽快试图吸收很多。

我们需要存储:

  • 标准信息(姓名,电子邮件等)
    • 这已经有了很好的索赔类型。
  • 用户有权访问的客户端站点列表
    • 可能是一种名为" ClientSite"带有ID) - 应该是简单的ish
  • 每个给定客户端站点的用户拥有的角色列表。
    • 嗯...

最后一个让我有点沮丧。我想我需要创建一个具有客户端站点ID和角色值的自定义声明类型。

问题

  • 如何创建可存储ID(代表网站的某个部分)和角色本身的自定义声明类型?
  • 一旦我完成了这项工作,我将如何恰当地创建该声明?我是否需要一种自定义方式来处理Rights.PossessProperty,或者我是否过度思考它?

提前感谢您指出我正确的方向。正如我所说,我正在吸收Pluralsight课程等等,但我也喜欢发货。 :)

2 个答案:

答案 0 :(得分:1)

您正在查看错误的声明类 - 不推荐使用System.IdentityModel.Claim中的声明类。

新的是System.Security.Claims。

本书为您介绍了这一理念: http://msdn.microsoft.com/en-us/library/ff423674.aspx

答案 1 :(得分:1)

假设您将从数据库中获得“用户到部分”。 Identity.HasClaim将允许您验证用户的部分。就自定义声明而言,它只是一个字符串,需要与下面示例中的字符串类似。

 public class UsersSections
 {
    public int SectionId { get; set; }
    public int UserId { get; set; }
 }

 var userSectionsList = new List<UsersSections>
        {
            new UsersSections
            {
                SectionId = 1000,
                UserId = 200
            },
            new UsersSections
            {
                SectionId = 2000,
                UserId = 200
            }
        };

        var identity = new ClaimsIdentity();
        identity.AddClaim(new Claim(ClaimTypes.NameIdentifier,"I am a user with a userid of 200"));
        foreach (var usersSections in userSectionsList)
        {
            identity.AddClaim(new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/section","1000"));
        }

        if (identity.HasClaim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/section", "1000"))
        {

        }