是否可以将单个WCF服务端点设置为针对多个身份验证存储进行身份验证?即如果提供的UserName和Password检查自定义数据库,否则请尝试Windows验证。
背景:
我有WCF服务A,它向WCF服务B注入了客户端代理。服务B可能依赖于服务C等。
用户对服务A的请求来自并使用自定义UserNamePasswordValidator
进行身份验证,ClaimSet
使用IAuthorizationPolicy.
身份验证成功,并且调用A上的服务操作。此操作通过注入的代理调用服务B.
然后,服务B请求通过Auth / Authz堆栈但由于未设置凭据而失败。由于服务A称为服务B,我相信它所以希望授权成功,而不必传递原始呼叫者的用户名和密码。
但是,用户可以使用用户名和密码直接调用服务B,因此它必须支持两种身份验证方法。
答案 0 :(得分:1)
我设法从微软的联系人处获得此回复:
您不能在单个端点上使用不同的安全机制,您必须为每个需要的安全协议公开单独的端点,因为每个安全协议都需要单独的绑定配置,因为身份验证机制是端点定义的一部分。
单个端点上的多种安全模式应该与.NET 4.0一起发布。
答案 1 :(得分:0)
我非常确定在一个端点上支持多种凭据类型确实存在。它可能已经添加了日内瓦框架,所以我会调查一下。 This article提到有一个STS验证多种凭据类型,所以我认为有一种方法可以在没有STS的情况下使用普通服务。
当我需要多个“密钥”进行身份验证时,我改为使用了自定义ClientCredential类。
对不起,简短的回答,但我需要离开家去上班......工作对时间来说是一个障碍:)