我正在尝试构建一个使用 ADFS 和声明的系统。目前,这只是一个“玩具”实现。
我构建了一个非常简单的 MVC Web 应用程序,使用 Visual Studio 中的“身份和访问...”向导对其进行设置,以与 ADFS 2.0 服务器通信,并将其部署到 IIS 服务器。一切正常,我可以检查并列出收到的索赔。
下一步是构建一个基于 Web API 的 REST 服务(代表 MVC 应用程序将依赖的后端服务),所以我想将凭据传递给该后端服务器,以便它可以进行适当的授权决定。
所以第一步是我创建委托令牌(然后,我希望根据HttpClient
类来确定如何处理它以进行其余调用)。我有这个:
//We need to take the bootstrap token and create an appropriate ActAs token
var rst = new RequestSecurityToken
{
AppliesTo = new EndpointReference("https://other-iis.example.com/Rest"),
RequestType = RequestTypes.Issue,
KeyType = KeyTypes.Symmetric,
ActAs = new SecurityTokenElement(((BootstrapContext)((ClaimsIdentity)User.Identity).BootstrapContext).SecurityToken)
};
var sts = new SecurityTokenService(); //This line isn't valid
var resp = sts.Issue(System.Threading.Thread.CurrentPrincipal as ClaimsPrincipal, rst);
但是,问题是SecurityTokenService
抽象的。System.IdentityModel
我在nor中找不到从此类派生的任何类型System.IdentityModel.Services
,并且上面不包含对 ADFS 服务器的任何引用,我显然需要在某些时候提供。
当然,我也可能完全走错了路,或者只是碰到了一个小绊脚石,而没有看到远处有一个更大的绊脚石,所以对此的任何建议也将不胜感激。
例如,我已经看过Identity Delegation Scenario,但是它使用CreateChannelActingAs
,我认为当我与休息服务(或者会吗?)交谈时它不会起作用,而且似乎也不起作用适用于 .NET 4.5。