2013-07-01 85 views
1

我配置了带有联合身份验证(谷歌,脸书,live id)的Thintecture Identity Server和WCF SOAP服务。使用IdentityServer将SAML令牌转换为JWT令牌

现在我需要Windows Phone应用程序的WCF Rest Endpoint(webHttpBinding)。我不想在授权标头中传递WSTrust SAML令牌。有可能将SamlToken转换为JWT令牌以及如何:)?

下面是我试过的代码,但不起作用。

var factory = new WSTrustChannelFactory(
    new WindowsWSTrustBinding(SecurityMode.Transport), 
    new EndpointAddress("https://identityserver.local/issue/???")) 
{ 
    TrustVersion = TrustVersion.WSTrust13 
}; 

var rst = new RequestSecurityToken 
{ 
    RequestType = RequestTypes.Issue, 
    KeyType = KeyTypes.Bearer, 
    TokenType = TokenTypes.JsonWebToken, 
    AppliesTo = new EndpointReference("http://my.realm/") 
}; 

var securityToken = xmlToken.ToSecurityToken(); 
var response = factory.CreateChannelWithIssuedToken(securityToken).Issue(rst); 

感谢您的帮助。

回答

0

您可以配置IdentityServer以返回JWT。转到全局配置并将默认标记类型更改为JWT(与默认http标记类型的值相同)。这应该做到这一点。

更新:为什么您使用WSTrust - IdSrv不支持使用例如google over WS-Trust。

+0

谢谢,回答。我需要两个令牌...一个用于WCF桌面客户端(WPF,Windows Store)的SAML,另一个用于REST客户端(Windows Phone,Android,iOS)或者可以在两种场景中使用JWT? 明天我会尝试ACS Wrap Service ...这将把SAML转换成JWT/SWT。我现在不会这么做吗? 并回答你的问题我使用WS联合(与家庭领域发现)谷歌,现场ID和Facebook。我拦截Identity Sarver和Facebook之间的Web请求协商,并获得SAML令牌。当我获得SAML令牌时,我尝试使用WS-Trust来获取JsonWebToken。 – zielu1

+0

是的 - 这不起作用 - 你可以手动转换它(但需要一个签名密钥)或使用ACS来转换它。没有一个是完美的解决方案;)当然,您可以扩展IdSrv为您提供这样的服务。 – leastprivilege

+0

扩展IdSrv是个好主意......这看起来非常自然和简单的解决方案。我会试试这种方式。 – zielu1