【问题标题】:WCF Basic Authentication and custom token authenticationWCF 基本身份验证和自定义令牌身份验证
【发布时间】:2011-03-18 17:31:55
【问题描述】:

我有一个使用基本身份验证的 RESTful WCF 服务、一个自定义服务主机和一个 .我已经设置了一个自定义的 UserNamePasswordValidator,并且一个自定义的 IPrincipal 正确地流向了操作。但是,对于遗留互操作性,我需要支持不同的身份验证模式。它应该工作的方式是:

  1. 用户 POST 到登录 URI
  2. 服务如上所述对用户进行身份验证,但返回会话令牌(加密的用户凭据)作为 HTTP 响应标头。
  3. 来自用户的所有后续请求都包含会话令牌而不是基本身份验证。

我目前的想法是:如果会话令牌包含加密的凭据,那么应该可以操纵传入的消息,解密凭据并用基本身份验证标头替换会话标头。我的问题是找到一个可扩展点:

  • 以某种方式公开消息属性并且
  • 在自定义 UserNamePasswordValidator 执行之前执行..

你们中的任何一位大师都知道这样的可扩展点,或者自定义传输安全机制的方法吗?老实说,我对这里的大量选项感到困惑,在 Reflector 中浏览 System.ServiceModel 命名空间是一种令人沮丧的练习。

谢谢!

【问题讨论】:

  • 我也想知道这是否可能。无法找到太多关于使用 sessionKey 进行后续身份验证请求的想法。

标签: c# wcf rest basic-authentication


【解决方案1】:

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

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

这已被证明是一个令人满意的解决方案,但我仍然很失望没有找到我正在寻找的可扩展点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2015-11-12
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    相关资源
    最近更新 更多