OVH Cloud OVH Cloud

Architecture de projet

7 réponses
Avatar
thibaut
Bonjour,

j'ai une petite question d'architecture :
je voudrais cr=E9er un projet aspnet avec plusieurs pages=20
d'entr=E9e possibles : admin.aspx, default.aspx.

Je voudrais =E9galement utiliser l'autentification=20
<authentication mode=3D"Forms"> pour g=E9rer facilement les=20
sessions.

Quelles solutions sont possibles ?

Merci de votre aide.

7 réponses

Avatar
Guillaume Davion
L'idéal est de créer plusieurs répertoires avec plusieurs fichiers
web.config.

Tu pourrais par exemple avoir l'accès autorisé à tous pour le niveau
racine, avec tes deux pages d'entré, et un sous-répertoire avec un
web.config interdisant l'accès aux anonymes.

Le défaut est que de base, la page de redirection (celle où tu te
fais envoyer quand tu tente d'accéder à une ressource interdite) est
unique.
Avatar
Fred
Bonsoir,
S'il s'agit d'une seule application, mais qu'au sein de cette application
les différentes pages ou répertoires doivent avoir des autorisations
différentes, je pense que tu peux personnaliser ton web.config en ajoutant
des balises <location>.
Pour l'utilisation de l'authentification Forms, il te faudra une page de
login qui attribuera des roles aux visiteurs.
L'accès aux différentes pages étant ensuite géré de manière transparente
grâce aux balises <location>
Si tu ne trouves pas, demain, je pourrai éventuellement de passer un exemple
que je n'ai pas ici.
Avatar
VANNESTE Xavier
tu as un article a cette url
http://www.bedotnet.com/default.aspx?PageContentID=5&tabidH
qui expliquera comment faire avec des exemples
"thibaut" a écrit dans le message de
news: 120b01c52f8c$a894ad10$
Bonjour,

j'ai une petite question d'architecture :
je voudrais créer un projet aspnet avec plusieurs pages
d'entrée possibles : admin.aspx, default.aspx.

Je voudrais également utiliser l'autentification
<authentication mode="Forms"> pour gérer facilement les
sessions.

Quelles solutions sont possibles ?

Merci de votre aide.
Avatar
thibaut
Merci pour vos réponses,

j'ai un peu de mal :-(

j'ai créé un projet avec un web.config contenant
<authentication mode="None" /> et une webform
puis 2 sous-répertoires user et manager contenant des
web.config
<authentication mode="Forms">
<forms name=".login.users"
loginUrl="default.aspx" protection="All" timeout="180"
slidingExpiration="true" path="/"></forms>
</authentication>
et
<authentication mode="Forms">
<forms name=".login.manager"
loginUrl="default.aspx" protection="All" timeout="180"
slidingExpiration="true" path="/"></forms>
</authentication>

le projet compile, l'acces au 1er niveau est bon mais
j'obtiens une erreur d'execution en accèdant aux sous-
répertoires.
si le sous-répertoire n'est pas virtuel :
Il est erroné d'utiliser une section inscrite en tant que
allowDefinition='MachineToApplication' au-delà du niveau
de l'application. Cette erreur peut être causée par un
répertoire virtuel qui n'est pas configuré comme une
application dans IIS.

si le sous-répertoire est virtuel :
Impossible de charger le type 'login.users._default'.
<%@ Page language="c#" Codebehind="default.aspx.cs"
AutoEventWireup="false" Inherits="login.users._default" %>


Fred, comme tu me l'as proposé, pourrais-tu m'envoyer un
petit exemple stp.

(pour l'envoi, supprimer le
NOSPAM...)

merci d'avance,
thibaut


-----Message d'origine-----
Bonjour,

j'ai une petite question d'architecture :
je voudrais créer un projet aspnet avec plusieurs pages
d'entrée possibles : admin.aspx, default.aspx.

Je voudrais également utiliser l'autentification
<authentication mode="Forms"> pour gérer facilement les
sessions.

Quelles solutions sont possibles ?

Merci de votre aide.
.



Avatar
Fred
Dans son message 18b001c53127$bb133190$
thibaut nous dit :


Fred, comme tu me l'as proposé, pourrais-tu m'envoyer un
petit exemple stp.



Oups, je reviens du boulot pour un long week-end !
J'essaie de mémoire (il y aura peut-être des erreurs de syntaxe !)

Je reprends ton organisation : un répertoire d'application (donc logiquement
un seul web.config), deux sous-répertoires pour lesquels tu veux gérer tes
accès. Pour ma part je n'utiliserai qu'une page de login, dans laquelle tu
vas attribuer le role user ou manager en fonction du compte.

Tu gardes un web.config de base :
<authentication mode="Forms">
<forms name=".ASPAUTH" loginUrl="default.aspx" protection="All"
timeout="180" slidingExpiration="true" path="/"></forms>
</authentication>
<authorization>
<allow users="?"/>
</authorization>

