2009-09-01 8 views
0

Mon service WCF utilise un validateur d'informations d'identification personnalisé pour la sécurité personnalisée basée sur Message, car je souhaite m'assurer que chaque client appelant une opération sur mon service Web possède un nom d'utilisateur et un mot de passe correspondants dans ma base de données.Obtention de ClientCredentials à partir de l'opération WCF

Imports System.IdentityModel.Selectors 
Imports System.IdentityModel.Tokens 

Public Class CredentialsValidator 
    Inherits UserNamePasswordValidator 

    Public Overrides Sub Validate(ByVal userName As String, ByVal password As String) 
     Dim authenticationApi As New AuthenticationGateway() 
     If Not authenticationApi.IsValid(userName, password) Then 
      Throw New SecurityTokenException("Validation Failed.") 
     End If 
    End Sub 
End Class 

La chose est, une fois que l'utilisateur passe d'authentification que je veux utiliser le userName dans mes implémentations OperationContract pour faire des appels en fonction du contexte.

<ServiceContract(Name:="IMyService")> _ 
Public Interface IMyService 
    <OperationContract()> _ 
    Function GetAccountNumber() As String 
End Interface 

Public Class IntegrationService 
    Implements IIntegrationService 

    Public Function GetAccountNumber() As String Implements IMyService.GetAccountNumber 
     Dim userName As String '' Here I want the userName set from credentials 
     Dim accountApi As New AccountGateway() 
     Return accountApi.GetAccountNumber(userName) 
    End Function 
End Class 

Je ne peux pas compter sur l'honnêteté des fonctions appelées à préciser leur userName réelle ne peut donc pas passer sans passer aussi un mot de passe. Je voulais éviter que tous les appels à mon service Web aient à accepter les ClientCredentials.

Merci.

Répondre

1
Public Class IntegrationService 
    Implements IIntegrationService 

    Private ReadOnly Property UserName As String 
     Get 
      Return ServiceSecurityContext.Current.PrimaryIdentity.Name 
     End Get 
    End Property 

    Public Function GetAccountNumber() As String Implements IMyService.GetAccountNumber 
     Dim accountApi As New AccountGateway() 
     Return accountApi.GetAccountNumber(UserName) 
    End Function 
End Class 
Questions connexes