clientcredentialtype - wcf certificate authentication
Usar la autenticación de rol de Windows en App.config con WCF (3)
Si lo entendí bien, desea seleccionar el rol en tiempo de ejecución. Esto se puede hacer con una demanda de permiso dentro de la operación WCF. P.ej
public string method1()
{
PrincipalPermission p = new PrincipalPermission(null, "Administrators");
p.Demand();
...
Estoy utilizando un servicio WCF y un punto final net.tcp con el modo de permiso principal serviceAuthentication establecido en UseWindowsGroups.
Actualmente, en la implementación del servicio estoy usando el atributo PrincipalPermission para establecer los requisitos de rol para cada método.
[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public string method1()
Estoy tratando de hacer casi lo mismo, excepto que tenga la configuración para el rol establecido en la aplicación.config. ¿Hay alguna manera de hacer esto y seguir utilizando la autenticación de grupos de Windows?
Gracias
Si aloja su servicio WCF en IIS, se ejecutará en el proceso de trabajo de ASP.NET, lo que significa que puede configurar la autenticación y la autorización como lo haría con los servicios web de ASMX:
<system.Web>
<authentication mode="Windows"/>
<authorization>
<allow roles="./Administrators"/>
<deny users="*"/>
</authorization>
</system.Web>
Luego, deberá deshabilitar el acceso anónimo a su punto final en IIS y, en su lugar, habilitar la Autenticación integrada de Windows .
En la consola de administración de IIS lo hace al abrir el cuadro de diálogo '' Propiedades '' para su directorio virtual. A continuación, encontrará la configuración de seguridad en la pestaña '' Seguridad del directorio ''.
Por supuesto, el único canal de comunicación disponible será HTTP. Los clientes deberán proporcionar su identidad de Windows en la solicitud en el nivel de transporte con esta configuración:
<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>
Tenga en cuenta que si su punto extremo de servicio utiliza wsHttpBinding , también deberá agregar SSL a su punto final, ya que es un requerimiento impuesto por WCF cuando usa seguridad de nivel de transporte.
Si, en cambio, opta por el enlace básico de HTTP , podrá utilizar un modo de autenticación menos seguro disponible en WCF denominado TransportCredentialOnly , donde SSL ya no es necesario.
Para obtener información más detallada, aquí hay una buena visión general de la infraestructura de seguridad en WCF.
Lars Wilhelmsen ha publicado una solución para este problema. Eche un vistazo a http://www.larswilhelmsen.com/2008/12/17/configurable-principalpermission-attribute/