ServiceAuthorizationManager
. 自定义身份验证管理器已设置为处理Windows和窗体身份验证。
但是,如果我连接的客户端设置为
UserName
auth,我似乎在任何地方都找不到用户名。
客户端代码如下所示:
this.ClientCredentials.UserName.UserName = "user";
this.ClientCredentials.UserName.Password = "pass";
this.Open();
this.MyMethod(); // my actual contract method
this.Close();
public sealed class AppAuthorizationManager : ServiceAuthorizationManager
{
public override bool CheckAccess(OperationContext operationContext, ref Message message)
{
// would like to check user/pwd here...
}
}
这可能吗?
-
这个
Thread.CurrentPrincipal
没有设定,,
-
operationContext.ServiceSecurityContext.PrimaryIdentity
-
operationContext.ServiceSecurityContext.AuthorizationContext.ClaimSets
是空的。
用户/pwd是否应该在任何地方可用?还是我必须添加自定义
UsernamePasswordValidator
也
更新:
所以我添加了一个自定义项
UserNamePasswordValidator
和
IAuthorizationPolicy
.
我更新的WCF配置如下所示:
<behavior name="Server2ServerBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceAuthorization principalPermissionMode="Custom" serviceAuthorizationManagerType="MyApp.AuthManager, MyApp">
<authorizationPolicies>
<add policyType="MyApp.TokenAuthorizationPolicy, MyApp" />
</authorizationPolicies>
</serviceAuthorization>
<serviceCredentials>
<userNameAuthentication customUserNamePasswordValidatorType="MyApp.PFUserNameValidator, MyApp" />
</serviceCredentials>
</behavior>
如果我在所有3个类中设置了断点,WCF将抛出异常:
LogonUser failed for the 'username' user. Ensure that the user has a valid Windows account.
at System.IdentityModel.Selectors.WindowsUserNameSecurityTokenAuthenticator.ValidateUserNamePasswordCore(String userName, String password)