Tout cela se trouvant dans l'élément <system.web>

Maintenant, en dessous de </system.web> tu ajoutes
<location path="users">
<system.web>
<authorization>
<allow roles="users" />
</authorization>
</system.web>
</location>

<location path="manager">
<system.web>
<authorization>
<allow roles="manager" />
</authorization>
</system.web>
</location>

Il faut peut-être ajouter des deny (?). Dans path, tu spécifies un chemin ou
bien le nom d'une page.
Restent :
- la partie création du cookie dans la page de login (default) qui va te
permettre de spécifier les différents roles.
- l'extraction des rôles de ce cookie dans l'événement Authenticate_Request
du global.asax pour créer un GenericPrincipal (c'est grâce à lui que les
règles du web.config pourront être appliquée)
Pour ce faire je te conseille de rechercher et télécharger chez microsoft,
le document SecNet.pdf dans le cas tu trouveras des exemples de code pour
cela (cela se trouve aussi en ligne dans la MSDN rubrique sécurité des
applications ASP .NET)

Mais je crois que tout ceci (le paragraphe précédent) se fait
automatiquement si tu crées tes comptes utilisateurs et leur rôle dans le
web.config (à vérifier).
J'avais dû développer tout cela car mon authentification s'adossait à une
base de données, avec plusieurs applications (dont une dédiée au login) et
j'avais besoin de la notion de groupe en plus des rôles.

Bon courage.


--
Fred
Avatar
thibaut
merci de ton aide.
j'ai égalemenent une base de données pour gérer
l'identification.
je vais essayer de me débrouiller avec tes précieuses
infos.

passe un bon we de paques !

-----Message d'origine-----


Dans son message 18b001c53127$bb133190$
thibaut nous dit :


Fred, comme tu me l'as proposé, pourrais-tu m'envoyer




un
petit exemple stp.



Oups, je reviens du boulot pour un long week-end !
J'essaie de mémoire (il y aura peut-être des erreurs de


syntaxe !)

Je reprends ton organisation : un répertoire


d'application (donc logiquement
un seul web.config), deux sous-répertoires pour lesquels


tu veux gérer tes
accès. Pour ma part je n'utiliserai qu'une page de


login, dans laquelle tu
vas attribuer le role user ou manager en fonction du


compte.

Tu gardes un web.config de base :
<authentication mode="Forms">
<forms name=".ASPAUTH" loginUrl="default.aspx"


protection="All"
timeout="180" slidingExpiration="true" path="/"></forms>
</authentication>
<authorization>
<allow users="?"/>
</authorization>

Tout cela se trouvant dans l'élément <system.web>

Maintenant, en dessous de </system.web> tu ajoutes
<location path="users">
<system.web>
<authorization>
<allow roles="users" />
</authorization>
</system.web>
</location>

<location path="manager">
<system.web>
<authorization>
<allow roles="manager" />
</authorization>
</system.web>
</location>

Il faut peut-être ajouter des deny (?). Dans path, tu


spécifies un chemin ou
bien le nom d'une page.
Restent :
- la partie création du cookie dans la page de login


(default) qui va te
permettre de spécifier les différents roles.
- l'extraction des rôles de ce cookie dans l'événement


Authenticate_Request
du global.asax pour créer un GenericPrincipal (c'est


grâce à lui que les
règles du web.config pourront être appliquée)
Pour ce faire je te conseille de rechercher et


télécharger chez microsoft,
le document SecNet.pdf dans le cas tu trouveras des


exemples de code pour
cela (cela se trouve aussi en ligne dans la MSDN


rubrique sécurité des
applications ASP .NET)

Mais je crois que tout ceci (le paragraphe précédent) se


fait
automatiquement si tu crées tes comptes utilisateurs et


leur rôle dans le
web.config (à vérifier).
J'avais dû développer tout cela car mon


authentification s'adossait à une
base de données, avec plusieurs applications (dont une


dédiée au login) et
j'avais besoin de la notion de groupe en plus des rôles.

Bon courage.


--
Fred





.



Avatar
Fred
Dans son message 199a01c53148$2efac580$
thibaut nous dit :

merci de ton aide.
j'ai égalemenent une base de données pour gérer
l'identification.



Dans ce cas le document SecNet devrait t'apporter une aide précieuse.
J'avais oublié de mentionner un point important justifiant la programmation
du global.asax, c'est que j'utilise des cookies cryptés, et les regénère à
chaque demande.
Ce sont ces procédés qui sont exposés dans le SecNet. Si tu considères que
c'est superflu tu peux élaguer.

je vais essayer de me débrouiller avec tes précieuses
infos.

passe un bon we de paques !



Merci, à toi de même !




--
Fred