// Récupération du cookie d'authentification
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = application.Request.Cookies[cookieName];
// Si cookie != null
if (authCookie != null)
{
// lecture du cookie d'authetification asp.net
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
// Création d'un principal pour l'application
FormsIdentity identity = new FormsIdentity(authTicket);
GenericPrincipal principal = new GenericPrincipal(identity, null);
// liaison du principal à l'object de contexte de la requete.
application.Context.User = principal;
}
else
/**
* jouons avec cas
**/
// lecture du ticket dans la requête http
string casTicket = application.Request.QueryString["ticket"];
string service = application.Request.Url.GetLeftPart(UriPartial.Path);
// le ticket est vide : étape 2 du protocole, redirection vers le serveur CAS
if (casTicket == null || casTicket.Length == 0)
// mémorisation de la demande initiale dans un cookie
application.Response.Cookies[ReturnUrl].Value = application.Request.Path;
// redirection vers le serveur CAS
string redir = cashost + "login?" + "service=" + service;
application.Response.Redirect(redir);
return;
// Retour de l'authentification cas : étape 6 du protocole
// vérification du ticket auprès du serveur CAS
string validateurl = cashost + "serviceValidate?" + "ticket=" + casTicket + "&" + "service=" + service;
WebClient client = new WebClient();
StreamReader Reader = new StreamReader(client.OpenRead(validateurl));
// Put the validation response in a string
string resp = Reader.ReadToEnd();
string netid = null; // logon utilisé à récupérer dans la balise user de resp
reader.Close();
// En principe redirection vers la page demandé
if (netid == null)
application.Response.Write("Votre identité n'a pas été validé par le serveur CAS");
// TODO: Renvoi vers une erreur 500 ou autre le serveur CAS est HS ou usurpation
application.Response.Write("Bienvenue " + netid);
// Création du ticket d'authentification cas
FormsAuthenticationTicket formAuthTicket = new
FormsAuthenticationTicket(
1, // version
netid, // user name
DateTime.Now, // creation
DateTime.Now.AddMinutes(20), // expiration
false, // persistant
""); // userData
// encryptage du ticket
string encryptedTicket = FormsAuthentication.Encrypt(formAuthTicket);
// création du cookie d'authentification
authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
// ajout du cookie dans le flux de réponse
application.Response.Cookies.Add(authCookie);
// redirection vers la page demandé
string returnUrl;
// Si jamais on perd l'url de retour, renvoie vers la racine du site
if (application.Request.Cookies[ReturnUrl] == null)
returnUrl = application.Request.ApplicationPath;
returnUrl = application.Request.Cookies[ReturnUrl].Value;
application.Response.Redirect(returnUrl);
<httpModules>
<add name="CasModule" type="Upmc.CasModule.CasModule, CasModule"/>
</httpModules>
<appSettings>
<add key="loginUrl" value="https://votre serveur.com/login" />
<add key="validateUrl" value="https://votre serveur.com/validate" />
<add key="logoutUrl" value="https://votre serveur.com/logout" />
</appSettings>
<!-- Les urls d'accès au serveur CAS -->
<!-- la déclaration du module -->
<system.web>
<!-- ... -->
<clear />
<add name="OutputCache" type="System.Web.Caching.OutputCacheModule" />
<add name="CasModule" type="Upmc.CasModule.CasModule, CasModule" />
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
</system.web>
<trust level="WSS_Medium" originUrl="" />
<securityPolicy>
<trustLevel name="WSS_Medium" policyFile=
"C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_mediumtrust.config" />
<trustLevel name="WSS_Minimal" policyFile=
"C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_minimaltrust.config" />
</securityPolicy>
<!-- Dans le fichier de sécurité il faut juste ajouter dans le premier code group le bloc suivant -->
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust">
<IMembershipCondition
class="UrlMembershipCondition"
Url="$AppDirUrl$/bin/casModule.dll"
/>
</CodeGroup>