使用 Windows Identity Foundation (WIF) 保护 WCF 服务
1. 声明查询
IClaimsIdentity 上的声明集合被明确设计为对 LINQ 友好,这使我们可以使用查询语法或扩展方法来查询声明,具有很强的表达能力。例如,使用扩展方法查询电子邮件声明:
var email = id.Claims.First(c => c.ClaimType == ClaimTypes.Email);
还可以要求声明在集合中仅出现一次:
var dob = id.Claims.Single(c => c.ClaimType == ClaimTypes.DateOfBirth);
此外,还可以围绕 LINQ 查询构建便捷包装器。Thinktecture.IdentityModel 库提供了一些针对 IClaimsPrincipal 和 IClaimsIdentity 的扩展方法,如 FindClaims、GetClaimValue、DemandClaim 等。
2. 访问声明
对于底层代码(如转换或授权代码,有时也包括外观代码),可以直接对 IClaimsPrincipal 进行操作。而业务代码应使用类似 User 类的抽象,通过其属性查询声明集合,这样可以避免技术细节干扰业务逻辑,并且可以独立于业务代码更改底层实现。同时,为了便于单元测试,可以在代码中注入主体。
超级会员免费看
订阅专栏 解锁全文
48

被折叠的 条评论
为什么被折叠?



