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

ASP.NET MVC Discussion :

Problème authentification avec une application Azure [Débutant]


Sujet :

ASP.NET MVC

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mai 2011
    Messages : 27
    Points : 27
    Points
    27
    Par défaut Problème authentification avec une application Azure
    Bonjour,

    Je débute en ASP.net et je cherche à m'authentifier à une application Azure. J'ai suivi un tutoriel pour cela (pour créer un menu "Sign in") mais une erreur apparaît quand je valide mon compte Office 365.

    Mon application Azure :
    Nom : 01.png
Affichages : 232
Taille : 65,6 Ko

    URL : https://localhost:44389/

    Dans le fichier Web.config, j'ai ajouté les 5 lignes de Key :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      <appSettings>
        <add key="webpages:Version" value="3.0.0.0" />
        <add key="webpages:Enabled" value="false" />
        <add key="ClientValidationEnabled" value="true" />
        <add key="UnobtrusiveJavaScriptEnabled" value="true" />
     
        <add key="ida:ClientId" value="7a669d21-xxxx-xxxx-95e1-2df828ce649a" />
        <add key="ida:AADInstance" value="https://login.microsoftonline.com/{0}" />
        <add key="ida:Tenant" value="xxxx.onmicrosoft.com" />
        <add key="ida:PostLogoutRedirectUri" value="https://localhost:44389/" />
        <add key="ida:appKey" value="6tLEGxxxxxxxxTPrrELyB_iMY]Y[Y:" />
     
      </appSettings>
    Dans App_Start, j'ai créé un fichier startup.cs :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
     
    using Microsoft.Owin;
    using Microsoft.Owin.Security;
    using Microsoft.Owin.Security.Cookies;
    using Microsoft.Owin.Security.OpenIdConnect;
    using Owin;
    using System.Configuration;
    using System.Globalization;
    using System.Threading.Tasks;
     
    [assembly: OwinStartup(typeof(AzureADWebApp.App_Start.Startup))]
    namespace AzureADWebApp.App_Start
    {
        public class Startup
        {
            private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
            private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
            private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"];
            private static string postlogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"];
     
            string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
     
            public void Configuration(IAppBuilder app)
            {
                ConfigureAuth(app);
            }
     
            public void ConfigureAuth(IAppBuilder app)
            {
                app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
                app.UseCookieAuthentication(new CookieAuthenticationOptions());
     
                app.UseOpenIdConnectAuthentication(
                    new OpenIdConnectAuthenticationOptions
                    {
                        ClientId = clientId,
                        Authority = authority,
                        PostLogoutRedirectUri = postlogoutRedirectUri,
                        Notifications = new OpenIdConnectAuthenticationNotifications
                        {
                            AuthenticationFailed = context =>
                            {
                                context.HandleResponse();
                                context.Response.Redirect("/Error/message=" + context.Exception.Message);
                                return Task.FromResult(0);
                            }
                        }
                    });
            }
        }
    }
    J'ai créé le fichier _LoginPartial.cshtml :

    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
    20
     
    @if (Request.IsAuthenticated)
    {
        <text>
            <ul class="nav navbar-nav navbar-right">
                <li class="navbar-text">
                    Hello, @User.Identity.Name!
                </li>
                <li>
                    @Html.ActionLink("Sign out", "SignOut", "Account")
                </li>
            </ul>
        </text>
    }
    else
    {
        <ul class="nav navbar-nav navbar-right">
            <li>@Html.ActionLink("Sign in", "SignIn", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" })</li>
        </ul>
    }
    J'ai créé le fichier _Layout.cshtml :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>@ViewBag.Title - My ASP.NET Application</title>
        @Styles.Render("~/Content/css")
        @Scripts.Render("~/bundles/modernizr")
    </head>
    <body>
        <div class="navbar navbar-inverse navbar-fixed-top">
            <div class="container">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    @Html.ActionLink("Application name", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
                </div>
                <div class="navbar-collapse collapse">
                    <ul class="nav navbar-nav">
                        <li>@Html.ActionLink("Home", "Index", "Home")</li>
                        <li>@Html.ActionLink("About", "About", "Home")</li>
                        <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
                        <li>@Html.ActionLink("Users", "Index", "Users")</li>
                    </ul>
                    @Html.Partial("_LoginPartial")
                </div>
            </div>
        </div>
        <div class="container body-content">
            @RenderBody()
            <hr />
            <footer>
                <p>&copy; @DateTime.Now.Year - My ASP.NET Application</p>
            </footer>
        </div>
     
        @Scripts.Render("~/bundles/jquery")
        @Scripts.Render("~/bundles/bootstrap")
        @RenderSection("scripts", required: false)
    </body>
    </html>
    J'ai enfin créé le fichier AccountController.cs :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
     
    using Microsoft.Owin.Security;
    using Microsoft.Owin.Security.Cookies;
    using Microsoft.Owin.Security.OpenIdConnect;
     
    namespace AzureADWebApp.Controllers
    {
        public class AccountController : Controller
        {
            public void SignIn()
            {
                if (!Request.IsAuthenticated)
                {
                    HttpContext.GetOwinContext().Authentication.Challenge(
                        new AuthenticationProperties
                        {
                            RedirectUri = "/"
                        }, OpenIdConnectAuthenticationDefaults.AuthenticationType
                        );
                }
            }
     
            public void SignOut()
            {
                HttpContext.GetOwinContext().Authentication.SignOut(
                    OpenIdConnectAuthenticationDefaults.AuthenticationType,
                    CookieAuthenticationDefaults.AuthenticationType
                    );
            }
        }
    }
    Dans Visual Studio, quand je lance l'application avec le bouton "IIS Express Microsoft edge", j'obtient la page contenant le menu "Sign in" :
    Nom : 02.png
Affichages : 218
Taille : 150,1 Ko

    Mais quand je rentre le compte admin du tenant, j'obtiens :

    Nom : 03.png
Affichages : 233
Taille : 27,6 Ko

    Avez-vous une idée d'où vient l'erreur ? Je me demande s'il faut faire quelque chose au niveau de IIS Express ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Il faudrait en savoir plus sur l'exception. Peux-tu poster le message complet, le code de l'erreur et eventuellement les infos de l'InnerException (s'il y en a une) ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mai 2011
    Messages : 27
    Points : 27
    Points
    27
    Par défaut Message d'erreur
    Je ne sais pas si c'est ce que tu demandes mais voici ce qui apparaît au niveau console des outils de développement de Edge :
    Nom : 01.png
Affichages : 219
Taille : 32,9 Ko

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Il faudrait les details de l'erreur cote serveur (dans le code C#).

    Avec ce que tu as poste cependant j'ai deja le code de l'erreur : AADSTS700054: response_type 'id_token' is not enabled for the application. Pour resoudre ca, tu peux aller dans le portail Azure, puis dans ta Web App. Ensuite tu vas dans le menu "Authentication" (desole je n'ai pas Azure en Francais…). Dans la section "Advanced Settings" tout en bas dans les parametres "Implicit grant", tu dois avoir une checkbox "ID tokens". Assure-toi qu'elle soit bien cochee.

    Tu peux deja tester et nous dire ce que ca donne !



    Aussi pour info, tu peux recuperer un peu plus d'infos sur les identifications qui echouent en suivant les instructions ici : Codes d’erreur du rapport d’activité de connexion. Cette page contient egalement les codes d'erreur les plus courants.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mai 2011
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    C'était bien dans mon application Azure que se situait le problème. J'ai coché "jeton d'ID" comme tu me l'as expliqué et maintenant ça fonctionne.

    Merci beaucoup

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/12/2008, 12h16
  2. [Windev] problème avec une application
    Par cbindep dans le forum WinDev
    Réponses: 1
    Dernier message: 24/03/2008, 16h27
  3. problème d'autorisation avec une application
    Par Sendo dans le forum Weblogic
    Réponses: 1
    Dernier message: 17/03/2008, 11h24
  4. Réponses: 2
    Dernier message: 04/03/2008, 22h09
  5. [JBOSS] [Struts] Problème avec une application
    Par Tiercel dans le forum Wildfly/JBoss
    Réponses: 5
    Dernier message: 13/07/2004, 13h50

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