2013-06-23 135 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 - 忘記了詳細信息)新增一個。