【问题标题】:Authentication when using Security Token Service使用安全令牌服务时的身份验证
【发布时间】: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


【解决方案1】:

这里有一个您需要的简单示例:http://claimsid.codeplex.com

查看样本 8 或 4。

不过,有一点澄清。用户名/密码身份验证在 STS 上,而不是在您的服务上。您的服务将使用从 STS 获得的安全令牌进行身份验证。

【讨论】:

  • 非常感谢!示例 4 正是我昨天花了一整天实现的,所以这证实了我所做的事情是正确的。希望我早点找到它!
【解决方案2】:

看看StarterSTS

提供了完整的源代码,它针对基于标准 aspnetdb 角色的 SQL DB 进行身份验证。有许多视频可以帮助您启动和运行它。

然后这个项目变成了 ASP MVC - IdentityServer。这在帮助文件等方面还不够成熟。

【讨论】:

  • 感谢您的链接,我已经遇到了 StarterSTS。这是如何将 STS 与成员资格和配置文件提供程序一起使用的一个很好的示例,但是我不认为它包含使用 STS 和用户名/密码凭据保护 WCF 服务的示例——这似乎是我的问题。
  • 刚刚看了一下 IdentityServer,这看起来很有希望,可能会解决我的问题。 identityserver.codeplex.com/SourceControl/changeset/view/…
  • 是的 - 该领域 90 % 的文档围绕被动配置文件而不是主动配置文件。我想您是从 VS 2010 中的 WCF STS 模板开始的? (WIF SDK 附带的那些)。
猜你喜欢
  • 2013-02-12
  • 2015-03-15
  • 2017-04-27
  • 2012-07-06
  • 2010-09-27
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多