以下是我迄今为止所做的:
2) 使用声明感知服务模板为ASP.NET网站。我转过身来ASP.NET上的服务的兼容性,因为该服务在其他情况下不会激活。我已将上述服务的接口移动到“SharedContracts”程序集。
3) 使用“addsts”引用将WCF服务设置为依赖方,同时指向我的ADFS服务器。
4) 将ADFS服务器配置为包含WCF服务作为依赖方,并向其发出LDAP声明。
我现在要做的是使用ActAs与服务对话。换句话说,当有人HomeController.索引()从ASP.NETMVC站点有一个充满声明的令牌(记住MVC站点是一个依赖方),我希望这个方法以编程方式创建一个客户机代理,并调用我在WCF服务上拥有的单一服务方法(一个名为“HelloClaim”的方法,它几乎与stock相同)声明感知服务模板附带的方法)。
以下是我目前掌握的代码:
[ValidateInput(false)]
public ActionResult Index()
{
SecurityToken callerToken = null;
IClaimsPrincipal claimsPrincipal = Thread.CurrentPrincipal as IClaimsPrincipal;
if (claimsPrincipal != null)
{
foreach (IClaimsIdentity claimsIdentity in claimsPrincipal.Identities)
{
if (claimsIdentity.BootstrapToken is SamlSecurityToken)
{
callerToken = claimsIdentity.BootstrapToken;
break;
}
}
string baseAddress = "http://khoffman2/SecureServices/Service.svc";
ChannelFactory<IHelloClaim> factory = new ChannelFactory<IHelloClaim>(new WebHttpBinding(), new EndpointAddress(baseAddress));
factory.ConfigureChannelFactory<IHelloClaim>();
IHelloClaim hello = factory.CreateChannelActingAs<IHelloClaim>(callerToken);
string result = hello.HelloClaim();
ViewData["Message"] = "Welcome to ASP.NET MVC!";
}
return View();
}
当我尝试调用该方法时,会收到以下错误消息:
此工厂启用了手动寻址,因此发送的所有消息都必须预先寻址。
我敢肯定,我只是在以编程方式配置绑定和端点方面做得不够。如果你们中的任何一个以前做过这个或者知道怎么做,我很乐意让这个工作。
归根结底,我只是利用了基本的身份委托场景——唯一的区别是我没有使用生成的客户端代理。