Access Control Service : créer et utiliser son propre STS dans Azure – Part 2

Dans cette série d’article, nous allons voir comment créer votre Security Token Service (STS) custom pour authentifier vos utilisateurs en utilisant des Claims, en passant au travers d’ACS,

Cette série d’articles est composée de:

  1. Créer votre STS en tant que Web Application (et non un Website!)
  2. Créer et configurer vos certificats dans votre STS  ← Vous êtes ici!
  3. Comprendre la syntaxe du fameux fichier FederationMetadata.xml
  4. Mettre en place votre solution utilisant votre STS au travers d’ACS
  5. Installez votre solution (WebApp + STS) dans Windows Azure

2. Créer et configurer vos certificats dans votre STS

Nous allons voir ici ensemble comment créer, puis utiliser les certificats pour votre STS, ceci inclut :

  • la génération d’un certificat de test pour que votre STS communique avec vos clients en HTTPS et signe le contenu de ses tokens,
  • la génération d’un certificat pour encrypter vos tokens envoyés depuis votre STS vers ACS.

Continue reading

Access Control Service : créer et utiliser son propre STS dans Azure – Part 1

Dans cette série d’article, nous allons voir comment créer votre Security Token Service (STS) custom pour authentifier vos utilisateurs en utilisant des Claims, en passant au travers d’ACS,

Cette série d’articles est composée de:

  1. Créer votre STS en tant que Web Application (et non un Website!) ← Vous êtes ici!
  2. Créer et configurer vos certificats dans votre STS
  3. Comprendre la syntaxe du fameux fichier FederationMetadata.xml
  4. Mettre en place votre solution utilisant votre STS au travers d’ACS
  5. Installez votre solution (WebApp + STS) dans Windows Azure

1. Créer votre STS en tant que Web Application (et non un Website!)

Par défaut, les templates WIF dans Visual Studio 2010 de vous proposerons de créer un Security Token Service site que sous forme d’un Website.

Nous voudrions utiliser ce « Website » en tant que site dans un projet Azure, mais là est le hic : Azure ne supporte d’importer que des project « Web Application »…

Aucun problème, il n’y a rien de compliqué là-dessous : nous allons créer un STS manuellement depuis une nouvelle Web Application. Continue reading

Sessions en folies

Le mois d’octobre a été pour moi un mois très fructueux avec pas moins de 6 présentations :

  • le 3 et 4 octobre, 3 présentations pour le SoftShake à Genève (Windows 8, .NET 4.5 & Windows Azure),
  • le 13 octobre, évènement ISACA sur le Cloud,
  • le 21 octobre, 2 présentations pour les Techdays 2011 à Berne (toutes 2 sur Windows Azure).

J’ai aussi pu beaucoup travailler sur les problématiques d’authentification avec Windows Azure et ADFS, ainsi qu’avec des moyens custom (un article suivra :) )

Ouf un mois bien rempli, tout va bien :)

A bientôt pour la suite !

Windows et WinRT, la nouvelle fondation pour le développement Windows ?

Après ces jours de sessions pour la BUILD de Microsoft qui sont assez chargés, je suis arrivé à poser mes idées sur ma compréhension sur cette nouvelle interface WinRT.

J’ai donc passé pas mal de temps sur les stands des équipes qui ont développé cette plateforme, et je vais essayer d’expliquer ce que j’en ai compris.

