Вот что я сделал до сих пор:
1) Создано приложение проверяющей стороны ASP.NET MVC и защищено с помощью ADFS v2.0. Это работает.
2) Создан сервис WCF с использованием шаблона сервиса Claims-Aware для веб-сайта ASP.NET. Я включил совместимость ASP.NET для службы, потому что в противном случае служба не будет активирована. Я перенес интерфейс для указанной службы в сборку SharedContracts.
3) Настройте службу WCF в качестве проверяющей стороны, используя ссылку «Добавить STS», также указывающую на мой сервер ADFS.
4) Сконфигурировал сервер ADFS для включения службы WCF в качестве проверяющей стороны и выдачи ей заявок LDAP.
Сейчас я хочу поговорить с сервисом, используя ActAs. Другими словами, когда кто-то нажимает HomeController.Index () с сайта ASP.NET MVC с маркером, полным утверждений (помните, что сайт MVC является проверяющей стороной), я хочу, чтобы этот метод программно создал клиентский прокси и вызвал единый Сервисный метод, который у меня есть в сервисе WCF (метод под названием «HelloClaim», который почти идентичен стандартному методу, который поставляется с шаблоном сервиса, поддерживающим утверждения).
Вот код, который я получил до сих пор:
[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();
}
Когда я пытаюсь вызвать метод, я получаю следующее сообщение об ошибке:
На этой фабрике разрешена ручная адресация, поэтому все отправленные сообщения должны быть предварительно адресованы.
Я почти уверен, что просто недостаточно для того, чтобы настроить привязку и конечную точку программно. Если кто-то из вас делал это раньше или вы знаете, как это сделать, я бы хотел, чтобы это работало.
Суть в том, что я просто использую сценарий базового делегирования идентичности - единственное отличие - я не использую сгенерированные клиентские прокси.