8
votes

SerializationException sur 'Customentity' lorsque l'utilisateur est refusé dans ASP.NET

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.

Mon exception est exactement la même que sur le lien ci-dessus xxx

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?

meilleures salutations,

Stephane Erbrech


8 commentaires

@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 Exception en l'attrapant, puis affichez le résultat de ex.tostring () .


il suffit d'ajouter l'exception que je reçois, si cela aide


@Serbrech: Merci. Votre cw.customaTuthentication.Cwidentity sérialisable? Avez-vous testé qu'il peut être sérialisé à l'aide du binarinformatter ?


@Serbrech: Désolé d'être une douleur. Je vois que vous ne pouvez pas attraper cette exception afin d'afficher ex.tostring () . 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» ...


5 Réponses :


8
votes

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.

--- est-ce qu'un bogue dans le serveur Web léger implémenté dans Visual Studio, alors? ---

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.


1 commentaires

Quelqu'un a compris pourquoi cela se produit?



2
votes

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.

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.


0 commentaires

4
votes

Cela pourrait ne pas être la bonne réponse, mais j'avais aussi ce problème, mais je l'ai réparé.

À l'origine, je viens d'avoir une classe personnalisée qui héritée généraccidité (ou implompé isidité ). Quand j'ai enfin créé une classe personnalisée qui héritée genericprincipal (ou implompé iprincipal ) alors tout a fonctionné?

Mon CustomPrincipal La classe n'a rien fait mais hérité de génériqueprincipal et avait un constructeur qui a appelé le constructeur de base.

À la fois le personnaliséprimipipal et Les classes Les classes n'impliquent aucun Serialization ou iserialisable trucs. Encore une fois, mes cours étaient tous très basiques.


2 commentaires

Donc, la solution était d'ajouter [sérialisable] ?


: 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 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 classes pour contenir uniquement des cordes ou des types intenses ou primitifs.



6
votes

Dans mon cas, je devais simplement hériter de MarshalbyRefObject . xxx


0 commentaires

1
votes

Ceci peut également être résolu en ajoutant l'assemblage contenant votre identité personnalisée au GAC sur votre machine de développement.


0 commentaires