En général :

  • WinRT est un set d’objets accessibles pour construire des applications Metro
  • WinRT est accessible depuis C++, .NET (C# & VB), ainsi que Javascript lorsque l’on développe une application Metro
  • WinRT se base, pour ce qui est de la projection des objets natifs, sur un format nommé Windows Metadata (.Winmd); certains objets venant de Win32 ou COM possédant ces métadonnées sont alors exposés pour fournir des services aux applications Métro (voir image)
  • Selon le Runtime qui l’appelle, WinRT donnera l’objet (le même pour tous les runtimes) en l’entourant d’un wrapper permettant l’utilisation de cet objet par ce runtime
  • Cet objet natif venant de WinRT reste un objet Win32 ou COM, seule sa facade permet au runtime qui l’instancier et de l’utiliser

Pour ce qui est des languages :

  • Les parties C++ et Javascript ne voient que les objets WinRT venant du runtime au travers de ces objets exposés depuis leurs Metadatas,
  • Seule la partie C#/VB.NET peut à la fois accéder aux objets natifs exposés par WinRT et à certains objets .NET,
  • .NET accédé dans e cadre de Metro utilise un « Metro Profile » limitant les objets .NET accessibles et certaines de leur utilisation dans le cadre d’une application Metro (ex: charger dynamiquement une assembly venant d’internet),
  • Les objets natifs et managés venant du Framework 4.5 passent par WinRT avant d’être donnés à votre application,
  • Certains objets accessibles depuis .NET dans une application Metro ont été changé pour d’autres, mais de manière complètement transparente (System.String vient maintenant d’un type natif HSTRING, avec toutes les méthodes que vous lui connaissez),
  • Ces deux types d’objets sont « Garbage Collectés » par WinRT lui-même, ce qui fait que même un objet natif n’a pas besoin d’être disposé :) ,
  • Le XAML écrit dans une application Metro utilise un moteur de rendu XAML entièrement écrit en C++ (nom de code Jupiter), ce qui explique la rapidité et la fluidité de l’interface (GREAT STUFF!),
  • Ces contrôles sont disponibles sous d’autre namespaces que ceux de SL et WPF pour montrer la différence de contrôle,
  • WPF et Silverlight existent toujours sous Windows 8, mais n’utilisent pas Jupiter pour leur rendu, uniquement le framework .NET standard, et seront rendu sur le desktop,
  • Le profile Metro de .NET 4.5 empêche l’utilisation d’objets XAML .NET comme ceux venant des namespaces WPF,
  • Le moteur XAML Jupiter fonctionnant à l’identique et incluant tous les contrôles venant de WPF et Silverlight, il est possible de changer leur style (ex. appliquer le style d’un bouton SL sur un bouton Metro),
  • Seul C++ parmi les langages utilisés solicite moins WinRT pour la partie Metadonnées car ces objets natifs sont plus proches de C++ que des autres runtimes,
  • Il est possible d’écrire son propre code C++ utilisant le SDK de WinRT et ensuite de l’utiliser dans du code .NET ou JavaScript,
  • Les contrôles XAML pour Metro supportent tous deux les évènement souris et touch (plus de doublons d’évènement entre ces deux types).

Une fois vu tous ces points, je ne peux m’empêcher de me demander…
WinRT exposant certaines APIs de manière transparent pour un code .NET compilé en « Any CPU » ou un code JavaScript, un portage de WinRT serait tout à fait possible pour Windows Phone, permettant alors à une application de tourner sur tous les devices ave un seul package… Je pense que l’on pourra reparler de toute cela dans pas trop longtemps :)

En bonus, voici l’image du booth des DEVs de la BUILD, avec un schéma intéressant de ce à quoi ressemble la version un peu plus « détaillée » de l’intégration de WinRT avec tout le reste :)

Bon code !!!

Windows 8 est arrivé, et « ça change tout »

Me voila enfin rentre de cette première journée de BUILD, et je dois dire que OUCH j’en ai pris plein les mirettes.

Windows 8 est là et bien là, et il n’y va pas dans la demi mesure pour ce qui est des nouveautés !!

Tout d’abord WinRT (Windows Runtime) : c’est cette interface qui va venir faire la frontière entre le kernel et les langages utilisés. un set complet d’APIs est à disposition et accessible en C++, C#, VB.NET et Javascript!

Voici deux des projections montrant l’utilisation de WinRT dans l’écosystème Windows et les APIs que celui-coi offre :

 
Ce que montre cette dernière photo est que les appels aux APIs exposées pour les Application de type « Metro » se feront à travers WinRT.

Pour le reste, on fera comme à l’habitude avec des accès à des objets Javascript pour la partie HTML5 et aux objets .NET standards pour la partie .NET.

Ensuite, ces applications « Immersives » (ou autrement appelés « Metro Style ») vont avoir 3 façons de s’intégrer aux autres applications (chose inédite et n’existant sur aucun OS) ; Microsoft appelle cela les « Charms »:

  • Rendre son application capable de répondre à une recherche globale (on obtient alors une facette de recherche supplémentaire pour son app),
  • Donner à son app la possibilité d’exposer ses données pour être partagées dans une autre app (pas seulement du texte !!),
  • Et enfin donner la possibilité à une app d’être destinataire de recevoir ses données partagées pour en faire quelque chose (réseau social par exemple).

