WCF服务和添加自定义Identity声明
我创建了一些声明并附加了它们的线程,然后我想访问操作契约GetCurrentUser(); 用户电子邮件声明始终返回null。
问题出在哪儿?
使用本地IIS和绑定类型的WCF是wsHttpBinding。
自定义validation器;
public class UserValidator : UserNamePasswordValidator { public override void Validate(string userName, string password) { if (userName == null || password == null) { throw new ArgumentNullException(); } if (userName == password) { var claims = new List { new Claim(ClaimTypes.Name, "AbbA"), new Claim(ClaimTypes.Email, "foo@bar.com"), new Claim(ClaimTypes.Role,"Customer") }; var id = new ClaimsIdentity(claims, "Sample"); var principal = new ClaimsPrincipal(id); Thread.CurrentPrincipal = principal; } else { throw new FaultException("Wrong Password..."); } } }
和我的行动合同;
public string GetCurrentUser() { var principal = Thread.CurrentPrincipal; if (principal.Identity.IsAuthenticated) { var cp = ClaimsPrincipal.Current; var email = cp.FindFirst(ClaimTypes.Email).Value; <<<< It's return always null :( return string.Format("Your Email is:{0}", email); } else { return "NONE"; } }
找到了解决方案,所以;
我在Wif和会话认证模块(SAM)中使用了WCF Forms身份validation
你可以找到信息和样本;
其他选项启用WCF身份validation服务;
1) https://msdn.microsoft.com/library/bb398990
2) https://msdn.microsoft.com/tr-tr/library/bb398862%28v=vs.100%29.aspx
3) https://msdn.microsoft.com/tr-tr/library/bb398778%28v=vs.100%29.aspx