我正在尝试了解使用WCF,Claims和ADFS 3.0开发框架所需的内容.内部用户将针对Active Directory进行身份验证,外部用户针对SQL Server表进行身份验证,并且授权存储在实现组和权限的数据库表中.我正在使用WCF而不是Web Api或OWIN创建API.
我对使用Identity Server或第三方产品不感兴趣,我只想知道如何创建自定义安全令牌服务以从我的成员资格表中读取并通过我的组和权限表设置声明.
我找不到任何关于此的信息. Visual Studio 2015中没有Identity和Access控件,似乎没有使用WCF,仅使用Web Api,OWIN和MVC?
解决方法:
这篇文章似乎有一个良好的开端,http://southworks.com/blog/2007/03/11/the-holly-grail-of-enterprise-soa-security/
这是我在我的MVC应用程序中使用的代码(不是WCF,但许多需要完成的事情是相同的)
var claims = new List<Claim>()
{
new Claim(ClaimTypes.Name, result.UserName),
new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", result.Email),
new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider",
result.Email),
new Claim("UserId", result.Id.ToString(CultureInfo.InvariantCulture)),
new Claim("UserName", result.UserName),
new Claim("FirstName", result.FirstName)
};
//load claims from database here
claims.AddRange(result.Roles.Select(role => new Claim(ClaimTypes.Role, role.Name)));
var id = new ClaimsIdentity(claims, "Forms");
var cp = new ClaimsPrincipal(id);
var token = new SessionSecurityToken(cp)
{
IsPersistent = false
};
Session["authToken"] = token;
var sam = FederatedAuthentication.SessionAuthenticationModule;
sam.WriteSessionTokenToCookie(token);