Pour ce qui est de la partie C++, il sera possible de créer des modules entièrement en C++ et ensuite d’exposer celui-ci dans son app comme un module WinRT alors interrogeable directement en Javascript par exemple ; si vous voules voir cela marcher je vous conseille de regarder la Keynote de la BUILD :) .

Enfin plus sur la partie design, un gros effort a été fait pour accélérer l’OS pour la partie tactile (le jour et la nuit comparé à Windows 7 avec le touch), et on a entendu que les performance ont été un des points les plus travaillés.

Un effort aussi fait sur de nombreux autres points en vrac :

l’Utilisation d’un ‘UEFI (remplaçant du BIOS) pour un boot de l’OS en moins d’une seconde,

Windows 8 Developer Preview est livré avec Visual Studio 11 (qui s’appuie sur .NET 4.5, et qui inclut le designer de Blend pour le XAML) ainsi que BLend 5 (qui prend en charge HTML5),

Roaming complet du profil utilisateur (settings des apps, wallpaper, lock screen pattern…),

Utilisation du stylet (un offert avec la tablette) pour pouvoir signer réellement sur le device (chose impossible sur les devices iOS),

Intégration de nombreux sensors (gyroscopique, mais aussi un capteur NFC),

Restent de noooooooomdreuses questions en suspens :

  • Pourra-t’on compiler un binaire C++ et le porter sur ARM ou y aura-t’il un principe similaire aux Universal Binaries de chez Apple ?
  • Le moteur de rendu XAML correspondant an Windows 8 semble être descendu d’un étage, directement dans le kernel ; ce runtime pourra-t’il être aussi utilisé pour les apps Silverlight qui tournent dans le browser par exemple ?
  • Existera-t’îl un Market Place interne pour les entreprises qui souhaitent publier seulement leurs applications sur les devices d’entreprise ?
  • Mais où ai-je mis mes chewing gums ??

Plus de nouvelles demain avec le début de sessions !!

Qu’attendre de la BUILD?

Me voilà enfin sur place pour l’évènement tqnt attendu sur lequel Microsoft n’a rien laissé filtré. Demain 9am Pacific Time nous devrions enfin savoir ce de quoi il retourne.

Il y a bien des pistes qui existent par-ci par-là (un bon résumé de celles-ci chez Clubic), mais en ce qui me concerne plus particulièrement, j’aimerai en savoir plus sur :

cette nouvelle plateforme de développement basé sur HTML5 et Javascript (qui je pense ne vaut que pour la nouvelle interface Metro),

de l’unité ou pas de cette nouvelle plateforme avec l’existant (.NET),

Quid de XAML em général ? Une équipe WPF semble bien présente dans les CORE teams travaillant sur Windows, cela signifie-t’il que la pile WPF sera redescendu plus bas au niveau du noyau pour être plus performante ? Et Silverlight dans tout ça après la « bourde » de Bob Muglia ?

Et enfin : Windows 8 ne vaudra-t’il pas pour une annonce de Windows Phone 8, ce qui équivaudrait à une plateforme HTML5 commune pour Windows 8 sur desktop + tablettes et aussi sur mobile…

plus d’infos dès demain !!!

développer sa solution Azure avec ACS sans ADFS

Vous souhaitez développer une solution basée sur ACS sans avoir ADFS dans votre environnement de développement ?

Vous voulez pouvoir changer les Claims sur lesquelles se basent votre application à volonté pour tester facilement les différents cas d’utilisation ?

Cela est tout à fait possible !

Suivez avec moi les étapes suivantes pour ce faire !!

Continue reading

Gérer ses environnements de développement et de production avec Windows Azure

Pour ceux qui comme moi travaillent avec Windows Azure et aiment garder la flexibilité de leur environnement de développement, staging et production, voici ma façon de travailler pour me simplifier la vie:

Web.config transformations:

Depuis Visual Studio 2010, l’on peut utiliser des transformations XML du fichier web.config, afin d’obtenir des versions différentes de la solution Web que l’on soit en Debug ou en Release.

Exemple simple de gestion du SessionState:

Dans le fichier Web.Debug.config:

<sessionState xdt:Transform="Replace" mode="InProc" />

