12

Jul

WCF Ria service : Implementare un'autenticazione custom

Da quando ho  iniziato ad utilizzare i RIA Services ho avuto sempre  il bisogno di implementare un'autenticazione custom per le mie applicazioni . L'autenticazione predefinita è quella che usa Asp.net per maggiori informazioni Membership in asp.net . Supponiamo di voler validare le credenziali di un utente leggendo da un database SQL server personalizzato . Per utilizzare un'autenticazione custom abbiamo 2 modi aggiungendo un autentification domain service o  aggiungendo 2 classi al progetto web , la prima classe implementerà AuthenticationBase<(Of <(<'T>)>)>  e l'altra che rappresenterà l'utente implementerà UserBase .
In realta se aggiungiamo al progetto un autentification service creerà lui per noi entrambe le classi e tutto quello che dovremò fare sarà ridefinire i metodi che si occupano della gestione di validazione dell'utente . In questo esempio viene aggiunto al progetto per semplicità e praticità un Autentification Service .

 

Aggiungiamo qui al progetto un nuovo autentification service e denominiamolo AutenticationService . Verrà creato per noi un nuovo file .vb che contiene la classe user e la classe AutenticationService che implementa AutentificationBase(Of User) . Questo sarà il risultato

 

Imports System 
Imports System.Collections.Generic 
Imports System.ComponentModel 
Imports System.ComponentModel.DataAnnotations 
Imports System.Linq 
Imports System.ServiceModel.DomainServices.Hosting 
Imports System.ServiceModel.DomainServices.Server 
Imports System.ServiceModel.DomainServices.Server.ApplicationServices 
 
 _ 
Public Class AuthenticationService 
    Inherits AuthenticationBase(Of User)
 
End Class
 


Il lavoro non è ancora finito abbiamo bisogno di ridefinire i metodi che si occupano della gestione dell’utente . In questo esempio vengono solo ridefiniti i metodi che seguono , per un elenco completo dei metodi che possono essere ridefiniti e la loro descrizione potete fare riferimento qui .

A questo punto  implementeremò  la nostra  autenticazione custom ridefinendo il metodo che  si occupa della verifica delle credenziali (ValidateUser ) e il metodo che ritorna l'utente (GetAuthenticatedUser).

CODICE DEMO

Protected Overrides Function ValidateUser(ByVal userName As String, ByVal password As String) As Boolean
       Try
           Dim ValidUser = From item In _DataContext.UserEntities Where item.LoginName = userName And item.Password = password Select item
           If ValidUser.Count > 0 Then
               Return True
           End If
       Catch ex As Exception
           Throw New Exception(ex.Message)
       End Try
   End Function

   Protected Overrides Function GetAuthenticatedUser(ByVal principal As System.Security.Principal.IPrincipal) As User
       Return New User
   End Function

   Public Overrides Sub Initialize(ByVal context As System.ServiceModel.DomainServices.Server.DomainServiceContext)
       MyBase.Initialize(context)
   End Sub

   Protected Overrides Sub Dispose(ByVal disposing As Boolean)
       MyBase.Dispose(disposing)
   End Sub

Adesso abbiamo realizzato una semplice autenticazione custom  con i RIA Services . Possiamo gestire alre situazione come il reset della password , creazione dell'utente etc. semplicemente ridefinendo i metodi interessati

  • ValidateUser
  • GetAuthenticatedUser
  • Initialize
  • Dispose
  • by Andrea Romeo on 7/12/2010
    Post archive