использование службы wcf, защищенной adfs в приложении Windows Phone - PullRequest
0 голосов
/ 02 марта 2012

У меня есть служба wcf, защищенная ADFS, развернутая в Azure.Я могу использовать этот сервис в моем консольном приложении.Но когда я не уверен, как использовать эту услугу в приложении Windows Phone 7.В моем консольном приложении я извлекаю токен безопасности и передаю этот токен объекту Channelfactory, используя метод CreateChannelWithIssuedToken.Но в приложении Windows Phone нет такого способа передачи токена службе wcf.Кто-нибудь может направить меня в этом вопросе?Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 10 апреля 2012

CreateChannelWithIssuedToken был методом расширения, добавленным сборкой WIF в .NET 3.5 / 4.0 (я полагаю, что .NET 4.5 имеет большую часть этого материала, встроенного в пространство имен System.ServiceModel).Так как у вас не будет этого на телефоне, вы застряли с обычными методами WCF для создания и использования каналов.

Это все еще имеет место при работе с приложениями WinForms / WPF, хотя в этом случае выесть возможность внести сборку WIF.Тем не менее, это не требуется, и использование службы, защищенной ADFS, вполне выполнимо с обычными классами WCF.

Windows Phone, кажется, поддерживает это, хотя с некоторые предостережения .Глядя на реализацию метода расширения, не кажется, что они действительно делают что-то действительно интересное:

public static T CreateChannelWithIssuedToken<T>(this ChannelFactory<T> factory, SecurityToken issuedToken)
{
    return ChannelFactoryOperations.CreateChannelWithParameters<T>(factory, new FederatedClientCredentialsParameters
    {
        IssuedSecurityToken = issuedToken
    });
}

public static T CreateChannelWithParameters<T>(ChannelFactory<T> factory, FederatedClientCredentialsParameters parameters)
{
    ChannelFactoryOperations.VerifyChannelFactory<T>(factory);
    T t = factory.CreateChannel();
    ((IChannel)t).GetProperty<ChannelParameterCollection>().Add(parameters);
    return t;
}

Метод verify просто выполняет некоторую диагностику и выдает исключения (например, если конечная точка нене установлено).ChannelParameterCollection определяется в System.ServiceModel.Channels и поддерживается в Silverlight / WP7.И FederatedClientCredentialsParameters тоже ничего особенного:

public class FederatedClientCredentialsParameters
{
    public SecurityToken ActAs ( get; set; )
    public SecurityToken OnBehalfOf ( get; set; )
    public SecurityToken IssuedSecurityToken ( get; set; )
}

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

В этой статье показано, как получить доступ к WIF-службе WCF, защищенной WIF, из Silverlight, которая, как мне кажется, практически идентичнасделал бы это по телефону.

0 голосов
/ 03 марта 2012

Существует обучающий комплект (http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=8396) пример ACSAndWindowsPhone7, который может помочь здесь (я не рассматривал его подробно). Я знаю, что Уэйд Вегнер имеет несколько постов в блогах по ACS и WP7, но не уверен, чтоон специально занимался ADFS против механизмов типа OAuth.

...