2013-06-23 47 views
1

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

回答

1

如果您使用.Net 4.5,那么您正在寻找的类是System.IdentityModel.Tokens.SecurityTokenHandler或它的派生类之一。它有一个返回SecurityTokenReadToken(string)方法。

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

如果知道标记的类型你会得到然后就可以直接使用适当的派生类(例如Saml2SecurityTokenHandler为SAML令牌)。

如果你可能会得到不同类型的令牌,那么你可以使用System.IdentityModel.Tokens.SecurityTokenHandlerCollection

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

这使你可以配置多个令牌处理程序(包括自定义的),然后让架构选择正确的处理程序您取决于令牌类型。

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

还有就是这对.NET 4的样品和SWT这里

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

你也许可以用类似的方式创建一个JWT一个,也许看.NET 4.5代码作为指导。

+0

一些我不得不花费时间的事情,我希望拯救其他人:Saml2SecurityTokenHandler只定义覆盖ReadToken(XmlReader reader)。你只能使用它,否则你会得到NotImplementedException – Maverik

1

CreateChannelWithIssuedToken需要一个GenericXmlSecurityToken。

你可以轻松地通过你的字符串安全标记(可能是一个XmlReader - 忘记了详细信息)新增一个。