Pergunta

Eu estou usando um serviço WCF e um ponto de extremidade net.tcp com o serviceAuthentication principais conjunto PermissionMode para UseWindowsGroups.

Actualmente a implementação do serviço que eu estou usando o atributo PrincipalPermission para definir os requisitos de comportamento para cada método.

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

Eu estou tentando fazer praticamente a mesma coisa, exceto ter a configuração para o conjunto de papel no app. Existe alguma maneira de fazer isso e ainda estar usando autenticação de grupos do Windows?

Graças

Foi útil?

Solução

Se eu entendi bem, você quer selecionar o papel em tempo de execução. Isso pode ser feito com um demanda permissão dentro da operação WCF. Por exemplo.

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

Outras dicas

Se você está hospedando seu serviço WCF no IIS, ele será executado no processo de trabalho ASP.NET, o que significa que você pode configurar a autenticação e autorização, como você faria com serviços web ASMX:

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

Em seguida, você terá que desativar o acesso anônimo ao seu ponto final no IIS, e em vez disso permitir autenticação integrada do Windows .
No IIS console de gerenciamento você fizer isso, trazendo até a ' propriedades ' diálogo para o seu diretório virtual. Então você vai encontrar as configurações de segurança no ' Segurança Diretório ' guia.

Claro, o único canal de comunicação disponível será HTTP. Os clientes terão de fornecer a sua identidade do Windows no pedido na transporte de nível com essas configurações:

<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>

Note que, se seu endpoint usos de serviços wsHttpBinding , em seguida, você também tem que adicionar o SSL para seu endpoint já que é uma exigência imposta pelo WCF quando usando segurança em nível de transporte.
Se você em vez de ir para o basicHttpBinding , que são então capazes de usar um menos segura Modo de autenticação disponíveis no WCF chamado TransportCredentialOnly , onde SSL não é mais necessário.

Para informações mais detalhadas, aqui é uma boa visão geral do infra-estrutura de segurança no WCF.

Lars Wilhelmsen publicou uma solução para este problema. Dê uma olhada em http://www.larswilhelmsen.com/2008/12/17 /-PrincipalPermission-atributo configurável /

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top