【问题标题】:SecurityContext.Current not working, nullexceptionSecurityContext.Current 不工作,空异常
【发布时间】:2012-07-26 00:08:56
【问题描述】:
我正在使用 WCF 服务,并将用户和角色保存在数据库中。在我的服务中,我试图确定谁在调用该服务。所以我输入我的 WCF 服务
字符串用户 = ServiceSecurityContext.Current.PrimaryIdentity.Name;
但我得到我的 nullexception 对象没有发送到引用,我整天都在用谷歌搜索它,但似乎找不到什么问题。有什么建议吗?
【问题讨论】:
标签:
wcf
security
authentication
【解决方案1】:
“出了什么问题”是 ServiceSecurityContext.Current 返回 null 而不是 ServiceSecurityContext 的实例。
发生这种情况的一种情况是,如果将绑定配置为使用消息安全性并将MessageCredentialType 设置为None。
但是,我不知道有任何综合文档列出 ServiceSecurityContext.Current 可以是 null 的每个场景:由于安全上下文是在通道堆栈中建立的,因此它取决于特定的绑定配置和安全提供程序正在使用。我想,它也可能受到摆弄消息属性的自定义行为的影响。
话虽如此,除非您将自定义代码插入到通道堆栈中,否则可以安全地假设这只会发生在绑定不需要任何客户端身份验证的情况下。您应该首先检查您正在使用绑定配置,该配置将验证客户端并提供您期望的用户名 IIdentity。