在带有WCF的App.config中使用Windows角色身份验证

时间:2008-11-13 20:02:15

标签: wcf app-config windows-authentication

我正在使用WCF服务和net.tcp端点,其serviceAuthentication的主要PermissionMode设置为UseWindowsGroups。

目前在服务的实现中,我使用PrincipalPermission属性来设置每个方法的角色要求。

        [PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
        [OperationBehavior(Impersonation = ImpersonationOption.Required)]
        public string method1()

我正在尝试做同样的事情,除了在app.config中设置角色的配置。有没有办法做到这一点,仍然使用Windows组身份验证?

由于

3 个答案:

答案 0 :(得分:8)

如果您在IIS中托管WCF服务,它将在ASP.NET辅助进程中运行,这意味着您可以像对ASMX Web服务一样配置身份验证和授权:

<system.Web>
    <authentication mode="Windows"/>
    <authorization>
        <allow roles=".\Administrators"/>
        <deny users="*"/>
    </authorization>
</system.Web>

然后,您必须禁用对IIS中端点的匿名访问,而是启用 Windows集成身份验证
在IIS管理控制台中,您可以通过启动'虚拟目录的“属性”对话框。然后,您将在“目录安全性”选项卡中找到安全设置。

当然,唯一可用的通信渠道是HTTP。客户端必须使用以下设置在传输级别的请求中提供其Windows身份:

<system.serviceModel>
    <bindings>
        <wsHttpBinding>
            <binding name="WindowsSecurity">
                <security mode="Transport">
                    <transport clientCredentialType="Windows" />
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <client>
        <endpoint address="https://localhost/myservice"
                  binding="wsHttpBinding"
                  bindingConfiguration="WindowsSecurity"
                  contract="IMyService" />
     </client>
</system.serviceModel>

请注意,如果您的服务端点使用 wsHttpBinding ,那么您还必须向端点添加SSL,因为当您使用传输级安全性时,这是WCF强制执行的要求。 如果您改为使用 basicHttpBinding ,则可以使用WCF中可用的安全身份验证模式,名为 TransportCredentialOnly ,其中SSL为否需要更长时间。

有关更多详细信息,here概述了WCF中的安全基础结构。

答案 1 :(得分:4)

Lars Wilhelmsen已经针对这个问题发布了解决方案。看一下 http://www.larswilhelmsen.com/2008/12/17/configurable-principalpermission-attribute/

答案 2 :(得分:3)

如果我理解得很好,你想在运行时选择角色。这可以通过WCF操作中的permission需求来完成。 E.g。

public string method1()
{
    PrincipalPermission p = new PrincipalPermission(null, "Administrators");
    p.Demand();
    ...
相关问题