gpt4 book ai didi

wif - 无法序列化 Saml2AssertionKeyIdentifierClause

转载 作者:行者123 更新时间:2023-12-04 14:31:16 25 4
gpt4 key购买 nike

我正在尝试将声明感知 WCF 服务和客户端放在一起。

我正在使用 thinktecture Identity Server ,并且我通过查看“将 token 与 WCF/SOAP 一起使用”示例组装了一个控制台客户端:

var token = GetSecurityToken();

var binding =
new WS2007FederationHttpBinding(
WSFederationHttpSecurityMode.TransportWithMessageCredential);
binding.Security.Message.EstablishSecurityContext = false;

var factory =
new ChannelFactory<IService1>(
binding,
new EndpointAddress("https://localhost:44301/Service1.svc"));
factory.Credentials.SupportInteractive = false;

factory.ConfigureChannelFactory();

var service = factory.CreateChannelWithIssuedToken(token);
var result = service.GetData(42);

我有(看起来像)来自 STS 的有效 token 。

但是在调用GetData的时候会抛出异常,如下:

There was an error serializing the security key identifier. Please see the inner exception for more details.

内部异常如下:

The token Serializer cannot serialize 'System.IdentityModel.Tokens.Saml2AssertionKeyIdentifierClause'. If this is a custom type you must supply a custom serializer.

我能找到的唯一提到这个问题的是this one on the MSDN forums ,但这只是稍微相关。

查看调试器,似乎端点行为包括(最终)一个 Saml2SecurityTokenHandler,其他链接暗示这就是所有需要的。

我错过了什么?

最佳答案

我刚刚从 startersts 升级到 identityserver v2 并从 saml1.1 切换到 saml2 时遇到了完全相同的问题。

我不生成代理,所以解决我的问题的方法是在我的 channel 工厂上简单地将 Credentials.UseIdentityConfiguration 设置为 true。如果您生成代理,默认情况下可能不会这样做?或者,如果您使用自定义 ChannelFactory,您可能只是忘记像我一样设置它。

var channelFactory = new ChannelFactory<T>(endpointName);
channelFactory.Credentials.UseIdentityConfiguration = true;

var channel = channelFactory.CreateChannelWithIssuedToken(token)

...现在使用没有序列化异常的 channel

希望它有所帮助,无需像其他讨论线程所建议的那样在客户端添加 system.identityModel 部分。

关于wif - 无法序列化 Saml2AssertionKeyIdentifierClause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11312314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com