我使用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测试它或者可能知道这个问题的解决方案?
答案 0 :(得分:0)
如果使用客户端网络堆栈,则可以在Silverlight中接收任何HTTP状态代码。默认情况下,Silverlight会通过浏览器指示所有HTTP请求,这会设置一些限制。