如何将Facebook SecurityToken委派给WCF服务

时间:2013-01-23 13:18:32

标签: wcf .net-4.5 wif smartclient identity-delegation

我有以下组件: WPF应用程序, Identity Server, WCF Web服务,

WPF应用程序使用WebBrowser控件使用WS-Federation使用Thintecture Identity Server进行身份验证。 Identity Server已启用Home Realm Discovery并允许使用Facebook,Live ID和Google进行身份验证。身份验证后,我收到ReqquestSecurityTokenResponse消息,我将其转换为SecurityToken。

获得此SecurityToken后,我想调用WebService。我想我需要创建由Thintecture Identity Server再次发布的ActAsToken,但我无法配置它。

var serviceAddress = "http://localhost:7397/Service1.svc";
var token3 = token2.ToSecurityToken();
var binding = new WS2007FederationHttpBinding(WSFederationHttpSecurityMode.Message);
binding.Security.Message.IssuedKeyType = System.IdentityModel.Tokens.SecurityKeyType.SymmetricKey;
binding.Security.Message.IssuerAddress = new EndpointAddress("https://dev3.example.com/Identity/issue/wsfed");
binding.Security.Message.IssuerBinding = new WS2007HttpBinding();
var factory = new ChannelFactory<IService1Channel>(binding,
    new EndpointAddress(
        new Uri(serviceAddress),
        new DnsEndpointIdentity("dev3.example.com")));
factory.Credentials.SupportInteractive = false;
var proxy = factory.CreateChannelWithActAsToken(token3);
{

    try
    {
        var output = proxy.GetData(1);
        MessageBox.Show(output);
        proxy.Dispose();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

但我得到例外。

使用身份和访问权限配置WebService ... VS扩展名。

这种情况可能吗?

1 个答案:

答案 0 :(得分:0)

您不需要ActAs - 您可以使用CreateChannelWithIssuedToken方法来创建WCF代理。

您还需要在WCF服务和客户端(而不是SymmetricKey)上配置承载密钥。