【问题标题】:.NET 4.5 How to create this Custom Claim Type?.NET 4.5 如何创建此自定义声明类型?
【发布时间】:2014-02-13 13:35:41
【问题描述】:
背景
目前,我正在进行的一个项目正在以一种不太好的方式进行安全保护。我正在尝试将其升级为基于声明的安全性,因为我认为它与我们存储的信息类型更匹配。不过,我是新手,所以想尽快吸收很多东西。
我们需要存储:
- 标准信息(姓名、电子邮件等)
- 用户有权访问的客户端站点列表
- 大概是一个名为“ClientSite”的声明类型,带有一个 ID)——应该是简单的
- 每个给定客户端站点的用户角色列表。
最后一个让我有点绊倒。我想我需要创建一个具有客户端站点 ID 和角色值的自定义声明类型。
问题
- 如何创建自定义声明类型来存储 ID(代表网站的一部分)和角色本身?
- 完成此操作后,我将如何适当地创建该声明?我需要自定义方式来处理
Rights.PossessProperty,还是我想多了?
提前感谢您为我指明了正确的方向。正如我所说,我正在学习 Pluralsight 课程等,但我也想发布一些东西。 :)
【问题讨论】:
标签:
c#
authentication
forms-authentication
.net-4.5
claims-based-identity
【解决方案2】:
假设您的“用户到部分”来自数据库。
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"))
{
}