在Windows Phone应用程序中使用adfs保护的wcf服务

时间:2012-03-02 12:17:05

标签: wcf adfs

我有一个部署在azure中的ADFS保护的wcf服务。我能够在我的控制台应用程序中使用该服务。但是当我不确定如何在windows phone 7应用程序中使用该服务时。 在我的控制台应用程序中,我正在检索安全令牌并使用CreateChannelWithIssuedToken方法将该令牌传递给channelfactory对象。但是在Windows Phone应用程序中没有这样的方法将令牌传递给wcf服务。任何人都可以在这个问题指导我吗? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

CreateChannelWithIssuedToken是由.NET 3.5 / 4.0中的WIF程序集添加的扩展方法(我相信.NET 4.5现在已经内置到System.ServiceModel命名空间中的大部分内容)。由于您不会在手机上使用此功能,因此您无法使用常规WCF方法来创建和使用频道。

在处理WinForms / WPF应用程序时仍然如此,但在这种情况下,您可以选择引入WIF程序集。尽管如此,它并不是必需的,并且使用ADFS安全服务对于常规WCF类是完全可行的。

Windows Phone似乎支持这些内容,但使用some caveats。看看扩展方法的实现,看起来他们似乎并没有做任何真正的事情:

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

验证方法只执行一些诊断并抛出异常(例如,如果未设置端点)。 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开始,尽管我恐怕没有确切的步骤这样做。也许其他人做了或者这可能会让你朝着正确的方向前进。

This文章介绍了如何从Silverlight访问受WIF保护的WCF服务,我认为这与您在手机上的操作方式几乎相同。

答案 1 :(得分:0)

有一个培训套件(http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=8396)示例ACSAndWindowsPhone7可能对此有帮助(我没有看过它详情)。我知道Wade Wegner在ACS和WP7上有很多博客文章,但不确定他是否专门针对OAuth类型机制处理了ADFS。