【发布时间】:2011-08-22 15:43:54
【问题描述】:
我创建了一个安全令牌服务 (STS)、一个引用 STS 的服务和一个示例桌面应用程序。
这在使用 Windows 身份验证和消息安全时按预期工作,从 STS 检索令牌并成功调用服务方法。该服务返回一个包含当前用户身份的字符串,该身份返回我的 AD 用户名。
但是,我需要针对数据库而不是 AD 进行身份验证。我尝试创建一个 CustomUserNameValidator(在 STS 中,这是正确的位置吗?)并在 web.config 中引用它。然后我提供如下所示的凭据。
SampleServiceReference.SampleServiceClient client = new SampleServiceReference.SampleServiceClient();
client.ClientCredentials.UserName.UserName
= "alex";
client.ClientCredentials.UserName.Password
= "pass";
我相信证书设置正确(全部使用'localhost'),但是在调用服务时收到以下异常:
System.ServiceModel.FaultException: ID3242: 无法对安全令牌进行身份验证或授权。
无论我尝试什么似乎都失败了。我所描述的甚至可能吗?服务客户端是否也将客户端凭据传递给 STS,还是我完全误解了这里发生的事情?
这个 stackoverflow 问题是类似的,但是我检查了观众 URL,它似乎没问题。 WIF STS ID3242
有人对我在使用 STS 时如何实现自定义身份验证有任何建议吗?
【问题讨论】:
-
现在我已经解决了我的问题,我想我会更新这个以防其他人遇到类似问题。 CustomUserNameValidator 不是我需要的,而是一个实现 UserNameSecurityTokenHandler 或 WindowsUserNameSecurityTokenHandler 的 CustomNamePasswordValidatorSecurityTokenHandler。看看这里的解决方案中的示例 4 claimsid.codeplex.com
标签: wcf wif sts-securitytokenservice