Soacat iie1
View more presentations from jcastellsg.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TransparentProxy { interface IProxy<T> T Client {get;} void Close(); } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TransparentProxy { public class Proxy<T>: IProxy<T> { public T Client { get { throw new NotImplementedException(); } } public void Close() { throw new NotImplementedException(); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.ServiceModel.Channels; namespace TransparentProxy { public class Proxy<T>: IProxy<T> { ChannelFactory<T> ch; public Proxy(Binding bind, string addr , string userName, string password ) { ch = new ChannelFactory<T>(bind, new EndpointAddress(addr)); if ((userName != null) && (password!=null)) { // És un exemple, les credencials poden ser passades // d'altres maneres, certificats, tokens, etc. // Cal docuementar-se. ch.Credentials.UserName.UserName = userName; ch.Credentials.UserName.Password = password; } } public T Client { get { return ch.CreateChannel(); } } public void Close() { ch.Close(); } } }
WSHttpBinding bind=new WSHttpBinding(); bind.Security.Mode = SecurityMode.Message; bind.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; bind.Security.Message.ClientCredentialType = MessageCredentialType.Windows; bind.Security.Message.NegotiateServiceCredential = true; TransparentProxy.IProxyproxy = new TransparentProxy.Proxy (bind, "http://localhost:53538/WCFGAPService/Service.svc", null, null); IList res = proxy.Client.LListarMetges(); proxy.Close(); return res;
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; namespace ServeisDistribuits.Ingresos.ModulPrincipal { public class Servei:IModulPrincipal { public IListCercarPacient(CriteriCercarPacient criteri) { // Aqui podem fer una traça personalitzada d'entrada (usuari, PC, Hora, Missatge entrada....) // Declarem la variable de retorn IList llista = new List (); try { // Invoquem el negoci (GAP.dll) i // omplim la llista i la retornem Ex: GAP.Search("Pacients",... return llista; } catch (Exception e) { // Capturem l'error // Fem una traça detallada Ex: Tracert(e) // i finalment llacem un missatge al client throw new FaultException(".... error ....."); } } public IList LListarMetges() { // Aqui podem fer una traça personalitzada d'entrada (usuari, PC, Hora, Missatge entrada....) // Declarem la variable de retorn IList llista = new List (); try { // Invoquem el negoci (GAP.dll) i // omplim la llista i la retornem Ex: GAP.Search("Metges",... return llista; } catch (Exception e) { // Capturem l'error // Fem una traça detallada Ex: Tracert(e) // i finalment llacem un missatge al client throw new FaultException(".... error ....."); } } public IList LlistarLlits(LlitEstats estat) { // Aqui podem fer una traça personalitzada d'entrada (usuari, PC, Hora, Missatge entrada....) // Declarem la variable de retorn IList llista = new List (); try { // Invoquem el negoci (GAP.dll) i // omplim la llista i la retornem Ex: GAP.Search("Llits",... return llista; } catch (Exception e) { // Capturem l'error // Fem una traça detallada Ex: Tracert(e) // i finalment llacem un missatge al client throw new FaultException(".... error ....."); } } public ResultatOperacio Ingresar(DadesIngres dades) { // Aqui podem fer una traça personalitzada d'entrada (usuari, PC, Hora, Missatge entrada....) // Declarem la variable de retorn ResultatOperacio resultat = null; try { // Invoquem el negoci (GAP.dll) i // Executem el negoci Ex: GAP.Save(dades // i retornem el resultat. return resultat; } catch (Exception e) { // Capturem l'error // Fem una traça detallada Ex: Tracert(e) // i finalment llacem un missatge al client throw new FaultException(".... error ....."); } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.Serialization; using System.ServiceModel; namespace ServeisDistribuits.Ingresos { [ServiceContract] public interface IModulPrincipal { ////// Trona una llista de pacients a partir d'un criteri de recerca /// /// Criteri de recerca///[OperationContract] IList CercarPacient(CriteriCercarPacient criteri); /// /// Retorna la llista de pacients actius /// ///[OperationContract] IList LListarMetges(); /// /// Retorna un llista de llits que cumpleixen un estat /// /// ///[OperationContract] IList LlistarLlits(LlitEstats estat); /// /// Operació (Verb) que fa l'ingrés /// /// Dades de l'ingrés///[OperationContract] ResultatOperacio Ingresar(DadesIngres dades); } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.Serialization; namespace ServeisDistribuits.Ingresos { ///--------------------/// Missatge que representa el criteri de recerca de Pacients /// [DataContract] public class CriteriCercarPacient { ////// Part inicial del Cognom1 /// ///[DataMember] public String Cognom1Comenca; /// /// Part Inicial del cognom2 /// ///[DataMember] public String Cognom2Comenca; /// /// Part inicial del Nom /// ///[DataMember] public String NomComenca; } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.Serialization; namespace ServeisDistribuits.Ingresos { public class DadesIngres { [DataMember] public String IdPacient; [DataMember] public String IdMetge; [DataMember] public String IdLlit; [DataMember] public String Observacions; } }---------------------------
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.Serialization; namespace ServeisDistribuits.Ingresos { [DataContract] public class InformacioLlits { [DataMember] public String Id; [DataMember] public EstatLlit Estat; } public enum EstatLlit { Buit=1,Ocupat=2 } }---------------------------
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.Serialization; namespace ServeisDistribuits.Ingresos { [DataContract] public class InformacioMetges { [DataMember] public String Id; [DataMember] public String NomMetge; } }---------------------------
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.Serialization; namespace ServeisDistribuits.Ingresos { [DataContract] public class InformacioPacient { [DataMember] public String Id; [DataMember] public String NomPacient; } }---------------------------
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ServeisDistribuits.Ingresos { public enum LlitEstats { Tots=0, Buits=1, Ocupats=2 } }---------------------------
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.Serialization; namespace ServeisDistribuits.Ingresos { [DataContract] public class ResultatOperacio { [DataMember] public String Missatge; } }
public string GetDataUserName() { //TODO: Change the code below to handle your claims usage. IClaimsPrincipal principal = (IClaimsPrincipal)Thread.CurrentPrincipal; IClaimsIdentity identity = (IClaimsIdentity)principal.Identity; SecurityToken st = identity.BootstrapToken; if (st == null) { st = principal.Identities[0].BootstrapToken; } string _sconf = "WS2007FederationHttpBinding_IService"; RequestSecurityTokenResponse _rsts = new RequestSecurityTokenResponse(); STSRPClientc2 = new STSRPClient (st, _sconf); Back_End_Service.IServiceChannel cl2 = c2.ClientActAs; string res1 = cl2.GetDataUserName(); cl2.Close(); return string.Format("Front_End_Service: tu ets {0}{1}{2}" , identity.Name, "\r\n" ,res1); }
public string GetDataUserName() { //TODO: Change the code below to handle your claims usage. IClaimsPrincipal principal = (IClaimsPrincipal)Thread.CurrentPrincipal; IClaimsIdentity identity = (IClaimsIdentity)principal.Identity; return string.Format("Back_End_Service: tu ets {0} i l'actor és {1}", identity.Name, identity.Actor.Name); }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IdentityModel.Tokens; using System.ServiceModel; using Microsoft.IdentityModel.Protocols.WSTrust; using System.ServiceModel.Security; namespace IDP { public static class EndPoints { public static string baseUri = "http://[idphost]/adfs/services/"; public static string SSLbaseUri = "https://[idphost]/adfs/services/"; public static SecurityToken GetTokenFrom_trust_13_usernamemixed(string username, string password, string appliesTo, out RequestSecurityTokenResponse rsts) { string adrecaSTS = "trust/13/usernamemixed"; WS2007HttpBinding binding = new WS2007HttpBinding(); binding.Security.Message.EstablishSecurityContext = false; binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName; binding.Security.Mode = SecurityMode.TransportWithMessageCredential; //https WSTrustChannelFactory trustChannelFactory = new WSTrustChannelFactory(binding, new EndpointAddress(SSLbaseUri + adrecaSTS)); trustChannelFactory.TrustVersion = TrustVersion.WSTrust13; trustChannelFactory.Credentials.UserName.UserName = username; trustChannelFactory.Credentials.UserName.Password = password; trustChannelFactory.ConfigureChannelFactory(); WSTrustChannel tokenClient = (WSTrustChannel)trustChannelFactory.CreateChannel(); //create a token issuance issuance RequestSecurityToken rst = new RequestSecurityToken(WSTrust13Constants.RequestTypes.Issue); //Relying Party’s identifier rst.AppliesTo = new EndpointAddress(appliesTo); //call ADFS STS SecurityToken token = tokenClient.Issue(rst, out rsts); return token; } public static SecurityToken GetTokenFrom_trust_13_windows(string appliesTo, out RequestSecurityTokenResponse rsts) { string adrecaSTS = "trust/13/windows"; WS2007HttpBinding binding = new WS2007HttpBinding(); binding.Security.Message.EstablishSecurityContext = false; binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows; binding.Security.Mode = SecurityMode.Message; binding.Security.Message.NegotiateServiceCredential = true; WSTrustChannelFactory trustChannelFactory = new WSTrustChannelFactory(binding, new EndpointAddress(baseUri + adrecaSTS)); trustChannelFactory.TrustVersion = TrustVersion.WSTrust13; trustChannelFactory.ConfigureChannelFactory(); WSTrustChannel tokenClient = (WSTrustChannel)trustChannelFactory.CreateChannel(); //create a token issuance issuance RequestSecurityToken rst = new RequestSecurityToken(WSTrust13Constants.RequestTypes.Issue); //Relying Party’s identifier rst.AppliesTo = new EndpointAddress(appliesTo); //call ADFS STS SecurityToken token = tokenClient.Issue(rst, out rsts); return token; } } }
Imports System.IdentityModel.Tokens Imports System.ServiceModel Imports System.ServiceModel.Description Imports Microsoft.IdentityModel.Protocols.WSTrust Imports System.ServiceModel.Channels Imports System.ServiceModel.Security Imports System.ServiceModel.Security.Tokens Imports System.Text Public Class STSRPClient(Of T) Implements IDisposable #Region "Members" Private _st As SecurityToken Private _factory As ChannelFactory(Of T) #End Region '''''' Contructor per generar Client a partir del fitxer de configuració ''' ''' ''' '''Sub New(ByVal st As SecurityToken, ByVal bindingConfiguration As String) Create(st, bindingConfiguration) End Sub Private Sub Create(ByVal st As SecurityToken, ByVal bindingconfiguration As String) Me._st = st _factory = New ChannelFactory(Of T)(bindingconfiguration) _factory.ConfigureChannelFactory() End Sub Public Sub Close() _factory.Close() End Sub Public ReadOnly Property Client As T Get Return _factory.CreateChannelWithIssuedToken(_st) End Get End Property Public ReadOnly Property ClientActAs As T Get Return _factory.CreateChannelActingAs(_st) End Get End Property #Region "IDisposable Support" Private disposedValue As Boolean ' To detect redundant calls ' IDisposable Protected Overridable Sub Dispose(ByVal disposing As Boolean) If Not Me.disposedValue Then If disposing Then ' TODO: dispose managed state (managed objects). End If If Me._factory.State <> CommunicationState.Closed Then _factory.Close() End If _st = Nothing ' TODO: free unmanaged resources (unmanaged objects) and override Finalize() below. ' TODO: set large fields to null. End If Me.disposedValue = True End Sub ' TODO: override Finalize() only if Dispose(ByVal disposing As Boolean) above has code to free unmanaged resources. 'Protected Overrides Sub Finalize() ' ' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above. ' Dispose(False) ' MyBase.Finalize() 'End Sub ' This code added by Visual Basic to correctly implement the disposable pattern. Public Sub Dispose() Implements IDisposable.Dispose ' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above. Dispose(True) GC.SuppressFinalize(Me) End Sub #End Region End Class
Imports System.IdentityModel.Tokens Imports Microsoft.IdentityModel.Protocols.WSTrust Public Class Form1 Private Sub BInvoke_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BInvoke.Click Dim adrecaservei As String = "http://localhost/Front_End_Service/Service.svc" ' App.config - Nom de la configuració del binding del client Dim conf As String = "WS2007FederationHttpBinding_IService" ' Primer hem d'obtenir un token de seguretat del IDP pel servei Dim rsts As New RequestSecurityTokenResponse Dim st As SecurityToken = IDP.EndPoints.GetTokenFrom_trust_13_usernamemixed(Me.TxtUser.Text, Me.TxtPwd.Text, adrecaservei, rsts) ' Un cop el tenim em de fer-lo servir per accedir-hi i invocar les seves operacions Dim clirp As New STS.STSRPClient(Of Front_End_Service.IServiceChannel)(st, conf) Dim client As Front_End_Service.IServiceChannel = clirp.Client Dim response As String = client.GetDataUserName() clirp.Close() clirp.Dispose() Me.TextBox1.AppendText(response + vbNewLine) End Sub End Class
.... [ServiceContract] public interface IService { [OperationContract] string GetDataUserName(); } ....
using System.Threading; using Microsoft.IdentityModel.Claims; namespace Front_End_Service { public class Service : IService { public string GetDataUserName() { IClaimsPrincipal principal = (IClaimsPrincipal)Thread.CurrentPrincipal; IClaimsIdentity identity = (IClaimsIdentity)principal.Identity; return string.Format("Front_End_Service: tu ets {0}", identity.Name); } } }
using System.Threading; using Microsoft.IdentityModel.Claims; namespace Back_End_Service { public class Service : IService { public string GetDataUserName() { IClaimsPrincipal principal = (IClaimsPrincipal)Thread.CurrentPrincipal; IClaimsIdentity identity = (IClaimsIdentity)principal.Identity; return string.Format("Back_End_Service: tu ets {0} i l'actor és {1}", identity.Name, identity.Actor.Name); } } }