WCF自定义身份验证 - 令牌

时间:2012-04-19 08:07:14

标签: c# wcf security wcf-security token

我正在尝试在WCF中找到以下方案的标准解决方案:

我有2项服务。 Service1想要向service2发送请求。我希望service1将发送凭据,以便在service2响应其请求之前进行身份验证。

我不想使用ssl或在所有网络服务之间复制证书。

这是我的解决方案:

我将创建一个“安全服务”。

Service1将针对安全服务进行身份验证。

成功验证后,此安全服务将为service1提供由安全服务签名的自定义令牌。

Service1会将此令牌附加到每个请求中。

Service2将验证此令牌,如果成功,将处理该请求。

答案是,如果C#(WCF)中有一种方法可以实现这种机制。

由于

2 个答案:

答案 0 :(得分:1)

Microsoft为此类索赔基础授权提供WIF(Windows Identity Foundation)。 看看这篇文章:

http://msdn.microsoft.com/en-us/magazine/ee335707.aspx

问候。

答案 1 :(得分:0)

如果您正在讨论WCF服务,请查看哪种安全性WCF supports。它是None,Transport,Message,TransportWithMessageCredential,TransportCredentialOnly,Both。你说你对运输安全不感兴趣。因此,列表中仍有Message安全性。

WCF supports the following credential types when you are using message level security:

Windows. The client uses a Windows token representing the logged in user’s Windows identity. The service uses the credentials of the process identity or an SSL certificate. You will use this in the sample application that demonstrates the first scenario (internal self-hosted service).
UserName. The client passes a user name and password to the service. Typically, the user will enter the user name and password in a login dialog box. The service can validate the user name and password using a Windows account or the ASP.NET membership provider. You will use this in the sample application that demonstrates the third scenario (public Web-hosted service).
Certificate. The client uses an X.509 certificate and the service uses either that certificate or an SSL certificate.
IssueToken. The client and service use the Secure Token Service, which issues tokens the client and service trust. Windows CardSpace uses the Secure Token Service.
None. The service does not validate the client.

接下来你没有说,但确定身份验证类型很重要,它是你如何托管服务,特别是服务2. Windows身份验证对内部自我有用托管服务,但我不确定它是你的情况。因此,如果您的服务将在IIS托管,则用户名适合您。并且digest authentication的支持就是您所需要的。阅读Digest Authentication on a WCF REST Service。如果它不是IIS托管服务或您需要替代解决方案,它可能是Security Token Service使用。但最新的更好的解决方案是基于声明的身份验证,您可以在其他答案中找到链接。