【问题标题】:.NET Core 3.0 WCF passing Security Token.NET Core 3.0 WCF 传递安全令牌
【发布时间】:2021-01-22 01:23:15
【问题描述】:

我可以生成SecurityToken,但创建频道时无法传递。

在 .NET Framework 4.8 中我可以做到,

var proxy = factory.CreateChannelWithIssuedToken(securityToken);

但我无法在 .Net Core 中找到替代方案,我查看了反编译的源代码,

我通过创建一个 poco“FederatedClientCredentialsParameters”来尝试这个,但这也不起作用。

var proxy = factory.CreateChannel();
            IClientChannel clientChannel = (IClientChannel) proxy;
            clientChannel.GetProperty<ChannelParameterCollection>().Add(new FederatedClientCredentialsParameters()
            {
                IssuedSecurityToken = token
            });

我尝试过设置 factory.endpointbehavior,但找不到可以插入安全令牌的途径。大多数答案似乎与用户名和密码的客户端凭据有关,但与基于 WS Trust 的安全令牌无关。

【问题讨论】:

    标签: security wcf token channel


    【解决方案1】:

    我最终创建了我的自定义凭据、自定义凭据令牌管理器和自定义令牌提供程序。

    然后在创建代理之前,我配置了我的自定义凭据代码。

            factory.Endpoint.EndpointBehaviors.Clear();
            factory.Endpoint.EndpointBehaviors.Add(new CustomCredentials()
    

    这允许我的自定义凭据代码在运行时返回令牌,它终于奏效了!

    有关详细实现,请参阅 Joe 在以下线程底部的帖子, How can I pass a username/password in the header to a SOAP WCF Service

    【讨论】:

      【解决方案2】:

      目前core对wcf的支持非常有限。为了在 core 中使用 WCF,core 提供了以下包来支持 WCF:

      这些包提供的功能也很有限。许多 WCF 函数不能在核心中使用。您可以在 .net 框架中传递安全令牌,但核心不支持您这样做。

      我的建议是使用 .net 框架,您也可以考虑使用自定义绑定和自定义凭据。有关 core 对 WCF 的支持的更多信息,请参考此链接:

      https://github.com/dotnet/wcf/tree/master/src

      如果问题仍然存在,请随时告诉我。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-28
        • 2020-10-28
        • 2013-07-02
        • 2013-01-30
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多