Usando a autenticação Role Windows na App.config com o WCF
-
08-07-2019 - |
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
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 /