所以我创建了一个自定义令牌,主要来自MSDN示例(http://msdn.microsoft.com/en-us/library/ms731872.aspx),但我似乎无法让它工作。我总是得到这个错误“必须签署'基本'附件模式的安全令牌。”在日志中。我已经多次访问代码库了 A)显然它编译并运行 B)我看不出问题出在哪里。 日志消息并非完全有用。我认为这可能与证书有关,但我已经击败了它并创建了几个不同的证书(一个使用服务器名称设置为localhost等...)。
Google搜索此内容几乎没有任何结果。
任何人都知道这是什么,或者只是告诉我在哪里可以看?就像我说的 - 我已经多次通过这个代码,我看到授权政策被创建了所有那些好东西,我可以看到证书设置,我只是不知道在哪里看,我真的不有任何代码要发布,你必须实现这么多的类。如果有人知道我可以看到什么,我会很乐意发布特定的类/代码片段。
由于
答案 0 :(得分:1)
见这里:http://social.msdn.microsoft.com/forums/en-us/wcf/thread/F822CCB9-A8A1-474F-87AF-E5CD9EC34494
...没有正确复制安全令牌的“id”属性。 这导致为服务器上的安全令牌创建一个新ID,该ID不再与安全签名数据匹配,因此该消息将被拒绝。
在实现自定义WSSecurityTokenSerializer
以序列化安全令牌时,您可能不会复制令牌的Id
属性。 ID需要从客户端到服务器匹配。
一个常见的错误(我确定我已经做过的错误)就是在构造函数中只有id = Guid.NewGuid().ToString()
。这对于在clinet上的初始创建来说很好,但是当它在服务器上反序列化时,它需要使用来自客户端的相同ID,而不是再次使用新的guid。