我使用 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 测试过,或者可能知道此类问题的解决方案?