IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Authentification par formulaire


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 55
    Par défaut Authentification par formulaire
    bonsoir,bon voila je travaille sur un site web , et je veut impementer l authentification par formulaire sachant que les users sont enregistres dans une BD Oracle.
    comment proceder pour mettre en place les roles,utilisateurs et droit d acces. j ai essaye ca avec l outil d adminstration asp.net mais je n ai aucun fournisseur. il me sort des erreurs pas de base de donnees ...

    SVP si qelq un a une idee de la maniere a proceder ...

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Je ne voudrais pas m'avancer, ce que je vais dire est donc à nuancer.

    L'API du Framework qui permet de creer les roles, les users et les regles d'acces en utilisant le provider par défaut ou un provider "maison" ne fonctionne selon moi uniquement avec SQL Server.

    Tu risques donc d'être obligé d'implémenter ton propre provider avec tes propres tables.

    Jette un coup d'oeil ici, peut etre que cela t'aidera.
    ORACLE PROVIDER

  3. #3
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Faut créer un MemberShipProvider et un RoleProvider.
    C'est assez rapide à faire

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 55
    Par défaut
    ya t il pas un autre moyen plus simple , faire par exemple des classes pour la gestion utilisateur et une autre pour la gestion des autorisations au lieu de passer pa un provider c risque d etre complique

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 55
    Par défaut
    je suis un peu perdu car je debute en asp.net ,mais bon j ai les info user et ses droit d acces dans des tables oracle, et j aimerai definir des roles logique (dans mon application) pour les droits d acces user, sauf que le fait de faire cela comment lier ses informations a celle enregistre dans la Base de donees.

  6. #6
    Membre averti
    Étudiant
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut
    Oui c'est possible avec des classes mais le probléme c'est que la base sur quoi je travail est Access, je m'y connais pas en Oracle mais ce dont je suis sur c'est que tu ne vas installer Oracle provider

    essaie ce code pour voir et modifie ce que tu peut

    note bien bien que tu dois créer un classe dans un fichier .vb et le positionner dans le dossier app_code

    bonne chance et j'éspere que j'étais utile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
     
     
    Imports Microsoft.VisualBasic
    Imports System.Data
    Public Class AccessMembershipProvider
    Inherits MembershipProvider
    '---for database access use---
    Private connStr As String
    Private comm As New OleDb.OleDbCommand
    Private _requiresQuestionAndAnswer As Boolean
    Private _minRequiredPasswordLength As Integer
    Public Overrides Sub Initialize(ByVal name As String, ByVal config As System.Collections.Specialized.NameValueCollection)
    '===retrives the attribute values set in 
    'web.config and assign to local variables===
    If config("requiresQuestionAndAnswer") = "true" Then _
    _requiresQuestionAndAnswer = True
    connStr = config("connectionString")
    MyBase.Initialize(name, config)
    End Sub
    Public Overrides Property ApplicationName() As String
    Get
    End Get
    Set(ByVal value As String)
    End Set
    End Property
    Public Overrides Function ChangePassword(ByVal username As String, ByVal oldPassword As String, ByVal newPassword As String) As Boolean
    End Function
    Public Overrides Function ChangePasswordQuestionAndAnswer(ByVal username As String, ByVal password As String, ByVal newPasswordQuestion As String, ByVal newPasswordAnswer As String) As Boolean
    End Function
    Public Overrides Function CreateUser(ByVal username As String, ByVal password As String, ByVal email As String, ByVal passwordQuestion As String, ByVal passwordAnswer As String, ByVal isApproved As Boolean, ByVal providerUserKey As Object, ByRef status As System.Web.Security.MembershipCreateStatus) As System.Web.Security.MembershipUser
    Dim conn As New OleDb.OleDbConnection(connStr)
    '----perform checking all the relevant checks here
    ' and set the status of the error accordingly, e.g.:
    'status = MembershipCreateStatus.InvalidPassword
    'status = MembershipCreateStatus.InvalidAnswer
    'status = MembershipCreateStatus.InvalidEmail
    '---add the user to the database
    Try
    conn.Open()
    Dim sql As String = "INSERT INTO Membership VALUES (" & _
    "@username, @password, @email, " & _
    " @passwordQuestion, @passwordAnswer )"
    Dim comm As New OleDb.OleDbCommand(sql, conn)
    comm.Parameters.AddWithValue("@username", username)
    comm.Parameters.AddWithValue("@password", password)
    comm.Parameters.AddWithValue("@email", email)
    comm.Parameters.AddWithValue("@passwordQuestion", passwordQuestion)
    comm.Parameters.AddWithValue("@passwordAnswer", passwordAnswer)
    Dim result As Integer = comm.ExecuteNonQuery()
    conn.Close()
    status = MembershipCreateStatus.Success
    Dim user As New MembershipUser("AccessMembershipProvider", username, Nothing, email, passwordQuestion, Nothing, True, False, Now, Nothing, Nothing, Nothing, Nothing)
    Return user
    Catch ex As Exception
    '---failed; determine the reason why
    status = MembershipCreateStatus.UserRejected
    Return Nothing
    End Try
    End Function
    Public Overrides Function DeleteUser(ByVal username As String, ByVal deleteAllRelatedData As Boolean) As Boolean
    End Function
    Public Overrides ReadOnly Property EnablePasswordReset() As Boolean
    Get
    End Get
    End Property
    Public Overrides ReadOnly Property EnablePasswordRetrieval() As Boolean
    Get
    End Get
    End Property
    Public Overrides Function FindUsersByEmail(ByVal emailToMatch As String, ByVal pageIndex As Integer, ByVal pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection
    End Function
    Public Overrides Function FindUsersByName(ByVal usernameToMatch As String, ByVal pageIndex As Integer, ByVal pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection
    End Function
    Public Overrides Function GetAllUsers(ByVal pageIndex As Integer, ByVal pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection
    End Function
    Public Overrides Function GetNumberOfUsersOnline() As Integer
    End Function
    Public Overrides Function GetPassword(ByVal username As String, ByVal answer As String) As String
    End Function
    Public Overloads Overrides Function GetUser(ByVal username As String, ByVal userIsOnline As Boolean) As System.Web.Security.MembershipUser
    End Function
    Public Overloads Overrides Function GetUser(ByVal providerUserKey As Object, ByVal userIsOnline As Boolean) As System.Web.Security.MembershipUser
    End Function
    Public Overrides Function GetUserNameByEmail(ByVal email As String) As String
    End Function
    Public Overrides ReadOnly Property MaxInvalidPasswordAttempts() As Integer
    Get
    End Get
    End Property
    Public Overrides ReadOnly Property MinRequiredNonAlphanumericCharacters() As Integer
    Get
    End Get
    End Property
    Public Overrides ReadOnly Property MinRequiredPasswordLength() As Integer
    Get
    End Get
    End Property
    Public Overrides ReadOnly Property PasswordAttemptWindow() As Integer
    Get
    End Get
    End Property
    Public Overrides ReadOnly Property PasswordFormat() As System.Web.Security.MembershipPasswordFormat
    Get
    End Get
    End Property
    Public Overrides ReadOnly Property PasswordStrengthRegularExpression() As String
    Get
    End Get
    End Property
    Public Overrides ReadOnly Property RequiresQuestionAndAnswer() As Boolean
    Get
    If _requiresQuestionAndAnswer = True Then
    Return True
    Else
    Return False
    End If
    End Get
    End Property
    Public Overrides ReadOnly Property RequiresUniqueEmail() As Boolean
    Get
    End Get
    End Property
    Public Overrides Function ResetPassword(ByVal username As String, ByVal answer As String) As String
    End Function
    Public Overrides Function UnlockUser(ByVal userName As String) As Boolean
    End Function
    Public Overrides Sub UpdateUser(ByVal user As System.Web.Security.MembershipUser)
    End Sub
    Public Overrides Function ValidateUser(ByVal username As String, ByVal password As String) As Boolean
    Dim conn As New OleDb.OleDbConnection(connStr)
    Try
    conn.Open()
    Dim sql As String = "Select * From Membership WHERE " & _
    "username=@username AND password=@password"
    Dim comm As New OleDb.OleDbCommand(sql, conn)
    comm.Parameters.AddWithValue("@username", username)
    comm.Parameters.AddWithValue("@password", password)
    Dim reader As OleDb.OleDbDataReader = comm.ExecuteReader
    If reader.HasRows Then
    Return True
    Else
    Return False
    End If
    conn.Close()
    Catch ex As Exception
    Console.Write(ex.ToString)
    Return False
    End Try
    End Function
    End Class

  7. #7
    Membre averti
    Étudiant
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut
    Autre chose j'allais oublier le fichier web Config

    je met ca dans un autre message pour seulement séparer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <?xml version="1.0"?>
    <!-- 
        Note: As an alternative to hand editing this file you can use the 
        web admin tool to configure settings for your application. Use
        the Website->Asp.Net Configuration option in Visual Studio.
        A full list of settings and comments can be found in 
        machine.config.comments usually located in 
        \Windows\Microsoft.Net\Framework\v2.x\Config 
    -->
    <configuration xmlns="<a href="http://schemas.microsoft.com/.NetConfiguration/v2.0" target="_blank">http://schemas.microsoft.com/.NetConfiguration/v2.0</a>">
     <appSettings/>
     <connectionStrings/>
     <system.web>
      <!-- 
                Set compilation debug="true" to insert debugging 
                symbols into the compiled page. Because this 
                affects performance, set this value to true only 
                during development.
            -->
      <compilation debug="true"/>
      <!--
                The <authentication> section enables configuration 
                of the security authentication mode used by 
                ASP.NET to identify an incoming user. 
            -->
      <authentication mode="Forms"/>
      <!--
                The <customErrors> section enables configuration 
                of what to do if/when an unhandled error occurs 
                during the execution of a request. Specifically, 
                it enables developers to configure html error pages 
                to be displayed in place of a error stack trace.
            <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
                <error statusCode="403" redirect="NoAccess.htm"/>
                <error statusCode="404" redirect="FileNotFound.htm"/>
            </customErrors>
     
     
        -->
      <membership defaultProvider="AccessMembershipProvider" >
       <providers>
        <add name="AccessMembershipProvider" 
         type="AccessMembershipProvider"
         requiresQuestionAndAnswer="true"
         connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Members.mdb;Persist Security Info=False"
         />
       </providers>
      </membership>
     </system.web>
    </configuration>

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 55
    Par défaut
    oui, ca doit etre interessant cela, je cree un oraclememebershipprovider ensuite un oracleroleprovider et puis les specifier dans e fichier config de l application , mais une qestion tt de meme > user et leur role se trouvent sur une BD oracle distante , es que je devrai pointer sur cette bd ou utiliser un connection a une bd local qui se trouve dans AppData. je veut pas creer une BD local.
    aute chose peut on utiliser le aspnet administration tool pour geregr tt cela.

  9. #9
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Salut

    Je prends la conversation en cours et peut être que j'ai lu un peu rapidement.

    D'abords un détail qui me gêne : je ne vois pas pourquoi le fait d'utiliser ORACLE ou n'importe qu'elle autre SGBD serait un souci.
    Lorsque l'on implémnet le MemberShip (c'est son petit nom, au fait) on déclenche l'exécution de aspregsql.exe dans le répertoire du FrameWork.
    Cet utilitaire nous demande une base de données et on peut lui indiquer n'importe quoi, tant que la chaine est valide et que le serveur répond.

    Ensuite, dans le web.config, il suffit de faire des provider qui utlise un ConnectionString valide, rien de trés compliqué là dedans.

    Donc cela sous entends qu'il n'y a pas besoins de redéfinir tout un tas de truc (même si ton boulot est de trés bonne qualité, ADN Master) car le changement de mot de passe, la récupération de LoginStatus et autre amusement du genre ce fait trés bien, SQL Server ou pas.

    Maintenant revenons à ce que crois avoir compris dans l'exposé du problème :
    IcedLand, tu veux mettre en place des rôles pour ton application de manière logique, donc qui vont obéir à des règle de gestion que tu va mettre au point. Corrige moi si je em trompes.

    L'ennui c'est que le RoleManager, à part accorder ou pas, un droit d'accés aux répertoires de ton application, il ne fait rien d'autre. Donc soit tu arrive à organiser ton application avec des répertoires et sous répertoire et tu fais en sorte que les actions de chaque page ne soit accessible que selon des accés au groupe d'utilisateur.
    soit tu te paluche à la main le codage de tes règles de gestion. Pour cela je te conseil d'utiliser le Login du user par le Profile.Username qui est accessible dés que l'utilisateur ce connecte.

    Je vais tenter d'illustrer mon discrous pas trés clair avec mon exemple personnel :
    j'ai mis en palce le MemberShip et j'ai totalement ignoré les roles car mon site ne peut pas être géré de cette manière.
    Mon besoins en règle de gestion est plus orienté sur des droits de : ajout, suppression, modification et visualisation.
    donc j'ai crée des petites fonction ou procédure que j'appelle à l'intérieur de la contruction de chacune des pages en interrogeant une table de ma BDD qui reprend le UserName (VACRHCAR(256)) et le droit correspondant (Boolean). Si le droit est à 1 j'affiche l'émélket de la page, sinon, il ne s'affiche aps et le programme contineu à construire la page.

    Donc je me retroure vavec beaucoup de IF dans mes pages, mais c'est le moyen le plus simple que j'ai trouvé. Par dérrière j'ai fait une petit interface pour gérer tous ces droits.

    Pour l'instant ça donne de bons résultats, mais j'ai pas fini, donc je peux pas dire si c'est vraiment du tonnerre ou pas. Et puis, selon les règle de gestion que l'on veut metrte en place, c'est plus ou moins complqiué à faire. Faut pas perdre de vue que la gestion de la session reste trés importante.

    Espérant avoir pu apporter une pierre à cet édifice, je vous laisse et retourne à la gestion de mes coups de soleil, aie, je morfle.......

  10. #10
    Membre confirmé
    Profil pro
    UN
    Inscrit en
    Février 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Allemagne

    Informations professionnelles :
    Activité : UN
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 92
    Par défaut MemberShip
    Permettez moi de me joindre a vous!
    J'ai deja travailler avec le memberShip, mais sur SQL server,
    Donc je crééé mé tables MemberShip sous le SQL Server 2005, je les fezé migrer vers ma BD sql 2000, 'pour eviter d'avoir deux bases de données differentes', (a l'aide du regsql) puis la creation des roles, des utilisateur devient tré facile a partir de l'anglet configuration asp.net!

    la derniere etapes eté la configuration du web.config, cela ne demande que deux mots clés pour y parvenir!

    Ce travail de memberShip vous permet de profiter des controles de connexion Asp.net sans ecrire une seul ligne de code, ainsi, l'ajout, la modification, la supression de comptes ne vous demanderaient pas d'effor!

    Si cette methode vous interesse, n'ezité pas a me faire signe!

    Votre fidelle ALABAMA SONG

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/03/2009, 16h54
  2. Authentification par formulaire et base de donnée
    Par tortuegenie dans le forum ASP.NET
    Réponses: 5
    Dernier message: 11/06/2008, 20h09
  3. Réponses: 3
    Dernier message: 23/11/2007, 12h50
  4. Réponses: 7
    Dernier message: 22/08/2007, 09h43
  5. [1.1] Authentification par formulaire
    Par kakek dans le forum ASP.NET
    Réponses: 2
    Dernier message: 30/05/2005, 09h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo