Программное создание клиентского прокси для службы WCF с защитой WIF - PullRequest
0 голосов
/ 18 августа 2010

Вот что я сделал до сих пор:

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();
}

Когда я пытаюсь вызвать метод, я получаю следующее сообщение об ошибке:

На этой фабрике разрешена ручная адресация, поэтому все отправленные сообщения должны быть предварительно адресованы.

Я почти уверен, что просто недостаточно для того, чтобы настроить привязку и конечную точку программно. Если кто-то из вас делал это раньше или вы знаете, как это сделать, я бы хотел, чтобы это работало.

Суть в том, что я просто использую сценарий базового делегирования идентичности - единственное отличие - я не использую сгенерированные клиентские прокси.

1 Ответ

0 голосов
/ 18 августа 2010

Взгляните на это руководство на TechNet, где есть пошаговое руководство по настройке сценария, который вы описали:

http://technet.microsoft.com/en-us/library/adfs2-identity-delegation-step-by-step-guide(WS.10).aspx

В их примере я считаю,используют стандартные WebForms, но в случае MVC вы можете поместить инициализацию ChannelFactory в Global.asax в Application_Start.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...