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 Discussion :

OData endpoint: vérifier le header sur le service document


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut OData endpoint: vérifier le header sur le service document
    Bonjour

    J'ai créé un service web qui est un OData endpoint.
    Il fonctionne très bien MAIS, j'ai une contrainte: il faut que pour chaque requête, l'API vérifie la presence d'une clé dans le request header.
    J'ai créé une method simple pour ce faire mais cela ne fonctionne pas pour la page service document à savoir ce que l'on obtient lorsqu'on entre l'URL https://SITE/api/v1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {"@odata.context":"http://SITE/api/v1/$metadata","value":[{"name":"trucs","kind":"EntitySet","url":"trucs"},{"name":"choses","kind":"EntitySet","url":"choses"}]}
    Avez-vous une idée pour ce faire?
    Merci d'avance de votre aide,

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 964
    Par défaut
    Tu peux créer une classe héritant de DelegatingHandler dans laquelle tu surcharges le SendAsync.
    Dans le SendAsync , tu vérifie la présence de ton header et tu renvoie une réponse Unauthorized en cas d'absence.

    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
    internal class MyMessageHandler : DelegatingHandler
        {
            protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
            {
     
                if (request?.Headers.Authorization != null)
                {
     
                }
                else // On a pas de Headers d'authentification
                {
                    HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.Unauthorized);
     
                    httpResponseMessage.Headers.WwwAuthenticate.Add(new AuthenticationHeaderValue("Bearer"));
                    httpResponseMessage.ReasonPhrase = "Authorization header not provided";
     
                    return Task<HttpResponseMessage>.Factory.StartNew(() => httpResponseMessage);
                }
     
     
                 return base.SendAsync(request, cancellationToken);
            }
        }
    Il suffit ensuite de rajouter le message Handler à la config global
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    config.MapHttpAttributeRoutes();
    config.MessageHandlers.Add(new MyMessageHandler());

  3. #3
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut
    Bonjour Popo

    Je te remercie de ta réponse mais j'y ai répondu de manière différente finalement.
    J'ai créé ce module et j'ai finalement la sécurité que je recherchais.
    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
     
    using System;
    using System.Linq;
    using System.Web;
     
    namespace Api.Modules
    {
        public class AuthorizationModule : IHttpModule
        {
            public void Dispose(){}
     
            private void Context_Authorization(object sender, EventArgs e)
            {
                HttpApplication application = (HttpApplication)sender;
                if (!IsAuthorized(application.Context))
                {
                    application.Context.Response.Status = "403 Forbidden";
                    application.Context.Response.StatusCode = 403;
                    application.CompleteRequest();
                }
            }
     
            public bool IsAuthorized(HttpContext context)
            {
                if (!HttpContext.Current.Request.Headers.AllKeys.Contains("Authorization"))
                    return false;
     
                string authHeader = HttpContext.Current.Request.Headers["Authorization"];
     
                if (!authHeader.Equals(Properties.Resources.Authorization_Key))
                {
                    return false;
                }
                return true;
            }
     
     
            public void Init(HttpApplication context)
            {
                context.AuthenticateRequest += new EventHandler(Context_Authorization);
            }
        }
    }
    Cela étant, je te plussoie volontiers ;-)

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

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

Discussions similaires

  1. [WD-2010] Modification d'un header sur tout un document
    Par sugarcoma dans le forum VBA Word
    Réponses: 4
    Dernier message: 07/11/2011, 11h50
  2. Réponses: 4
    Dernier message: 13/08/2007, 23h09
  3. Suggestion sur les services offertent sur un site intranet!
    Par ghyosmik dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 30/01/2006, 16h14
  4. Question sur les services windows
    Par bilb0t dans le forum Windows
    Réponses: 8
    Dernier message: 09/11/2005, 15h31
  5. [Plugin][Eclipse3] mise a jour de header sur fichier .java
    Par spegase dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 05/05/2005, 20h06

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