WCF基本身份验证和自定义令牌身份验证

时间:2010-07-20 23:11:10

标签: c# wcf rest basic-authentication

我使用基本身份验证,自定义服务主机和a获得RESTful WCF服务。我已经设置了自定义UserNamePasswordValidator,并且自定义IPrincipal正确地流向该操作。但是,对于传统的互操作性,我需要支持不同的身份验证模式。应该如何运作:

  1. 用户POST到登录URI
  2. 服务如上所述验证用户,但返回会话令牌(加密的用户凭据)作为HTTP响应头。​​
  3. 来自用户的所有后续请求都包含会话令牌,而不是基本身份验证。
  4. 我当前的想法是:如果会话令牌包含加密凭据,则应该可以操纵传入消息,解密凭据并使用基本身份验证标头替换会话标头。我的问题是找到一个可扩展性点:

    • 以某种方式公开邮件属性AND
    • 执行-before-自定义UserNamePasswordValidator执行..

    你们中的任何一位大师都知道这样的可扩展性点,还是一种定制传输安全机制的方法?我真的对这里的大量选项感到困惑,并且在Reflector中浏览System.ServiceModel名称空间一直是一种挫败感。

    谢谢!

1 个答案:

答案 0 :(得分:2)

我自己发现了答案,答案是我无法弄清楚如何实现问题中概述的精确机制 - 即在密码验证之前用另一个替换HTTP标头

相反,我将UserNamePasswordValidator替换为IAuthorizationPolicy。在策略的Evaluate方法中,另一个类处理对基本凭据或会话密钥的检查,并返回自定义IIdentity。这里的关键是,在成功进行身份验证后,包含自定义ID的新List将添加到evaulationContext的“Identities”属性中,将自定义主体添加到“Principal”属性中。设置这些属性后,WCF会正确地将主体流转到操作。

事实证明这是一个令人满意的解决方案,但我仍然对找不到我想要的可扩展性点感到失望。