【问题标题】:WCF authentication with ASP.NET membership, role and profile使用 ASP.NET 成员身份、角色和配置文件进行 WCF 身份验证
【发布时间】:2011-09-20 11:42:35
【问题描述】:

我有一个 WCF 服务,它托管在 ASP.NET MVC Web 应用程序内的 IIS 7.0/7.5 中(通过使用带有 ServiceHost 指令的 .svc 文件)。我的配置中的安全设置如下所示:

<services>
  <service name="MyServiceLib.MyService">
    <endpoint address="" binding="wsHttpBinding" 
              bindingConfiguration="wsHttpBindingConfig"
              contract="MyServiceLib.IMyService" />
  </service>
</services>

<bindings>
  <wsHttpBinding>
    <binding name="wsHttpBindingConfig">
      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="None" />
        <message clientCredentialType="UserName" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceCredentials>
        <userNameAuthentication
            userNamePasswordValidationMode="MembershipProvider"
            membershipProviderName="AspNetSqlMembershipProvider"/>
      </serviceCredentials>
    </behavior>
  </serviceBehaviors>
</behaviors>

如您所见,我使用 SSL 来确保传输安全,然后使用用户名和密码对 ASP.NET 成员资格提供程序进行身份验证。到目前为止,这工作正常。

但我想将访问此服务的权限不仅限于经过身份验证的用户,而且仅限于具有特定角色且在其个人资料中设置了特定值的用户。 (我在 Web 应用程序中使用 SqlProfileProvider,每个用户都有一个配置了特定值的配置文件。)

是否可以通过配置设置来实现?如果没有,我是否可以在服务端创建某种自定义身份验证,允许我从传入消息中检索用户和密码,然后检查成员资格和角色并从配置文件存储中提取配置文件?我该怎么做?

【问题讨论】:

    标签: wcf security asp.net-membership wcf-security


    【解决方案1】:

    好吧,您可以通过使用“PrincipalPermissionAttribute”装饰方法来限制对服务中方法的访问

    [PrincipalPermission(SecurityAction.Demand, Role = "User")] 公共无效 MyMethod() { ...

    您需要配置服务以使用角色提供者:

    &lt;serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="SqlRoleProvider" /&gt;

    但这只会对角色有所帮助。我不认为有任何开箱即用的方法可以帮助检查用户配置文件中的值:您可以考虑在方法主体内手动执行此操作。

    【讨论】:

    • 我试过了,但总是出现异常:“请求主体权限失败。” - 无论用户是否属于我指定的角色。这是否可能仅适用于 Windows 身份验证中的用户组,而不适用于 ASP.NET 角色?
    • 需要配置服务使用角色提供者:
    • 感谢您的提示!我现在已经使用了自定义验证(因为无论如何我都需要访问配置文件)。您可以将您的最后一条评论编辑到您的答案中(以防其他人在这里发现),因为这是让您的解决方案与 ASP 角色提供者一起使用的重要信息。
    【解决方案2】:

    Enable WCF Role Service 怎么样?

    否则,您可以implement your own authentication method。您告诉 WCF 我们要自行验证用户(执行您自己的校验和/验证方法)

    【讨论】:

    • 嗯,我不确定这个角色服务是否有帮助。描述说:“本主题展示了如何在 Web 服务器上配置 ASP.NET 角色服务,以使其可供使用 Windows Communication Foundation (WCF) 的客户端使用。” 但我不想为客户提供角色,我也无法确保客户使用 WCF。我只想检查传入的用户名是否具有特定角色,纯粹是在服务器端。
    • @Slauma:启用aspNetCompatibilityMode怎么样?
    • 我认为,WCF 角色服务只是有另一个目的 - 有或没有 aspNetCompatibilityMode - 比我需要的。但是自定义验证实际上很容易实现并且工作正常。感谢您的提示!
    猜你喜欢
    • 2011-05-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多