WCF - 从服务A到B的转发摘要式身份验证

时间:2015-10-02 17:30:34

标签: wcf authorization digest digest-authentication

我有两个带有摘要式身份验证的WCF服务(A和B),服务A从服务B调用一个操作。

当我呼叫服务A时,客户端提供凭据,我可以毫无问题地调用我的方法。相同的凭据访问服务B.

但是当在服务A内部时,在我需要呼叫服务B的那一刻,有没有办法将从A提供的凭证转发给B?

我清楚了吗?

1 个答案:

答案 0 :(得分:1)

您无法转发凭据,但可能有一种方法可以实现您的目标,具体取决于您是否在域中。摘要式身份验证协议在RFC 2069RFC 2617中定义。 Wikipedia有一个更容易理解的概述。原始基本协议是客户端尝试连接到未经身份验证的服务器,然后服务器以401未经授权的响应进行响应,并在WWW-Authenticate头中提供身份验证质询。在此标头中,有一个nonce值和领域,客户端需要使用它来生成Authorization标头。 Authorization标头的值计算如下:

HA1=MD5(username:realm:password)
HA2=MD5(method:digestURI)
response=MD5(HA1:nonce:HA2)

对于给定的用户名和密码,授权值对于每个请求URI,领域和nonce组合都是唯一的。客户端无法控制nonce值。为了能够使用完全相同的授权响应值,服务B需要提供与提供给原始客户端的服务A完全相同的nonce值,并且您需要在http上使用摘要算法的修改实现存在于服务A和服务B上的客户端,允许摘要式身份验证使用与服务A上存在的相同的URI成功。换句话说,提供给服务A的身份验证是针对http://serviceA/endpointA的,并且运行在{{{}上的服务器3}}需要接受使用第一个URI执行的身份验证。摘要式身份验证的另一个关键点是客户端从不向服务器提供用户名和密码,它只向服务器证明它知道它们。服务器必须已经知道它们以验证客户端是否知道它们 如果您在域环境中运行,则可以使用模拟。这是一种机制,通过该机制,域控制器被配置为信任服务以承担任何域用户的身份,该域用户进行身份验证并代表用户向服务提供有效的客户端身份验证令牌。然后,这可以用于对其他服务进行身份验证。有关此内容的更多信息,请访问http://serviceB/endpointB