WCF,Claims,ADFS 3.0

我正在尝试了解使用WCF,Claims和ADFS 3.0开发框架所需的内容。 内部用户将针对Active Directory进行身份validation,外部用户将针对SQL Server表进行身份validation,并且授权将存储在实现组和权限的数据库表中。 我正在使用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() { 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); 

当我正在开发像您这样的声明感知WCF应用程序时,我浏览了这个链接 ,让我了解它是如何工作的。 唯一与您的需求不太相似的是它不是ADFS 3.0。

而且我认为您不能同时将ADFS用于内部用户,而将SQL用于外部“类似会员” 。 我所知道的是,您可以信任其他公司的ADFS作为其他身份提供商。

如果您指的是如何构建声明感知WCF,这里有一些可用的链接。

  • 如何设置和调用ADFS 2.0保护的WCF服务
  • 声明在.Net 4.5中使用WIF感知WCF
  • 如何为WCF服务集成ADFS身份validation

尽管如此, 链接仍处于活动状态,支持.Net 4.5和4.6以及WIF已经是框架的一部分,这与之前需要安装WIF不同。

以下是我的WCF服务配置的片段:

绑定

             

身份配置

                    

我的WCF客户端的片段配置

           http://docs.oasis-open.org/ws-sx/ws-trust/200512/SymmetricKey 256 http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p http://www.w3.org/2001/04/xmlenc#aes256-cbc http://www.w3.org/2000/09/xmldsig#hmac-sha1 http://www.w3.org/2001/10/xml-exc-c14n# http://www.w3.org/2001/04/xmlenc#aes256-cbc                    

附加信息 :

  • 我使用带有UserName身份validation的ADFS 2.0,并在我们的活动目录中添加了凭据
  • 添加依赖方不是在这里讨论,而是需要。
  • 还需要令牌加密/解密证书(AFDS的一方)
  • 在ADFS中添加声明

我希望这些信息对您有所帮助!