Dans le fichier Web.Release.config:

<sessionState xdt:Transform="Replace"
mode="SQLServer" allowCustomSqlDatabase="true"
sqlConnectionString="Server=tcp:mysqlserver.database.windows.net;Database=MyDB;User ID=admin;Password=password;Trusted_Connection=False;Encrypt=True; MultipleActiveResultSets=True;" />

On peut aussi faire la même chose avec la connection à la base de données utiliser par Entity Framework:

Dans ce cas juste un petit changement; le fichier Web.Debug.config ne contiendra pas la connection SQL, mais ce sera le fichier principal Web.config.

En effet, les transformations ne s’appliquent que lors de la publication du projet. Il vaut mieux garder ces valeurs dans le Web.config pour pouvoir débugger en local  !! :)

Dans le fichier Web.config:

<add name="RMOPEntities" connectionString="metadata=res://*/Data.RMOP.csdl|res://*/Data.RMOP.ssdl|res://*/Data.RMOP.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=ariel.ctp-int.com\galatea;initial catalog=RMOP;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Dans le fichier Web.Release.config (pour transformer l’entrée pour le package Azure à déployer):

<add name="RMOPEntities"
connectionString="metadata=res://*/Data.RMOP.csdl|res://*/Data.RMOP.ssdl|res://*/Data.RMOP.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=wyopqjbi6s.database.windows.net;initial catalog=RMOP;;User ID=ctpadmin;Password=pass@word1;multipleactiveresultsets=True;App=EntityFramework&quot;"
providerName="System.Data.EntityClient" />

Conditional Symbols utilisé à la compilation:

vous connaissez surement la notation « #if DEBUG » pour ne compiler une portion de code que si le symbole « DEBUG » est défimi sur le projet.

Vous pouvez aussi créer vos propres symboles puis les utiliser dans votre code.

Exemple de définition ci-dessous dans votre projet:

Dans ce cas, j’utilise ce symbole pour pouvoir bypasser la section de long pour tester mon application.

Vérifier si vous êtes VRAIMENT sur Azure:

Dans certains cas, on n’a pas forcément besoin d’exécuter la totalité du projet, même dans la DevFabric.

Pour éviter cela, on peut alors débugger son application en tant que Web App standard et retourner des « Dummy Data » pour tester son application plus rapidement.

Un exemple simple ici:

if (RoleEnvironment.IsAvailable)
{
    return AzureBlobMaganer.GetDataItems();
}
else
{
    return new List<DataItem>() {new DataItem() {Label = "Test", Value = 12}};
}

Config Items in Roles:

Le dernier point ici est d’utiliser le contexte dans lequel est l’application pour pouvoir récupérer la connexion au Azure Storage qui correspond : DevFavric ou Azure ?

Voici un exemple des entrées dans un fichier de Service Configuration:

La solution la plus Simple est:

#if DEBUG
var account = CloudStorageAccount.FromConfigurationSetting("StorageDev");
#else
var account = CloudStorageAccount.FromConfigurationSetting("Storage");
#endif

Une solution plus élégante serait d’encapsuler cela dans une mèthode pour récupérer le Sorage Account correspondant.

Merci de votre lecture, et n’hésitez pas à me laisser un commentaire :)

Windows Azure Accelerator for Web Roles disponible

Un nouveau projet vient d’être mis en ligne par un des techies de Microsoft pour Windows Azure.

Ce projet va vous permettre d’utiliser d’une manière très simple les fonctionnalités Full IIS exposées depuis la version 1.4 du SDK de Windows Azure (comme expliqué dans ma super démo sous les nouveautés de Windows Azure aux Techdays :) )

Pour faire simple:

  • vous déployez ce projet sur Azure (en indiquant le nombre d’instances de ce Web Role que vous voulez),
  • vous publiez vos sites webs sur le site de votre instance de l’Accelerator,
  • automatiquement chaque Web Role de l’accelerator qui monitore le Storage Account va voir un nouveau site disponible, le télécharger et le déployer.

Ici un petit schéma pour visualiser le mode de fonctionnement si logique !

C’est aussi simple que ça :)

Un très gros potentiel pour cet accélérateur qui donne une capacité de mise en place très rapide de sites Webs sur Azure !!

Téléchargez ici le Windows Azure Accelerator for Web Roles !