代码之家  ›  专栏  ›  技术社区  ›  Erv Walter

使用WCF REST服务对Windows帐户以外的其他帐户进行基本身份验证?

  •  29
  • Erv Walter  · 技术社区  · 15 年前

    是否有一种公开需要基本身份验证的WCF REST服务的干净方法,但是我们自己在哪里处理用户名/密码的实际验证?似乎当您在config中告诉wcf您想要使用基本身份验证时,它强制您在IIS中启用基本身份验证,而IIS只能对窗口帐户进行基本身份验证。

    我们发现的唯一的黑客是欺骗WCF,告诉它服务没有安全性,然后在WCF堆栈之外使用通用的IHttpModule(它有一个专有的配置文件来指示哪些URL具有哪些身份验证/授权要求)进行身份验证。

    似乎应该有更好的方法。有人有吗?

    5 回复  |  直到 12 年前
        1
  •  9
  •   Juozas Kontvainis    13 年前

    wcf rest contrib库启用此功能:

    http://github.com/mikeobrien/WcfRestContrib

    它还允许您保护各个操作。

        2
  •  4
  •   CodingWithSpike    15 年前

    在客户机上设置的用户名和密码是否如下:

    cc.ClientCredentials.UserName.UserName = ReturnUsername();
    cc.ClientCredentials.UserName.Password = ReturnPassword();
    

    或者它们是嵌入到其余消息的主体中?

    如果是前者,则可以使用自定义用户名密码验证程序: http://msdn.microsoft.com/en-us/library/aa702565.aspx

    如果是后者,则可以将服务设置为不安全,并使用自定义ServiceAuthorizationManager验证消息的内容: http://msdn.microsoft.com/en-us/library/ms731774.aspx

    希望有人帮忙!我会尝试发布示例代码和配置,但我是@home,无法访问代码,这都是@work。

        3
  •  4
  •   Eric Hauser    15 年前

    Custom Basic Authentication for RESTful services .Pablo的方法使用了通过rest starter工具包提供的拦截器功能来解决问题。如果您不想依赖RESTStarter工具包,那么您可以创建自己的服务主机并使用提供的Intelceptor功能。

        4
  •  3
  •   Community CDub    7 年前

    如果您将其托管在IIS上,则可以使用自定义HTTP模块。您可以将主体移交给WCF端以进行代码访问安全性。见 HTTP Basic Authentication against Non-Windows Accounts in IIS/ASP.NET (Part 3 - Adding WCF Support) . 也看到 Custom HTTP Basic Authentication for ASP.NET Web Services on .NET 3.5/VS 2008 .

    如果您不使用IIS,则应该能够实现用户名身份验证。见 Finally! Usernames over Transport Authentication in WCF .

        5
  •  1
  •   atconway    12 年前

    是的,绝对有办法。您需要配置自定义 userNamePasswordValidationMode 值,并将其指向具有可检查和验证所提供凭据的重写方法的类。当进行RESTful调用时,以适当形式使用基本身份验证时,这些凭据应位于请求头中。使用此自定义方法,您可以检查凭据,然后 认证 为您服务的客户。甚至不需要Windows帐户或域。

    好的是,您可以将该安全上下文提升到下一个级别并提供 细粒度的 方法级别的授权。您可能有大量客户机能够访问该服务的实例,但并非其中的所有方法(即付费客户机与未付费客户机)。在这种情况下,您还可以提供 授权 在方法级别,如果需要的话。

    下面是我的一个逐步解决方案(嵌入的步骤太多),它包含了 完成 解决方案。问题通常是使用基本身份验证而不使用SSL证书保护传输,这是 坏的 . 请确保遵循所有步骤,您将实现基本身份验证,而无需在基于WCF RESTful的服务上使用任何类型的Windows帐户或配置。

    RESTful Services: Authenticating Clients Using Basic Authentication