将SecurityToken字符串传递给CreateChannelWithIssuedToken

时间:2013-06-23 14:20:34

标签: .net wcf wif

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

2 个答案:

答案 0 :(得分:1)

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

http://msdn.microsoft.com/en-us/library/system.identitymodel.tokens.securitytokenhandler.aspx

如果你知道你将获得的令牌类型,那么你可以直接使用适当的派生类(例如SAML2SecurityTokenHandler用于SAML令牌)。

如果您可能获得不同类型的令牌,则可以使用System.IdentityModel.Tokens.SecurityTokenHandlerCollection class

http://msdn.microsoft.com/en-us/library/system.identitymodel.tokens.securitytokenhandlercollection.aspx

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

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

这里有.Net 4和SWT的样本

http://zamd.net/2010/07/31/using-wif-for-securing-rest-service/

你可能会以类似的方式创建一个JWT,可能会以.Net 4.5代码为指导。

答案 1 :(得分:1)

CreateChannelWithIssuedToken需要GenericXmlSecurityToken。

您可以轻松地新建一个传递您的字符串安全令牌(可能作为XmlReader - 忘记了详细信息)。