1

我有一个 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 方法后可以以某种方式使用吗?

4

0 回答 0