Normaal gesproken slaan we bij toegangsrechtbeheer de basisinformatie van de gebruiker op na de correcte login in de sessie, en krijgen we deze elke keer dat de gebruiker in de toekomst pagina- of interfacegegevens aanvraagt
Sessie om te zien en te vergelijken of hij is ingelogd en of hij toegang heeft tot de huidige pagina.
Het principe van Session is om een SessionID aan de serverzijde te genereren die overeenkomt met de opgeslagen gebruikersgegevens, en de SessionID wordt opgeslagen in een cookie, en de client draagt deze bij elke keer dat het wordt gevraagd mee
Cookie, vindt de server de gegevens die aan de serverzijde zijn opgeslagen op basis van de sessie-ID in de cookie.
FormsAuthentication wordt door Microsoft aangeboden voor ons ontwikkelaars om te gebruiken voor authenticatie. Door deze authenticatie kunnen we de gebruikersnaam en sommige gebruikersgegevens opslaan in cookies,
Basisauthenticatie van identiteit en rol kan eenvoudig worden bereikt via basisinstellingen voor de conditie.
Het effect dat hier bereikt wordt, is het implementeren van rolgebaseerde toegangscontrole met behulp van het door het systeem geleverde Authorize zonder lidmaatschap.
1. Maak een ticket aan
Nadat de gebruiker is ingelogd, worden de gebruikers-ID en de bijbehorende rol (voor meerdere rollen, gescheiden) opgeslagen in het ticket.
Versleutel het ticket met FormsAuthentication.Encrypt.
Sla het versleutelde ticket op in de Response-cookie (de client js hoeft deze cookie niet te lezen, dus het is het beste om HttpOnly=True in te stellen om browseraanvallen te voorkomen die cookies stelen en vervalsen). Op deze manier kun je het de volgende keer lezen via de Verzoekcookie.
Een eenvoudige demo is als volgt:
bool isPersistent, //of to Persist (indien nodig ingesteld, als ingesteld op persistence, moet de Expire-instelling van de cookie worden ingesteld bij het verzenden van een cookie)
De zesde parameter van FormsAuthenticationTicket slaat de userData van type string op, waarbij de rol-ID van de huidige gebruiker wordt opgeslagen, gescheiden door een komma.
Bij het inloggen met een gebruikersnaam "test" verschijnt er een logcookie op de client
2. Verkrijg certificeringsinformatie
Na het inloggen kunnen we op de contentpagina de uname-informatie verkrijgen via de User.Identity.Name van het huidige verzoek, of we kunnen de cookie in het verzoek ontsleutelen om het ticket te verkrijgen, en vervolgens de uname en userData (dat wil zeggen, de eerder opgeslagen rol ID-informatie) daarvan ophalen.
3. Toestemmingscontrole realiseren via annotatieattributen
Configureer Formulierauthenticatie en Rolbeheer Inschakelen in web.config
Wanneer we annotatie-eigenschappen toevoegen aan Controller en Actie, waar halen we dan de set Role vandaan? Omdat we de lidmaatschapsgebaseerde authenticatie niet gebruiken, gaan we ook een aangepaste RoleProvider aanmaken. De naam is CustomRoleProvider, die is overgenomen van RoleProvider. Hier is het aanmaken van je eigen CustomRoleProvider.cs-bestand in de Helper-map onder MVCApp.
Er zijn veel abstracte methoden in RoleProvider, en we implementeren alleen de GetRolesForUser-methode om gebruikersrollen te verkrijgen. De gebruikersrol hier kan worden bevraagd vanuit de database op basis van de verkregen gebruikers-ID, of die opgeslagen in de sessie of in de cookie. Hier heb ik de rol al opgeslagen in de userData van het ticket, dus laten we die uit het ticket halen.
Voeg indien nodig annotatieattributen toe aan de gevalideerde Controller of Actie; bijvoorbeeld, deze Actie staat alleen toegang toe met een RoleID van 1, 2 of 3, en de huidige RoleID van de gebruiker is (7, 1, 8), wat betekent dat de gebruiker toegang heeft.
P.S. :1. Het ticket wordt opgeslagen op het vervaldatum van de cookie, en als de browser gesloten is om het huidige ticket te onthouden, kunnen de parameters worden ingesteld wanneer het FormsAuthenticationTicket wordt geïnstantieerd.
2. De acquisitie van Role kan direct uit de database worden gelezen zonder dat deze wordt opgeslagen in de userData van het ticket, en de userData kan andere informatie opslaan.
3. Als je de Controller- en Actie-Toegestane Toegangsrollen flexibel wilt configureren, kun je de OnAuthorization-methode aanpassen in de AuthorizeAttribut-override, waarin de methode wordt gebruikt
Lees de rol-ID die op de huidige pagina is toegestaan en controleer deze volgens de RoleID van de huidige gebruiker. Op deze manier wordt de flexibele configuratie van de rol gerealiseerd.
4. De informatie in het ticket wordt uiteindelijk opgeslagen in de cookie, en de beveiliging blijft aan jou zelf liggen; persoonlijk vind ik het beter om de UserID en RoleID in de sessie op te slaan.
|