Cuando se estamos utilizando BAM para capturar los datos de los itinerarios en ESB Toolkit 2.0 los datos de las fechas no son guardados correctamente, este Hotfix soluciona este caso puntual en ESB, en el siguiente link podemos ver más detalles:
Politica Windows Role Provider Authorization para MSE
He realizado varios demos con MSE mostrando las ventajas que podemos tener al virtualizar fácilmente los servicios y administrarlos con políticas como las que vienen con la Guía de Seguridad, la que me ilustro en el proceso fue SqlProviderSecurity, esta política nos permite tener una autenticación al servicio WCF por medio de un usuario y contraseña, este usuario se autenticaría en la base de datos aspnetdb la cual refleja el modelo Membership, así mismo para la autorización se extraen los roles configurados en esta base de datos.
Adicional a esta podemos validar que roles pueden acceder a las operaciones expuestas en todos los endpoint para esto usamos RoleProviderAuthorization.
Bueno como ya había colocado el post en codeplex, donde veíamos que este ejemplo era bueno el mundo real era otro, la mayoría teníamos que validar y autenticar con usuarios Windows!!
Es por eso que investigue el código de la Guía e Implemente un Windows Role Provider Authorization.
Lo primero que tenemos que tener en cuenta es que no cree una política que me permitir autenticar en Windows, ya que esto lo hace cualquier binding de MSE que tenga las características clientCredentialType=”Windows”, ya con esto el usuario envía su identificación (el usuario ya se autentico). Lo que desarrolle fue la validación de roles de usuario para las operaciones permitidas, estas fueron las nuevas clases implementadas:
Clases Nuevas:
- Microsoft.MSE.Behaviors.Security.Configuration.WindowsRoleProviderAuthorizationElement
- Microsoft.MSE.Behaviors.Security.WindowsRoleProviderAuthorizationBehavior.cs
- Microsoft.MSE.Behaviors.Security.WindowsRoleProviderAuthorizationParameterInspector.cs
- Microsoft.MSE.Behaviors.Security.WindowsRoleProviderServiceAuthorizationManager.cs
- Microsoft.MSE.PolicyDesigners.Security.WindowsRoleAuthzAssertionUI.xaml
La implementacion importante fue para la clase WindowsRoleProviderServiceAuthorizationManager
1. Las operaciones en MSE 7.5.29 ahora tienen una nueva propiedad llamada Action, esta nos permiten tener un mismo nombre de operacion con Action diferentes, debido a eso comentarie esta linea en la clase
//I comment the action because we can have many //Operations with the same Name for diferents //endpoints. With MSE 7.5.29.0 we can differ the operations by the action //action = action.IndexOf(':') > 0 ? action.Substring(0, action.IndexOf(':'))
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
2. Y He aquí las línea que use para obtener roles, acordémonos que no utilizo provider porque vamos a obtener los roles del token de Windows, esta forma de hacerla me gusta debido a que el rendimiento es alto comparado con otros métodos como ir al LDAP a traer información
string[] userRoles = GetRoles(operationContext.ServiceSecurityContext.WindowsIdentity);
NOTA: en el código que adjunto imprimí en Debug los Grupos de Dominio y de Equipo que tiene el usuario, eliminar esta línea y todas la que tenga Trace del código para producción
private static string[] GetRoles(WindowsIdentity id) { List<string> groups = new List<string>(); IdentityReferenceCollection IRC = id.Groups.Translate(typeof(NTAccount)); foreach (NTAccount acc in IRC) { groups.Add(acc.Value); System.Diagnostics.Trace.WriteLine("Grupo de Windows: "+ acc.Value); } return groups.ToArray(); }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Después de la compilación va la instalaciones de la Guía de Seguridad con el nuevo assertion:
Ya podemos visualizar aquí nuestro nuevo WindowsRoleProviderAuthorization Assertion
Podemos configurar Los Grupos del Equipo y sobretodo del dominio para asociar que operaciones tiene permiso de ejecución
Aquí tengo un binding que usa Tipo de Autenticación Windows, estos los debemos usar para que nuestra política funcione
O podemos usar el binding NetTCP del MSE
<bindings xmlns=""> <netTcpBinding> <binding name="netTcp" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"> </readerQuotas> <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"> </reliableSession> <security mode="Transport"> <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"> </transport> <message clientCredentialType="Windows"> </message> </security> </binding> </netTcpBinding> </bindings>
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Aquí pueden descargar el codigo fuente: Microsoft.MSE.SecurityGuide_With_WindowsRoleProviderAuthorization
Habilitar mex con binding netTcpBinding en vez de mexTcpBinding
He aquí otra vez tratando de exponer mex para binding netTCP, el escenario que yo tenía era el siguiente:
Servicios WCF expuestos por binding netTCP y WSHttp, los endpoint netTCP les tenía un binding customBinding, cuando aplicaba la típica configuración que me recomendaban en el post a todo el mundo le funcionaba pero a mí me generaba un error, como este
Aqui la recomendación
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" bindingConfiguration="mexBinding" /> to <endpoint address="mex" binding="netTcpBinding" contract="IMetadataExchange" bindingConfiguration="mexBinding" />
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Resulta que me escenario era diferente, tenía un endpoint así:
<!--Endpoint netTCPCustom--> <endpoint address="" binding="customBinding" bindingConfiguration="customTcpBinding_Funcionalidad" name="Custom_netTCPEndPoint_Funcionalidad" contract="Contrato.Funciolidad"> <identity> <dns value="localhost" /> </identity> </endpoint>
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Con un binding así:
<bindings> <customBinding> <binding name="customTcpBinding_Funcionalidad"> <binaryMessageEncoding maxReadPoolSize="1024" maxWritePoolSize="1024" maxSessionSize="32768"> <readerQuotas maxDepth="1024" maxStringContentLength="262144" maxArrayLength="262144" maxBytesPerRead="32768" maxNameTableCharCount="262144"/> </binaryMessageEncoding> <windowsStreamSecurity/> <tcpTransport manualAddressing="false" maxBufferPoolSize="524288" maxReceivedMessageSize="524288" connectionBufferSize="65536" hostNameComparisonMode="StrongWildcard" channelInitializationTimeout="00:01:00" maxBufferSize="524288" maxPendingConnections="200" maxOutputDelay="00:00:00.2000000" maxPendingAccepts="200" transferMode="Buffered" listenBacklog="500" portSharingEnabled="false" teredoEnabled="false"> <connectionPoolSettings groupName="default" leaseTimeout="00:30:00" idleTimeout="00:30:00" maxOutboundConnectionsPerEndpoint="300"/> </tcpTransport> </binding> </customBinding> </bindings>
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Tenía que agregar un endpoint para mex así:
<endpoint address="mex" binding="customBinding" contract="IMetadataExchange" bindingConfiguration="customTcpBinding_Funcionalidad" />
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Conclusión:
El error lo decía, las configuraciones del enpoint no concuerdan con las que se han configurado para otro servicios o endpoints.
Lo ejemplos siempre hablan de configuraciones básicas, un endpoint ya configurado binding netTCP, pero yo tenía un customBinding con una cantidad de configuraciones realizadas para tunning, lo que hacía como decía el ejemplo era cambiar mexTcpBinding por netTcpBinding, yo tenía era que cambiarlo por customBinding, con esto ya mi endpoint mex funcionaria pero solo agregando una configuración de binding igual a la que ya tenía en el otro endpoint por eso volví a utilizar el binding que ya tenía y coloque esto: bindingConfiguration=”customTcpBinding_Funcionalidad” , y listo ya tenía porfin mi endpoint netTCP y mi endpoint mex
- « Previous Page
- 1
- …
- 12
- 13
- 14
- 15
- 16
- 17
- Next Page »