Sie sind auf Seite 1von 5

Banco de Crédito

Guía del programador: Usar


AuthorizationService desde
.NET
Uso de interfaz AutorizationService.svc desde .NET

E17068
05/05/2012
Hoja de Revisión y Firma

Registro de Cambios
Fecha Autor Versión Referencia del cambio
27/04/2012 Luis Chunga 1.0 Versión inicial para revisión/discusión

Revisores
Nombre Versión aprobada Posición Fecha
Como trabajar con AutorizationService desde .Net

Se describen los pasos para trabajar con la Interface AutorizationService.svc desde Microsoft .NET.
Esta interfaz provee de dos métodos: AccessCheck y GetRoles, el primero permite validar a que
operaciones tiene acceso un usuarios dentro de una aplicación, el segundo le permitirá conocer a que
roles esta asociado un usuario.

1. Agregar referencia al Servicio


https://sgnt-azgatewayDesa/AuthorizationService.svc

Para pasar a producción a producción debe realizar el cambio del end point en el web.config para
que apunte a producción:
<system.serviceModel>
<client>
<endpoint address="https://azgateway/AuthorizationService.svc/net"
binding="wsHttpBinding" bindingConfiguration="AuthorizationEndpointNet"
contract="AuthorizationServices.IAuthorization" name="AuthorizationEndpointNet">

2. Agregar librerías y referencias a los siguientes namespaces

using AuthorizationServices; //Nombre con que se agrego la referencia al servicio


using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;
using System.Security.Principal;
using ServiceExtensions.EndpointBehavior;
using System.Web.Security;
3. Agregar el folder App_Code

4. Agregar la carpeta ServiceExtensions con todo su contenido

5. Instanciar el servicio e invocar los métodos AccessCheck y GetRoles

//Instanciamos al servicio seleccionando el EndPoint AuthorizationEndpointNet


AuthorizationClient servicio = new AuthorizationClient("AuthorizationEndpointNet");
//Enviamos el correlation ID
servicio.ChannelFactory.Endpoint.Behaviors.Add(new
AddMessageInspector(Guid.NewGuid()));

//Obtenemos el user principal name (UPN) del usuario logeado a la aplicación


string userPrincipalName =
ObtenerUserPrincipalName(Request.ServerVariables["LOGON_USER"]);

//Ya podemos usar los métodos:


// * AccessCheck para consultar por las políticas a que políticas se tiene acceso
// * GetRoles para recuperar la lista de perfiles a los que pertenece un usuario
AzManRole [] Roles = servicio.GetRoles(userPrincipalName,
Configuracion.NombreAplicacion);
Response.Write(Roles[0].Area);

int[] arrOperaciones = { 1, 2}; // 1 y 2 son los IDs de Operaciones en AzMan


object[] bRetorno = null;
bRetorno = servicio.AccessCheck(userPrincipalName, Configuracion.NombreAplicacion,
arrOperaciones);
return ((int)bRetorno[0] == 0);
6. Para obtener el User Principal Name (UPN) se puede utilizar la función que se detalla a
continuación

private string ObtenerUserPrincipalName(string logonUser)


{
DirectorySearcher searcher;
SearchResult usuarioSR;
string upn = null;
try
{
using (searcher = Forest.GetCurrentForest()
.FindGlobalCatalog().GetDirectorySearcher())
{
NTAccount account = new NTAccount(logonUser);
SecurityIdentifier sid =

(SecurityIdentifier)account.Translate(typeof(SecurityIdentifier));
searcher.Filter = string.Format(
"(&(objectClass=user)(objectSid={0}))"
, sid.Value);

usuarioSR = searcher.FindOne();

SearchResultCollection rc = searcher.FindAll();

upn = usuarioSR.Properties["userPrincipalName"][0].ToString();
}
return upn;
}
catch (Exception ex)
{
//Manejar el posible error que se pueda presentar
return null;
}
}

Das könnte Ihnen auch gefallen