我使用基本身份验证,自定义服务主机和a获得RESTful WCF服务。我已经设置了自定义UserNamePasswordValidator,并且自定义IPrincipal正确地流向该操作。但是,对于传统的互操作性,我需要支持不同的身份验证模式。应该如何运作:
我当前的想法是:如果会话令牌包含加密凭据,则应该可以操纵传入消息,解密凭据并使用基本身份验证标头替换会话标头。我的问题是找到一个可扩展性点:
你们中的任何一位大师都知道这样的可扩展性点,还是一种定制传输安全机制的方法?我真的对这里的大量选项感到困惑,并且在Reflector中浏览System.ServiceModel名称空间一直是一种挫败感。
谢谢!
答案 0 :(得分:2)
我自己发现了答案,答案是我无法弄清楚如何实现问题中概述的精确机制 - 即在密码验证之前用另一个替换HTTP标头
相反,我将UserNamePasswordValidator替换为IAuthorizationPolicy。在策略的Evaluate方法中,另一个类处理对基本凭据或会话密钥的检查,并返回自定义IIdentity。这里的关键是,在成功进行身份验证后,包含自定义ID的新List将添加到evaulationContext的“Identities”属性中,和将自定义主体添加到“Principal”属性中。设置这些属性后,WCF会正确地将主体流转到操作。
事实证明这是一个令人满意的解决方案,但我仍然对找不到我想要的可扩展性点感到失望。