我使用IDispatchMessageInspector为WCF服务实现了自定义日志记录逻辑。
我正在使用AfterReceiveRequest和BeforeSendReply在数据库中记录整个SOAP请求/响应。
我正在使用基于声明的身份验证,无需任何问题。
但是,当我尝试访问Thread.CurrentPrincipal.Identity.Name或ClaimsPrincipal.Current.Identity.Name时,我总是得到空字符串(未设置标识,因此名称为空)。
有没有办法从IDispatchMessageInspector以任何方式访问身份?
谢谢!
答案 0 :(得分:2)
如果基于声明的身份验证有效,则可以将用户添加到声明集中。 您可以以静态方式访问ClaimSet:
ReadOnlyCollection<ClaimSet> claimSets = ServiceSecurityContext.Current.AuthorizationContext;`
另一种可能性是向您的服务添加ServiceAuthorizationManager
,在您的配置中注册它并从此类访问您的ClaimSet。
希望这有帮助