Fonctionnalités communes dans ASP.NET Core 2.1 WebApi: authentification avec un JWT

Introduction

L’authentification et l’autorisation sont nécessaires pour limiter l’accès aux données personnalisées et / ou sensibles.
Une technique plus sûre que la protection avec des cookies consiste à utiliser des jetons, fournis par un fournisseur de jeton de votre choix.
Dans cet article, nous allons parler des JWT avec OpenID Connect.

OpenID Connect 1.0 est une simple couche d’identité au dessus du protocole OAuth 2.0. Il permet aux clients de vérifier l’identité de l’utilisateur final en fonction de l’authentification effectuée par un serveur d’autorisations, ainsi que d’obtenir des informations de profil de base sur l’utilisateur final de manière interopérable et de type REST. OpenID Connect permet aux clients de tous types, y compris les clients Web, mobiles et JavaScript, de demander et de recevoir des informations sur les sessions authentifiées et les utilisateurs finaux. La suite de spécifications est extensible, permettant aux participants d’utiliser des fonctionnalités optionnelles telles que le cryptage des données d’identité, la découverte des fournisseurs OpenID et la gestion de session, lorsque cela leur semble judicieux.

Pour plus d’informations sur la configuration d’un fournisseur Open Id Connect, vous pouvez consulter cet exemple avec Azure AD ici.

Configurer le Startup.cs

Etape 1: Télécharger le package Microsoft.AspNetCore.Authentication.JwtBearer Nuget

PM> Install-Package Microsoft.AspNetCore.Authentication.JwtBearer -Version 2.1.2

Etape 2: Paramétrer le schéma d’authentification avec un JWT

public void ConfigureServices(IServiceCollection services)
{
   // Authentication
   services.AddAuthentication(options =>
   {
      options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
      options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
   });
}

Etape 3: Configurer le fournisseur de jeton JWT

public void ConfigureServices(IServiceCollection services)
{
   // Authentication
   services.AddAuthentication(options =>    {
      options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
      options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
   }).AddJwtBearer(options =>
   {
      options.Authority = "provider end point";
      options.Audience = "application id or uri as identifier";
      options.TokenValidationParameters.ValidateLifetime = true;
      options.TokenValidationParameters.ClockSkew = TimeSpan.FromMinutes(5);
   });
}

Audience représente le destinataire prévu du jeton entrant ou de la ressource à laquelle le jeton accorde l’accès. Si la valeur spécifiée dans ce paramètre ne correspond pas au paramètre ‘aud’ dans le jeton, celui-ci sera rejeté car il était destiné à être utilisé pour accéder à une ressource différente. Notez que différents fournisseurs de jetons de sécurité ont des comportements différents concernant ce qui est utilisé comme revendication ‘aud’ (certains utilisent l’URI d’une ressource à laquelle un utilisateur souhaite accéder, d’autres utilisent des noms de portée). Assurez-vous d’utiliser une Audience qui a du sens compte tenu des jetons que vous prévoyez d’accepter.

Autority est l’adresse du serveur d’authentification émettant des jetons. Le middleware d’authentification du support JWT utilisera cet URI pour rechercher et récupérer la clé publique pouvant être utilisée pour valider la signature du jeton. Il confirmera également que le paramètre ‘iss’ du jeton correspond à cet URI.

ValidateLifetime valide l’expiration du jeton.

ClockSkew autorise une certaine dérive d’horloge. Je recommande 5 minutes ou moins.

Etape 4: Paramétrer les policies d’autorisation

services.AddAuthorization(opts =>
{
   opts.AddPolicy("SurveyCreator", p =>
   {
      // Using value text for demo show, else use enum : ClaimTypes.Role
      p.RequireClaim("http://schemas.microsoft.com/ws/2008/06/identity/claims/role", "SurveyCreator");
   });
});

Cette policy nécessite un Claim de type ‘role’ avec la valeur «SurveyCreator».

Etape 5: Protéger vos actions avec l’attribut Authorize

[Authorize(Policy = "SurveyCreator")]
[HttpPost]
public void Post([FromBody] string value)
{
}

Rappelez-vous que si vous ne fournissez pas un jeton à votre Api ou un jeton erroné ou expiré, la réponse sera Http Unauthorized.

Si votre jeton ne satisfait pas à la policy, vous obtiendrez Http Forbidden.

Conclusion

C’était un exemple d’implémentation de la sécurité dans une WebAPI 🙂

Le code source complet peut être trouvé ici.

 

Advertisements

Meetting Rangers – Mardi 6 Nov 2018

Un bon meeting des .NET Rangers après les Microsoft Experiences 2018 ce mardi soir.

