Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 将SecurityToken字符串传递给CreateChannelWithIssuedToken_.net_Wcf_Wif - Fatal编程技术网

.net 将SecurityToken字符串传递给CreateChannelWithIssuedToken

.net 将SecurityToken字符串传递给CreateChannelWithIssuedToken,.net,wcf,wif,.net,Wcf,Wif,我有一个安全令牌字符串,它是SecurityTokenServiceClient.RequestSecurityToken调用的结果。现在我想将此安全令牌传递给client.ChannelFactory.CreateChannelWithIssuedToken(…)。将安全令牌字符串转换为SecurityToken派生类的最简单方法是什么。我期望类似于StringSecurityToken的内容,但没有看到任何内容。如果您使用的是.Net 4.5,那么您要查找的类是System.Identity

我有一个安全令牌字符串,它是
SecurityTokenServiceClient.RequestSecurityToken
调用的结果。现在我想将此安全令牌传递给
client.ChannelFactory.CreateChannelWithIssuedToken(…)
。将安全令牌字符串转换为SecurityToken派生类的最简单方法是什么。我期望类似于
StringSecurityToken
的内容,但没有看到任何内容。

如果您使用的是.Net 4.5,那么您要查找的类是
System.IdentityModel.Tokens.SecurityTokenHandler
或其派生类之一。它有一个
ReadToken(string)
方法,该方法返回
SecurityToken

如果您知道将获得的令牌类型,则可以直接使用相应的派生类(例如,SAML令牌的Saml2SecurityTokenHandler)

如果您可能获得不同类型的令牌,那么可以使用
System.IdentityModel.tokens.SecurityTokenHandlerCollection

这让您可以配置多个令牌处理程序(包括自定义的),然后让框架根据令牌类型为您选择正确的处理程序

在.NET4中,情况更加复杂,因为ReadToken(string)方法不存在。您只能处理XML标记。如果您的令牌是SAML,则可以,但如果是SWT或JWT,则不太容易。在这种情况下,您必须定义一个自定义的基于XML的
SecurityToken
类型,该类型中嵌入了原始标记。然后您必须编写一个自定义的
SecurityTokenHandler

这里有一个用于.NET4和SWT的示例


您可能也可以用类似的方式创建JWT,可以参考.Net 4.5代码。

CreateChannelWithIssuedToken需要一个GenericXmlSecurityToken


您可以通过传入字符串安全令牌(可能是作为XmlReader—忘记了细节)轻松地创建一个新的安全令牌。

我必须花时间做的事情,我希望能节省其他人:Saml2SecurityTokenHandler只定义ReadToken的覆盖(XmlReader)。您只能使用它,否则将得到NotImplementedException