我有一个 WCF REST 服务,它成功调用自定义方法来验证客户端使用基本身份验证发送的凭据。像这样的配置:
<userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="RESTfulSecuritySH.CustomUserNameValidator,
RESTfulSecuritySH" />
现在,在调用该方法后,我的用户得到了验证,并且以下内容填充了所有用户的信息 *:
Thread.CurrentPrincipal.Identity
然而,一旦这个方法完成并且控制传递给最初请求的 RESTful 方法(即 GetData 或其他方法),Thread.CurrentPrincipal.Identity
则不会填充 in 中的值。因为它没有被填充,所以我不能随意使用[PrincipalPermission]
方法上的任何属性。
但是填充了我OperationContext.Current.ServiceSecurityContext.PrimaryIdentity
的用户的凭据信息(名称,IsAuthenticated),但这似乎没有映射到Thread.CurrentPrincipal.Identity
属性[PrincipalPermission]
。我知道我可以在 in 代码中四处ServiceSecurityContext
寻找来确定用户是否被授权,但如果可能的话,我想在方法上使用一个属性。
因此,如果我应用任何[PrincipalPermission]
属性,它总是会失败并显示消息:“请求主体权限失败。” 这是有道理的,因为Thread.CurrentPrincipal.Identity
不再有人居住。我的猜测是在对我的自定义Validate
方法的调用完成后,线程丢失了它的上下文。
无论如何,我的总体问题是[PrincipalPermission]
在调用 customUserNamePasswordValidatorType 方法后可以以某种方式使用吗?