WIF和SOAP结果检查 - Windows Identity Foundation再次出现:(

时间:2011-08-25 09:57:23

标签: silverlight security claims-based-identity wif

我使用IdentityServer从Silverlight 4平台(WS-Trust)进行用户身份验证 当用户发送正确的凭据时,一切都很好,我创建了令牌cookie,其中包含针对Silverlight应用程序的RP的额外声明 当密码不正确时,Silverlight应用程序会收到HTTP状态代码500(用于发送SOAP规范中定义的SOAP异常的标准值)。

Silverlight http堆栈忽略带有此类状态代码的结果,因此我试图强制STS在将此状态代码发送到客户端之前修改它。我试图在端点上使用IDispatchMessageInspector接口安装/注册我的对象实例来动态修改状态代码(类似SilverlightFaultBehavior对与Silverlight合作的WCF服务进行修改)但看起来MS Guys又做了一些奇怪的事情(或者我不知道什么。

当结果正常时(密码正常)我可以修改HTTP状态代码并使用IDispatchMessageInspector接口在对象上调用我的方法,但是当密码不正确时 我的incpection对象上的方法不会被调用根本无法修改结果(HTTP状态代码),结果再次为500。

IdentityServer只是使用正确的配置实例化WSTrustServiceHost主机对象,因此它看起来WSTrust的整个处理仅由WIF完成。

我不知道令牌已经过时会发生什么。 WIF是否也会因HTTP状态500而抛出异常?是否可以在Silverlight平台上读取WIF生成的异常?

Silverlight 5应支持WS-Trust,但如果STS服务器发送HTTP状态500,它是否会再次忽略异常信息?有没有人用Silverlight 5测试它或者可能知道这个问题的解决方案?

1 个答案:

答案 0 :(得分:0)

如果使用客户端网络堆栈,则可以在Silverlight中接收任何HTTP状态代码。默认情况下,Silverlight会通过浏览器指示所有HTTP请求,这会设置一些限制。

How to: Specify Browser or Client HTTP Handling (MSDN)