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

Silverlight Discussion :

RequiresAuthentication acces denied alors que je suis authentifié


Sujet :

Silverlight

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut RequiresAuthentication acces denied alors que je suis authentifié
    Bonjour,

    J'utilise dans une business application l'authentification standard.

    J'essaie de protéger mes services en utilisant [RequiresAuthentication] devant certaines appels RIA.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     [RequiresAuthentication]
            public IQueryable<JUserTbl> GetJUsersOrderedByName()
            {
                return from myJUser in this.ObjectContext.JUserTbl.Include("aspnet_Users").Include("SocieteTbl") orderby myJUser.JUserNom select myJUser;
            }
    Le problème, c'est que de temps en temps ça fonctionne et puis soudainement, je reçois un message du type "Retrievieng data failed ...access denied".

    A noter qu'en développement, mon VS2010 va chercher les données sur un serveur hébergé à l'extérieur et je n'ai pas ce problème. C'est une fois mon application publiée (qui utilise le même SQL Server qu'en développement que je reçois le message)

    Toutes les idées sont les bienvenues.

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 82
    Points : 107
    Points
    107
    Par défaut
    Bonjour Golzinne,

    Comment catch tu ton erreur ?
    Est-elle "complète" ?

    En WCF les erreurs ne sont pas toujours très verbeuse, est tu sur que l'erreur que tu as n'est pas une version allégé pour le client, qui ne contient pas toute les informations d'erreur du serveur ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Bonjour Vinchenzo et merci pour ta réponse.

    Voici comment je fais un appel RIA:
    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
     
            #region "LoadJUsers"
            private void LoadJUsers()
            {
                JUsers = new ObservableCollection<JUserTbl>();
                _ctx.JUserTbls.Clear();
                LoadOperation<JUserTbl> loadOpJUsers = this._ctx.Load(this._ctx.GetJUsersNotHidedOrderedByNameQuery(), OnLoadJUsersCompleted, null);
     
            }
            private void OnLoadJUsersCompleted(LoadOperation<JUserTbl> lo)
            {
                if (lo.HasError)
                {
                    MessageBox.Show(string.Format("Retrieving employés failed: {0}", lo.Error.Message));
                    lo.MarkErrorAsHandled();
                }
                else
                {
    ....}
    et je reçois un message qui commence bien sûr par
    Retrieving employés failed:
    se poursuit par
    Load operation failed for query 'JUsersNotHidedOrderedByName'. Access to operation 'JUsersNotHidedOrderedByName' was denied.
    Donc le seul message que je reçois est "Access denied".

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 82
    Points : 107
    Points
    107
    Par défaut
    Hum, on peut estimer que le RequestAuthentification fonctionnes, en vue du retour.

    As tu le "CustomError = false" dans ton web.config ?

    Est tu déployé en dédié ?
    La configuration d'authentification dans IIS est sur Windows ?

    Ce serait bizarre de perdre la session sans raison, donc il y a un loup.

    As tu un contrat pour gérer les erreurs (côté WCF) ?
    Je n'ai plus la syntaxe en tête, cela te permet de personnaliser tes erreurs et d'avoir plus de détails sur celles ci.

    Tes données sur myJUser sont static ?
    Que ce passe-t'il si tu try ta requete Linq, et que tu catch un return null ?

    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
     
    [RequiresAuthentication]
    public IQueryable<JUserTbl> GetJUsersOrderedByName()
    {
        try
        {
            return from myJUser in this.ObjectContext.JUserTbl
                    .Include("aspnet_Users")
                    .Include("SocieteTbl") 
                    orderby myJUser.JUserNom 
                    select myJUser;
        }
        catch
        {
            return null;
        }
    }

    Si ça marche en local et pas à distance, on peut aussi estimer qu'il manque une référence / dépendance / dll.

    Je balance tout ce qui me viens hein

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Bon ben plus ou moins dans l'ordre:

    Je n'ai pas de CustomError =false dans webConfig ( ni à true d'ailleurs car je ne l'ai nulle part dans mon appli).

    Je suis hébergé sur un serveur mutualisé Windows SqlServer.

    La configuration d'authentification dans IIS est sur Windows ?
    Ben je pense que oui, c'est pas toujours le cas ?

    As tu un contrat pour gérer les erreurs (côté WCF) ?
    Non, pas de contrat mais le détail je l'ai, si je mets [requiresAutentication] il me dit après un certain temps "Acces Denied", donc l'erreur est claire.
    Par contre j'ai trouvé qqun qui avait un problème similaire et il était question d'un cookie qui devenait trop long (ce serait cohérent avec le fait qu'il passe une fois, deux fois, puis soudainement "access denied"). En fait, je peux naviguer d'une page à l'autre pendant un certain temps (chaque page exécute des requêtes qui sont protégées par [requiresAutentication], et puis je reçois un message, dès ce moment, à chaque changement de page, je reçois le message.

    Je me demande aussi si le fait de faire une requête sur une table avec [requiresAutentication] n'entre pas en conflit avec d'autres requêtes sur cette même table qui n'ont pas le [requiresAutentication].

    Tes données sur myJUser sont static ?
    C'est vrai qu'une fois logué, je stocke certaines infos sur mon utilisateur (ASP) en static, mais dans la la requête incriminée (ou les autres), il n'y a rien de static.

    Le Try Catch ramène exactement la même erreur. Comme l'Access is denied, je suppose qu'il ne passe même pas dedans.

    Pour les DLL j'ai un doute qu'il en manque, puisque pendant un moment ça fonctionne.

    Merci en tous cas pour ton aide

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 82
    Points : 107
    Points
    107
    Par défaut
    Ah, donc tu perd ta session "sans raison", à cause du cookie qui expires.
    Et donc quel est la durée de vie de ton cookie ?
    Tu as le problème sur 1 seul navigateur ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    le problème, c'est que je ne sais pas ou trouver mon cookie ni gérer la manière dont on le construit

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 82
    Points : 107
    Points
    107
    Par défaut
    Ah, les cookies c'est vraiment pas mon truc...
    c'est un peu comme je javascript, vestige d'un autre temps

    Alors, à ta place, je commencerai par télécharger CCleaner. D'autres logiciels font surement mieux, mais j'utilise ce que je connais.
    Dans CCleaner, onglet options, tu aura un bouton "Cookies" qui listera tout tes cookies.

    Supprime les tous, ouvre une session sur ton logiciel, et regarde quel cookie ré apparait dans la liste.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Bon ben j'ai fini par trouver par hasard ce qui ne fonctionnait pas.

    En fait, mon application tournait sur un serveur mutualisé qui a une allocated ram de 100 MB. Comme mon application à besoin d'environ 160 MB, mon application partait en "recyclage" et perdait son authentification.

    Pour résoudre ce problème, il faut soit stocker l'authentification dans SQL Serveur (plutôt qu'en mémoire), ou, encore plus facile, changer de provider.
    C'est ce que j'ai fait et je n'ai plus le problème.

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

Discussions similaires

  1. [2012] SOS_SCHEDULER_YIELD alors que je suis seul
    Par Donpi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/05/2013, 10h19
  2. Réponses: 2
    Dernier message: 10/02/2010, 20h15
  3. permission denied alors que je suis en root?
    Par Balbuzard dans le forum Administration système
    Réponses: 7
    Dernier message: 01/04/2009, 05h28
  4. Réponses: 4
    Dernier message: 13/08/2005, 10h20
  5. RecordCount = -1 alors que SELECT = OK
    Par Dionyzos dans le forum Bases de données
    Réponses: 5
    Dernier message: 01/03/2005, 14h27

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