J'essaie d'implémenter l'authentification ASP.NET et l'autorisation sur notre base de données existante. Nous avons un site Web appelant un service Web pour aller chercher ses données. Pour utiliser le service Web, j'ai besoin de fournir le nom d'utilisateur et le mot de passe. Sachant que j'ai décidé d'implémenter l'entrée et l'icepipipal pour stocker le mot de passe crypté et pouvoir lui fournir des appels WebService. À l'avenir, nous voudrions peut-être utiliser plus de la sécurité intégrée d'ASP.NET, donc je mettez en œuvre l'adhésion et le fournisseur de rôle et remplacer simplement ce dont j'ai besoin (validateur et gettroles) Cependant, après avoir validé l'utilisateur grâce à la mise en œuvre du fournisseur d'adhésion, je fixe toujours mon propre personnalisé dans le contexte.User pour pouvoir récupérer son mot de passe en cas de besoin.
Cela fonctionne parfaitement tant que l'utilisateur est autorisé à visiter le page. Mais lorsque l'utilisateur est refusé, au lieu de lancer une AccessEdDeniedException, le cadre jette une exception de sérialisation sur ma personnalisation. J'ai trouvé un comportement parfaitement similaire avec plus de détails décrits sur ce lien , mais aucune réponse n'a été postée. p>
Mon exception est exactement la même que sur le lien ci-dessus p> est-il correct d'utiliser l'adhésion et l'isidité personnalisée et iprincipal en même temps?
Sinon, où ajouter des propriétés telles que le mot de passe ou autre utilisateurData si j'utilise les fournisseurs d'adhésion et de rôle? P> meilleures salutations, p> Stephane Erbrech P> P>
5 Réponses :
Après plus de tests supplémentaires, selon ce que le lien que j'ai posté a déclaré, il semble que cette erreur ne se produise que lorsque j'exécute en mode de débogage de Visual Studio. Si je définis le projet pour exécuter IIS, l'erreur est partie et que la mise en œuvre de la sécurité fonctionne comme prévu. p>
--- est-ce qu'un bogue dans le serveur Web léger implémenté dans Visual Studio, alors? --- P>
EDIT: Vous pouvez accéder aux propriétés de votre projet Web, accédez à l'onglet "Web" et vérifiez "Utiliser le serveur IIS local". Toutefois, cela vous obligera à exécuter Visual Studio en tant qu'administrateur et à installer IIS sur votre machine, de sorte que VS peut créer le répertoire virtuel dans le serveur IIS local lorsqu'il charge le projet. P>
Quelqu'un a compris pourquoi cela se produit?
Vous pouvez accéder aux propriétés de votre projet Web, accédez à l'onglet "Web" et à vérifier "Utiliser le serveur IIS local". Toutefois, cela vous obligera à exécuter Visual Studio en tant qu'administrateur et à installer IIS sur votre machine, de sorte que VS peut créer le répertoire virtuel dans le serveur IIS local lorsqu'il charge le projet. P> blockQuote>
J'ai eu le même problème lorsque j'essaie d'exécuter l'application Web à l'aide de la personnalisation. Afin de définir le projet pour utiliser votre IIS dans VS 2008, vous devrez définir l'URL à votre pool d'applications dans votre projet d'application Web. p>
Cela pourrait ne pas être la bonne réponse, mais j'avais aussi ce problème, mais je l'ai réparé. p>
À l'origine, je viens d'avoir une classe personnalisée qui héritée Mon À la fois le généraccidité code> (ou implompé
isidité code>). Quand j'ai enfin créé une classe personnalisée qui héritée
genericprincipal code> (ou implompé
iprincipal code>) alors tout a fonctionné? P>
CustomPrincipal Code> La classe n'a rien fait mais hérité de
génériqueprincipal Code> et avait un constructeur qui a appelé le constructeur de base. P>
personnaliséprimipipal code> et
Les classes code> Les classes n'impliquent aucun
Serialization code> ou
iserialisable code> trucs. Encore une fois, mes cours étaient tous très basiques. P>
Donc, la solution était d'ajouter [sérialisable] code>?
: Blush: Je ne me souviens pas maintenant - c'était il y a quelque temps. Cela dépend de ce que vous mettez à l'intérieur de votre Customprincipal code> ou (plus d'exemple) Votre "personnalité". Si vous économisez une classe personnalisée là-bas, alors oui .. Je pense que je devais. Je suis allé à décaper mon
CustomIdentity code> classes pour contenir uniquement des cordes ou des types intenses ou primitifs.
Dans mon cas, je devais simplement hériter de MarshalbyRefObject code>.
Ceci peut également être résolu en ajoutant l'assemblage contenant votre identité personnalisée au GAC sur votre machine de développement. P>
@Serbrech: Si vous souhaitez relire votre question, vous remarquerez sûrement que vous n'avez pas posté l'exception. En fait, prenez le temps de poster la complète i> Exception en l'attrapant, puis affichez le résultat de
ex.tostring () code>.
il suffit d'ajouter l'exception que je reçois, si cela aide
@Serbrech: Merci. Votre
cw.customaTuthentication.Cwidentity code> sérialisable? Avez-vous testé qu'il peut être sérialisé à l'aide du
binarinformatter code>?
@Serbrech: Désolé d'être une douleur. Je vois que vous ne pouvez pas attraper cette exception afin d'afficher
ex.tostring () code>. Cependant, pourriez-vous regarder dans le journal des événements du serveur pour voir s'il existe des événements d'avertissement à partir de la source d'événement "ASP.NET"? Certains d'entre eux peuvent inclure toute l'exception ou d'autres informations utiles.
Après plus d'autres tests, selon ce que le lien que j'ai posté a déclaré, il semble que cette erreur ne se produise que lorsque j'exécute en mode de débogage à partir de Visual Studio. Si je définis le projet pour exécuter IIS, l'erreur est partie et que la mise en œuvre de la sécurité fonctionne comme prévu. Est-ce un bogue dans le serveur Web léger mis en œuvre dans Visual Studio?
J'ai rencontré le même problème et j'ai trouvé beaucoup d'informations utiles (et de solutions) ici .
Vous pouvez réellement aller dans les propriétés de votre projet Web, consulter l'onglet Web et vérifier "Utiliser le serveur IIS local". Cela nécessitera d'exécuter Visual Studio en tant qu'administrateur afin que VS puisse créer le répertoire virtuel lorsqu'il charge le projet, Mais cela résout le problème.
En effet, mais cela prend un peu plus de temps pour commencer, j'essaie d'atteindre le principe «Get Source et Run» ...