Il y avait:

  • François de Nantes
  • JBB de Strasbourg
  • Keelan de Lyon
  • moi de Paris

L’univers des pure-players technologique

Introduction

Le contexte est le suivant: vous êtes passionnés sur les technologies d’un éditeur (IBM, Microsoft, Oracle, SAP, ou autre) ou d’une communauté dédiée (Java, C#, PHP, Linux, etc) et vous êtes arrivé au constat suivant : le monde des sociétés de services (SSII) ne répond pas à vos attentes. Ils existent plusieurs facteurs et plusieurs mythes et le décor ressemble à une pièce de théâtre : le PDG, le Directeur des Opérations, la DRH, le Directeur Technique (CTO), les commerciaux et les collaborateurs, appelés « consultant » dans de nombreuses sociétés mais rien que le terme nécessiterait un article de 12 pages…. Donc voilà le décor et le constat est souvent le même : un commercial vous a placé chez un client ; la mission n’est pas forcément plus intéressante que cela ; le code est ancien ; les outils sont obsolètes ; le métier n’a rien de fun… A la pause déjeuner, vous mettez à jour votre profil Viadeo/LinkedIn (chacun sa chapelle) et vous tombez sur un chasseur de tête qui vous envoie un message qui ne vous laisse pas insensible : « et si vous exprimiez totalement votre talent dans une société spécialisée dans les technologies X, un pure-player ! ». Avouez que vous avez déjà eu l’occasion de tomber sur genre de messages ; éventuellement d’un cabinet Anglo-saxons (ou proche de Neuilly sur Seine) via lequel vous allez faire une expérience particulière : il existe un monde autre que celui des sociétés SSII traditionnelles. Ce ne sont pas des grands cabinets de conseils où il y a des profils divers issues non pas d’école d’Informatique mais de HEC ou autres mais ce sont des pure-players. Côté immatriculation, ces sociétés sont des entreprises de type PME avec un truc qui les différencient des autres : elles choisissent leur client et vous ne ferez que des missions sur les technologies ou produits que vous adorez !

Cela ne peut pas être pire que la SSII !

Le monde des SSII n’est pas forcément très agréable ; les projets de TMA ou les centres de services dédiés chez les clients ne permettent pas l’épanouissement de tous les collaborateurs. Donc, quel est le risque de rejoindre un pure-player si ce n’est baigner dans un monde consanguin dans lequel on va accompagner le client sur un domaine que l’on connaît (ou sur lequel on va être très fort) et sur lequel on aura toute la latitude pour répondre aux besoins du client. Et puis franchement, si cela ne colle pas, le monde des SSII est toujours prêt à accueillir des têtes bien faites donc l’aventure vaut le coup d’être tenté.

Le domaine des RH du monde des PME

Un grand groupe possède un département RH souvent froid. Les entretiens sont parfois surréalistes et on a l’impression d’avoir affaire à des assistance RH de type étudiantes en psychologies certaines fois. C’est vraiment le point faible des SSII… Dans un pure-player, l’humain est mis au centre et on accueille le candidat comme il est. Comme au Mc Do? Oui presque… En fait, il faut se plier à un code de valeurs…

Des PME aux méthodes de multinationales

Dans ces sociétés, le mot « valeur » est omniprésent. On parle aussi de « policy ». Il y a des règles pour tout : l’éthique, le commerce, le consulting, le management, etc. Au premier abord, ce n’est pas un problème. Le pure-player est moderne : il favorise la mobilité et fournit les accessoires nécessaires : ordinateur portable et smarphone. Souvent, il est proposé aux collaborateurs un plan de formation (« training ») qui sort de l’ordinaire : passage de certifications, animation de conférences, écriture de blogs, animations marketing. L’autre approche attractive, ce sont les évènements internes pour rendre les collaborateurs dynamiques et pour qu’ils puissent échanger. Ces méthodes existent depuis les années 50/60 et sont issues des cabinets privés et des confréries étudiantes anglo-saxonnes. La règle c’est la communauté et chaque nouveau collaborateur se voit attribuer un  parrain (budy) qui sert à nous faire évoluer au sein de l’entreprise. C’est le grand frère, le confident, le partenaire.

Les premières missions

L’avantage du pure-player, c’est que le monde client est strictement balisé : CLIENT + TECHNOLOGIES. Les collaborateurs ne s’occupent que de technologies et ne veulent que cela et le domaine contractuelle et commerciale est entièrement à la charge d’un département et dont le contenu est tenu secret ; chacun son métier. C’est une différence avec le monde du service où le chef de projet peut passer son temps à mixer techniques et contraintes budgétaires et… c’est moins drôle pour celui qui veut la meilleure solution pour répondre aux besoins du client. Les premières missions sont un moyen pour le collaborateur de monter très vite en compétence sur son domaine de prédilection. Après, la réalité (et le contexte) client peut amener le quotidien à ressembler au monde de la SSII mais l’avantage du pure-player c’est que l’on travaille sur un domaine qui nous plait donc ça change tout. Après quelques missions ; les missions d’un pure-player ne durent jamais très longtemps ; le consultant/l’expert peut se sentir à l’étroit dans son rôle d’Expert Technique. C’est là que certains se posent des questions…

Passer un cap

En SSII, la DRH va vous demander si vous voulez faire du management ou rester dans la technique… Chez un pure-player, ce n’est pas ça du tout ! On va vous amener à vous exprimer sur le domaine qui vous intéresse : le commerce, l’audit, la formation, les migrations, l’organisation ou le conseil. Et là, c’est un domaine dans lequel le métier est très très très plaisant. Dans le monde de la SSII, un chef de projet va être confronté à des grilles tarifaires, du référencement, des contraintes. Un pure-player, c’est un couteau suisse ; c’est le plombier qui va colmater la fuite. Donc, il fait vite et bien. C’est pour cela que l’on fait appel à lui.

Choisir son arme

En SSII, la DRH va vous demander si vous voulez faire du management ou rester dans la technique… Chez un éditeur de taille mondiale, le consulting est balisé et chaque détail a son importance. Les documents sont truffés de « No Warranty » et « copyrights ». De plus, les consultants créatifs ne sont pas les bienvenus car tout doit être identique et uniforme. Dans une PME, il est possible d’avoir sa personnalité (voir même un fort caractère). Après, la tenue vestimentaire peut être une barrière. Suivant votre style vous êtes un DBA tee-shirt jean ou un consultant BI costard cravate ou bien si comme moi vous faites le yo-yo avec la balance, le pantalon bège Chino ou en toile passe partout. Bon j’avoue, la veste au-dessus est parfois nécessaire ! Passons sur le « dress code » car seuls les commerciaux sont réellement assujettis à cela avec les Managers. Au bout de 2 ou 3 années chez un pure-player, même un collaborateur de moins de 30 ans peut être un « Consultant Sénior ». Mais attention, c’est ici que cela peut poser problème car il faut choisir son chemin… La progression chez le pure- player va se traduire sur la capacité du collaborateur à amener de la valeur ajoutée. Il y a plusieurs moyens de faire jouer la montre en restant sur un produit unique et être dédié à celui-ci dans le support, les mises à jour, les migrations ou bien partir dans le domaine du coaching/manager et là on va tranquillement se rapprocher du monde des SSII. Car si certains éditeurs sont de tailles importantes, des sociétés sont de petites structures et les dépendances vis-à-vis des clients amènent à faire des choix qui vont au-delà de la technologie….

L’envers du décor

Lorsque que le client participe à une part importante du chiffres d’affaires de la société, le monde devient plus complexe ; plus réel. Les choix deviennent des enjeux et là, la technologie est un atout et aussi une arme. Dois-je dire à mon client de passer à la dernière version où dois-je encourager mon client à développer sur la librairie X prônée par mon éditeur favori…? Et là, on rentre dans une dimension autre que le conseil en technologie, cela devient de l’Architecture avec un grand A et là, l’arène (comme à Rome) est le lieu de tous les dangers. Il y a  plusieurs écoles suivant que vous appartenez à un éditeur ou un intégrateur.

Editeurs et Intégrateurs

Si vous optez pour un éditeur logiciel, vous êtes corps et âme pour le « bien-être » du produit donc vous ne prenez pas de risques car vous savez ce que peux et ce que ne peux pas le dit produit. Si vous êtes chez un intégrateur, là c’est parfois compliqué car vous faites le lien et devez faire des choix. Le service ou celui qui a les moyens de tout changer c’est l’Architecte…

L’Architecte

Si vous êtes membre d’un pure-player, vous êtes souvent l’architecte et vous avez des marges de manœuvres. Si vous êtes intégrateur, on peut vous forcer la main. Chez un éditeur, vous êtes à l’abri car vous pouvez vous retrancher derrière de nombreuses raisons (fumeuses) pour contourner les obstacles comme la sécurité, le support, le by-design, le mode de license, etc.

Le Conseil

Lorsqu’un client fait appel à un pure-player, il s’adresse à un connaisseur, un expert. Il attend donc des répondes à des besoins qui dépassent le stade du prototype « hello world ». Donc souvent, le client demande au pure-player de le mettre dans les meilleurs conditions pour que la solution / le projet respecte les bonnes pratiques et que les coûts, les performances et la montée en charge soit au niveau affiché sur les plaquettes commerciale de ladite société ! Et là, il n’est pas rare de rencontrer des Architectes inexpérimentés qui vont vendre de la technologie au client dans le seul but d’utiliser le dernier produit / la dernière librairie en vue / à la mode… Et là, le risque de chuter n’est pas perceptible au premier abord mais est inévitable car le pure-player est obligé de rédiger des documents : les fameux livrables. Ces documents font foi et valent paiement de facture /prestation en retour. Ces documents sont soumis souvent à un accès restreint mais à disposition des Directeur Technique ou du DSI ou des chefs de services et peuvent être utilisé pour un audit ou (re)prendre le contrôle d’un système d’information dans sa globalité. Prenons un exemple : vous êtes le client et votre pure-player favori vous préconise de positionner son EAI favori au centre de votre SI en 2010 ; vous allez greffer de nombreux modules autour et ceci peut valoir une externalisation de votre SI en totalité sur un audit 4 ou 5 ans plus tard car vous avez « maqué le client » avec un produit qu’il n’avait pas besoin mais sur lequel vous avez dû avoir recours à des experts dédiés à cet EAI… Bref, une mauvaise décision d’architecture peut devenir un enjeu stratégique et pourtant cela peut être fun de mettre en place une « customisation » du moteur de workflow de votre EAI préféré… Si vous jouez trop à court terme, vous perdez et malheureusement c’est le cas de beaucoup de pure-player dans mon écosystème (MS). Je vois tellement de chefs de service qui ne veulent plus de ces sociétés d’ « experts » car les prestations les ont menés dans le mur… Après, la faute est-elle partagée ou bien juste le fruit de circonstances pour faire une bonne affaire commerciale ou un gros coup. Ne choisissez pas de structures trop petites si vous êtes jeune et mettez-vous à l’abri de ce que je nomme « les deals foireux ».

L’Architecture aura votre peau !

Dans les années 2000, il était possible de vendre tout et à n’importe quel prix. Les délires technologiques les plus fous ont été mis en œuvre.  Vous n’avez jamais entendu parler du Web service qui traverse un autre web service et puis finalement on repart vers un autre… Passons.

Maintenant, les services achats ont pris le contrôle et les centres de services sont légions. Les grandes sociétés Informatique récupèrent la totalité des développements des grands comptes et il est de plus en plus difficile de faire travailler les petites sociétés et les pures-player et les grands éditeurs sont rois. Par contre, les grandes SSII font un retour sur le devant de la scène car elles empochent les gros contrats. Tout est de plus en plus concentré. Donc finalement, faut-il retourner en SSII ??? Par forcément, mais le métier évolue et il n’est plus possible de vendre de « la technologie » comme de « la lessive ». Le client n’achète plus de la technologie. C’est fini. Le pain blanc a été mangé donc quoi ? Maintenant, faut être éthique et pro. C’est la seule condition pour durer. Et là, il faut s’adapter. C’est une composante du métier ; il faut se renouveler. Mon client a sous-traité ses développements en Inde ou au Maroc par contre, j’ai besoin de lui donner des conseils sur pleins de choses. C’est de l’Interop oui mais pas comme il y a dix ans. Il faut savoir expliquer à son client que certaines technologies ne sont pas pérennes et parfois savoir brieffer celui qui fait l’avant-vente pour lui expliquer qu’il faut qu’il arrête de vendre des tapis chez votre client sinon c’est perdu pour tout le monde au prochain audit groupe.

L’exemple Microsoft Silverlight – le choc

De nombreuses entreprises ont accueillies avec stupeur le fait que la technologie Silverlight de Microsoft était arrêtée. Le message de Microsoft pour les développeurs n’est pas limpide depuis quelques années et les clients qui ont investis sur cette technologie connaissent de grands moments de solitude! Donc quel est le retour d’un pure-player qui a vendu du SilverLight les 5 dernières années à ses clients… Le résultat est désastreux et c’est un pan entier de la profession qui « trinque ». D’un autre côté, il faut appeler un chat un chat : le marketing porte une énorme responsabilité dans cette affaire et la réalité des clients et leurs calendriers ne collent pas à celui des éditeurs qui cherchent à vendre des outils de développement et des technologies… OK en 2011 Microsoft passe aux applications Windows Store mais mes clients (CAC40) viennent de passer à VS2010 et Windows 7 donc… Y une c.. dans le potage !

L’exemple Azure – mdr (ou LOL)

Dans le monde Microsoft, vous avez certainement entendu le slogan « Mobile first, Cloud first » du CEO de Microsoft. Oui mais bof bof bof… Vous avez beaucoup de clients sur Azure, le cloud de Microsoft ? Et des clients sur Windows Phone, ou sur tablette Surface ou pour des applications Windows Store ? Et bien non… Les clients sont en Windows 7 à 90% et les développements Windows Phone sont une niche (très petite). Dans ce genre de technologies, les pure-players ne sont pas à la fête… Donc soyez vigileant. Pour faire l’Azure, optez pour travailler directement chez l’éditeur sinon ça va être compliqué. Y a les sociétés de type hébergeur classique comme Orange mais bon… le monde du cloud vaudrait un article tellement c’est cocasse. Passons.

Les valeurs sures

Le monde de la base de données reste le domaine le plus confortable. Il y a des bases partout, soit pour de l’accès standard soit pour du BI ou du reporting… Le monde du système est aussi un domaine très stable car configurer un Active Directory, un cluster Windows, une ferme Web IIS sont des scénarios présents chez de nombreux clients. Malheureusement dans notre monde du développement logiciel, il n’y a que peu de domaine stable. Le monde SharePoint possède bien sa niche, le monde CRM aussi mais ce n’est pas destiné à fournir une carrière bien remplie à mon avis. Quid du développement classique ? L’avenir n’est pas au développement mais à l’Architecture.

 

L’Architecture

L’avenir est à l’Architecture et aux fondamentaux. Les clients ont recours à des développeurs à bas prix et ceux-ci ne sont pas amener à prendre des décisions ou faire des choix technologique mais juste suivre (bêtement ?) un modèle. Donc voici mon conseil : suivez les divers voies du monde de l’Architecture avec un grand A car cela peut vous emmener très loin. Exemple : si votre client possède une base SQL Server de 10 MB, ok ; on part tête baissée sur une stratégie d’accès de type Entity Framework mais si elle fait 1 ou 2 TB, on fait quoi ? Ah là, je sens certains pure-player se retirer du jeu… A un moment donné, la technologie nous amène à choisir un camp (ou une stratégie) : vendre un service onéreux avec une logique court-terme ou bien orienter le client vers une solution pérenne qui est la moins mauvaise de toutes les bonnes solutions. Et là, il faut chuter plusieurs fois pour apprendre. Cela devient un deal. Et à ce moment-là, l’architecture devient du conseil sur les technologies et la démarche n’est plus de vendre la dernière technologie du moment. Ne méprisez pas les Architectes qui ne codent plus mais si vous travaillez avec un Architecte qui code, essayer d’en faire un allier – c’est qu’il ne peut pas être foncièrement un mauvais bougre ! Si votre but est de durer dans le métier, faite attention à ne pas tomber dans le piège de certaines grosses compagnies qui via l’avant-vente pratiquent « la politique de la terre brulée » c’est-à-dire : ok on bosse ensemble mais on réécrit tout à la dernière mode. Ce temps-là est révolu.

Conclusion

Dans le monde du service, certains pure-players sont très attractifs. Dans l’écosystème Microsoft par exemple, il y a des spécialistes SharePoint ou CRM, SQL Server et SSIS, Biztalk, ou les rois du WPF, PRISM, EntLib, EF. Certains font de l’ASP.NET MVC ou du Windows Phone / Windows Store Apps et même du multiplateforme avec Xamarin. Il y a de quoi bien s’éclater et cela n’as pas de prix. Après, c’est à vous de trouver votre maison. Ne négligez pas les SSII traditionnelles qui ont parfois des pôles dédiées à ces technologies et qui sont « à part » dans la SSII ; c’est souvent un bon compromis. Bref, je suis pour les pure-player !  Si vous êtes pressé et que vous voulez en CV « à l’arrache » voici mon conseil (de mémoire): Nélite, Orange Business Services, AI3, Avanade, Microsoft Consulting Services, AvePoint, Sopra, MCNEXT, Soat, Infinite Square, Wygwam, NEOS-SDI, Exakis, Azeo, CAST, Cellenza, Wiwnise, et Sogeti.  N’hésitez pas à passer « à l’ennemi » ; j’ai rencontré des gens très bien chez IBM ou Bull.

 

Meeting Rangers – 30 Octobre 2018

Lundi soir s’est tenu un meeting des .NET Rangers en compagnie de:

  • Keelan de Lyon
  • Jean-Baptiste de Strasbourg
  • Jean-Remy de et moi de Paris

La soirée s’est pasée dans un restaurant Thai de Montprnasse pour finir, entre autre, chez JC.