1 Installation du Service Passport
L’utilisation de Passport en développement implique plusieurs étapes de configuration :
- Installer le Passport SDK sur le serveur d’applications
- Créer une nouvelle application sur le service de Microsoft gérant les applications Passport
- Posséder un compte Passport en environnement de développement
Pour plus d’informations sur la technologie en elle-même, vous pouvez consulter la documentation technique de Microsoft disponible sur :
http://www.microsoft.com/myservices/passport/passport.asp
1.1 Installation du service Passport SDK
Le SDK Passport est disponible à l’adresse suivante :
http://msdn.microsoft.com/downloads/default.asp?URL=/downloads/sample.asp?url=/msdn-files/027/001/885/msdncompositedoc.xml
Après son installation, vous disposez du « Passport Administration Utility » qui vous permettra de configurer votre serveur pour qu’il soit reconnu par les serveurs Passport de Microsoft.
1.2 Création de l’application Passport
Pour cela, il suffit d’aller sur le « Services Manager » :
https://www.netmyservicesmanager.com/wizard/
Ensuite, il suffit de créer une nouvelle application qui correspondra à notre application en développement.
Si l’application développée se situe sur un intranet local, il faudra utiliser le nom de la machine pour tous les champs où le nom du serveur est demandé. En effet, ce nom ne correspond pas à l’url vu depuis Internet mais à l’url que l’utilisateur voit dans barre d’adresse. Donc aucune inquiétude si votre serveur n’est pas visible depuis Internet.
Une fois l’application enregistrée, vous pourrez télécharger la « Partner Key », l’exécuter sur votre serveur d’application et enfin configurer l’administration utility afin de remplir le champ du Site ID avec celui donné sur le services manager.
Le serveur est alors prêt à utiliser Passport en environnement de développement.
1.3 Création d’un compte sur PassportTest
La dernière étape consiste en la création d’un compte passport de test. Pour cela, rendez vous à l’adresse : http://current-register.passporttest.com/default.asp
Maintenant vous pouvez tester votre serveur avec l’application de test fournie : Http://nom_machine/PassportTest/default.asp
Attention, sous Windows XP, Passport étant intégré dans le système, votre authentification passera suivant les paramètres de la base de registres qui indiquera donc forcément les serveurs de Production. L’unique solution pour le moment est de modifier la base de registres afin d’utiliser les serveurs de développement (voir le SDK).
Normalement, vous devriez être identifié sous Passport et voir les informations disponibles sur votre compte Passport.
2 Passport sous .NET
Depuis l’avènement du Framework .NET, un grand travail a été effectué sur l’harmonisation des différentes procédures d’identification de l’utilisateur. Cela se traduit par une interface commune pour toutes les identifications possibles. Et la récupération de l’identification connecté par un simple « User.Identity ».
2.1 Page demandant obligatoirement d’être identifié
Dans le Web.config, configurez l’utilisation de Passport ainsi que l’interdiction de voir l’application pour toute personne n’étant pas authentifiée :
<authentication mode="Passport" />
<authorization>
<deny users="?" />
</authorization>
Ecrire le code de la page de test en aspx :
<html>
<head>
<title>Article Passport</title>
</head>
<body>
<% Response.Write("Votre identifiant passport est : " & _
User.Identity.Name ) %>
</body>
</html>
Cela suffit à contrôler l’authentification de la personne. Le « User.Identity.Name » renverra le PUID de l’utilisateur connecté. Le PUID correspond à l’identifiant unique de l’utilisateur Passport. Il pourra ainsi servir, d’identifiant dans une base de données clients si l’on veut enrichir les données relatives à un utilisateur. Un utilisateur Passport, choisit les informations qu’il partage, et son identifiant est l’unique valeur que l’utilisateur ne peut cacher. Il est donc important de prévoir un système dans lequel seul le PUID de l’utilisateur est accessible sur son profil.
Dans le cas où l’utilisateur a partagé d’avantages d’informations, il est possible de les atteindre depuis l’objet identité :
Pour cela, il est nécessaire de transtyper l’identité de l’utilisateur en identité de type Passport. Ensuite, on accédera à des champs supplémentaires comprenant ces informations :
<%@ Page Language="vb" %>
<html>
<head>
<title>Article Passport</title>
</head>
<body>
<%
Dim MyPassportIdentite as System.Web.Security.PassportIdentity = CType(User.Identity, System.Web.Security.PassportIdentity)
if MyPassportIdentite.IsAuthenticated then
Response.Write( "<h2> Vous etes authentifie </h2>" )
Response.Write( "<b>Authentification type :</b>" & MyPassportIdentite.AuthenticationType & "<br>" )
Response.Write( "<b>PUID :</b>" & MyPassportIdentite.HexPUID & "<br>" )
Response.Write( "<b>Ticket Age :</b>" & MyPassportIdentite.TicketAge & "<br>" )
Response.Write( "<b>Time Since SignIn :</b>" & MyPassportIdentite.TimeSinceSignIn & "<br>" )
end if %>
</body>
</html>
2.2 Identification en ligne
Dans ce cas, nous utiliserons le bouton Passport « Connexion »
La fonction à utiliser est la suivante :
Overloads Public Function LogoTag( _
ByVal strReturnUrl As String, _
ByVal iTimeWindow As Integer, _
ByVal fForceLogin As Boolean, _
ByVal strCoBrandedArgs As String, _
ByVal iLangID As Integer, _
ByVal fSecure As Boolean, _
ByVal strNameSpace As String, _
ByVal iKPP As Integer, _
ByVal bUseSecureAuth As Boolean _
) As String
Les paramètres à fournir sont les suivants :
- strReturnUrl : URL de retour de la fonction de connexion (sur le serveur Passport de Microsoft), elle doit être comprise dans le domaine donné dans le service manager sinon l’authentification ne fonctionnera pas
- iTimeWindow : intervalle de temps durant lequel l’authentification sera effective
- fForceLogin : indique le iTimeWindow doit être pris en compte
- strCoBrandedArgs : champ ajouté à l’url de retour (totalement facultatif)
- iLangID : langage utilise sur le serveur Passport (1036 pour la langue française)
- fSecure : déclare si la page appelante utilise le cryptage SSL
- strNameSpace : définit le domaine ou sera crée le Passport (facultatif)
- iKPP : concerne le règlement COPPA (US seulement)
- bUseSecureAuth : Indique si l’interface présentée doit être servie en HTTPS depuis le domaine Passport
Cela donne pour notre exemple le code suivant (ne pas oublier de modifier le Web.Config et autoriser la connexion pour tous) :
<authorization>
<allow users="*" />
</authorization>
Puis dans notre page Aspx :
<%@ Page Language="vb" %>
<html>
<head>
<title>Article Passport</title>
</head>
<body>
<%
Dim MyPassportIdentite as System.Web.Security.PassportIdentity = CType(User.Identity, System.Web.Security.PassportIdentity)
if MyPassportIdentite.IsAuthenticated then
Response.Write( "<h2> Vous etes authentifie </h2>" )
Response.Write( "<b>Authentification type :</b>" & MyPassportIdentite.AuthenticationType & "<br>" )
Response.Write( "<b>PUID :</b>" & MyPassportIdentite.HexPUID & "<br>" )
Response.Write( "<b>Ticket Age :</b>" & MyPassportIdentite.TicketAge & "<br>" )
Response.Write( "<b>Time Since SignIn :</b>" & MyPassportIdentite.TimeSinceSignIn & "<br>" )
else
Response.Write("<h2> Veuillez vous identifier</h2>")
MyPassportIdentite.LogoTag( "", 3600, False, "", 1036, false,"", 0, False )
end if
%>
</body>
</html>
3 Conclusion
L’implémentation de l’authentification Passport sur le Framework .NET a permis de simplifier grandement sa mise en œuvre. En effet, 3 lignes de code suffisent pour mettre en application son principe. Cela permet ainsi d’accentuer l’effort de développement plus sur la conception de l’application Web et moins sur les techniques. La mise en production d’un site utilisant Passport doit toutefois accepter le fait d’être dépendant des serveurs Passport et surtout le site doit utiliser cette authentification de façon intensive de sorte que les frais d’utilisation couvrent les économies de développement d’une solution propriétaire.