ADFS, lexpérience Web SSO (fédérée) 2 ième partie Philippe Beraud Consultant Principal...
-
Upload
andromaque-baron -
Category
Documents
-
view
124 -
download
1
Transcript of ADFS, lexpérience Web SSO (fédérée) 2 ième partie Philippe Beraud Consultant Principal...
ADFS, l’expérience Web SSO (fédérée)2ième partie
ADFS, l’expérience Web SSO (fédérée)2ième partie
Philippe BeraudConsultant Principal
Microsoft France
Objectifs de la session
Parcourir en détail le scénario de Web SSO fédéré de la Parcourir en détail le scénario de Web SSO fédéré de la première partiepremière partie
Appréhender comment développer une solution de fédération Appréhender comment développer une solution de fédération de bout-en-bout avec ADFSde bout-en-bout avec ADFS
Mettre en exergue les points cléMettre en exergue les points clé
Tout ceci est applicable aux scénarios intranet et extranet fédéréTout ceci est applicable aux scénarios intranet et extranet fédéré
Scénario : problème métier
Nature du problème à résoudre : offrir un accès partenaires à Nature du problème à résoudre : offrir un accès partenaires à l’application Web l’application Web OrderingOrdering
Exigences applicativesExigences applicatives
Réduire les coûts de supports : le fournisseur de ressources Réduire les coûts de supports : le fournisseur de ressources ne gère pas les identités des partenaires Comptene gère pas les identités des partenaires Compte
Les partenaires sont propriétaires des identités : la gestion Les partenaires sont propriétaires des identités : la gestion des rôles à lieu du coté Comptedes rôles à lieu du coté Compte
Interopérer : les partenaires Compte peuvent envoyer les Interopérer : les partenaires Compte peuvent envoyer les identités depuis d’autres plateformes interopérables identités depuis d’autres plateformes interopérables
Améliorer de la sécurité : révoquer l’accès à l’application dès Améliorer de la sécurité : révoquer l’accès à l’application dès que l’utilisateur est « déprovisionné » de son « royaume »que l’utilisateur est « déprovisionné » de son « royaume »
S’appuyer sur l’infrastructure existante : IIS, Active Directory, S’appuyer sur l’infrastructure existante : IIS, Active Directory, AD/AM, PKIAD/AM, PKI
Environnement de développement d’applicationInstallation sur une seule machine
Windows Server 2003 R2Windows Server 2003 R2Active Directory ou AD/AMActive Directory ou AD/AMIIS 6.0 avec SSL configuréIIS 6.0 avec SSL configuréASP.Net 2.0ASP.Net 2.0ADFSADFS
Federation ServiceFederation ServiceAccount StoreAccount StoreApplicationApplication
Web Agent for Claims-aware applicationWeb Agent for Claims-aware applicationApplication « Claims-aware »Application « Claims-aware »
Chargement du HTTP moduleChargement du HTTP moduleApplication Pool configuré pour ASP.Net 2.0Application Pool configuré pour ASP.Net 2.0
Applications « Identity-aware »
Authentification (AuthN)Authentification (AuthN)Vérifier que l’utilisateur a présenté une identité valideVérifier que l’utilisateur a présenté une identité valide
Autorisations (AuthZ)Autorisations (AuthZ)Vérifier que l’utilisateur dispose des permissions Vérifier que l’utilisateur dispose des permissions appropriées pour accéder à la ressourceappropriées pour accéder à la ressource
Prendre des décisions d’autorisation et de personnalisation Prendre des décisions d’autorisation et de personnalisation basées sur l’identité en entréebasées sur l’identité en entrée
Points de développement
FS-AFS-A
WSWS
FS-RFS-R
Active Active DirectorDirector
yy
ClientClient
Infrastructure:AuthN des utilisateurs
Infrastructure:Modification des claims
lorsqu’ils passent à travers chaque FS
Cadre de confianceCadre de confianceFédérationFédération
Forêt CompteForêt CompteA. Datum CorpA. Datum Corp
Forêt RessourceForêt RessourceTrey Research, Inc.Trey Research, Inc.
Application :mise en œuvre d’applications qui
peuvent tirer parti des claims pour les authZ
Exigences d’une application « Identity-aware » fédérée
Authentification InfrastructureAuthentification Infrastructure
Vérifier que l’utilisateur a présenté une identité Vérifier que l’utilisateur a présenté une identité validevalide
Authentification ApplicationAuthentification Application
Vérifier que l’utilisateur a été authentifié par ADFSVérifier que l’utilisateur a été authentifié par ADFS
AutorisationsAutorisations
Vérifier que l’utilisateur dispose des permissions Vérifier que l’utilisateur dispose des permissions appropriées pour la ressourceappropriées pour la ressource
Modification des claimsModification des claims
Ajouter/supprimer/modifier les claims à transmettre sur Ajouter/supprimer/modifier les claims à transmettre sur l’identitél’identité
Vue d’ensemble de l’authentification
Dév Application Dév Application Dév ADFS Dév ADFS RessourceRessource Dév ADFS Dév ADFS CompteCompte
InfrastructureInfrastructure
Qu’est-ce que cela signifie ?Qu’est-ce que cela signifie ?
Nous avons dissocié le développeur d’application du Nous avons dissocié le développeur d’application du développeur en charge de l’évènement d’authentificationdéveloppeur en charge de l’évènement d’authentification
L’authentification au niveau de l’application Web consiste L’authentification au niveau de l’application Web consiste en une vérification que l’identité présentée a bien été en une vérification que l’identité présentée a bien été signée par une entité de confiancesignée par une entité de confiance
2. L’utilisateur est redirigé vers le FS Ressource pour l’authN
1. L’utilisateur arrive sur le site
3. L’utilisateur est redirigé vers le Compte pour l’authN
4. L’utilisateur s’authentifie
5. Un jeton est présenté par l’utilisateur à ADFS
6. ADFS valide le jeton
7. Le jeton contient des claims pour autoriser l’accès au site
Méthodes d’authentificationInfrastructure
Windows IntegréeWindows IntegréeApproche recommandée Approche recommandée (intranet) (intranet) Utilisation de la session générée lors de l’ouverture de session Utilisation de la session générée lors de l’ouverture de session sur une machine Windowssur une machine Windows
CertificatCertificat X.509 v3 Client X.509 v3 ClientLe browser Web reçoit une requête pour présenter un certificat Le browser Web reçoit une requête pour présenter un certificat client et l’utilisateur choisit le certificat à présenter en fonction client et l’utilisateur choisit le certificat à présenter en fonction des racines de confiance ou de certification croiséedes racines de confiance ou de certification croisée
De type De type FormsFormsLe browser Web présente une page Web personnalisable à Le browser Web présente une page Web personnalisable à l’utilisateur pour recueillir les « lettres de créances »l’utilisateur pour recueillir les « lettres de créances »
BasicBasicLe browser Web présente un dialogue utilisateur/mot de passe Le browser Web présente un dialogue utilisateur/mot de passe classiqueclassique
Pages d’authentification Federation Services Infrastructure
Personnalisable à la fois visuellement et logiquementPersonnalisable à la fois visuellement et logiquement
clientlogon.aspx clientlogon.aspx (compte)(compte)Le browser est redirigé sur cette page lors de la phase Le browser est redirigé sur cette page lors de la phase d’authentificationd’authentificationChoix du mécanisme d’authentification Choix du mécanisme d’authentification Reprise de l’identité visuelle de l’organisationReprise de l’identité visuelle de l’organisation
signout.aspxsignout.aspx (compte) (compte)Suppression des cookies de session depuis le browser, résultant en Suppression des cookies de session depuis le browser, résultant en une déconnexionune déconnexion
ddiscoveriscovercclientlientrrealm.aspxealm.aspx (ressource) (ressource)Découverte du royaume d’appartenanceDécouverte du royaume d’appartenanceLe mécanisme de découverte peut être modifié (ex. IP, adresse mèl)Le mécanisme de découverte peut être modifié (ex. IP, adresse mèl)Inhibé si précisé dans laInhibé si précisé dans la QueryString QueryString https://<server>/<app>/<page.aspx>?whr=urn:federation:<homerhttps://<server>/<app>/<page.aspx>?whr=urn:federation:<homerealm> ealm>
Pages d’authentification Federation ServicesInfrastructure
L’action courante à réaliser et le contexte nécessaire associé sont L’action courante à réaliser et le contexte nécessaire associé sont rendus disponibles via la propriété rendus disponibles via la propriété FormContextFormContext de l’objet de l’objet LSAuthenticationObjectLSAuthenticationObject Modèle de programmationModèle de programmation
Récupération de l’instance Récupération de l’instance LSAuthenticationObjectLSAuthenticationObject via la via la propriété statique propriété statique CurrentCurrentLSAuthenticationObject logonServer = LSAuthenticationObject.Current;LSAuthenticationObject logonServer = LSAuthenticationObject.Current;
Examen de la propriété Examen de la propriété CurrentActionCurrentAction de la classe de la classe FormContextFormContext afin de déterminer l’action qui est demandée par FS-Pafin de déterminer l’action qui est demandée par FS-PlogonServer.FormContext.CurrentActionlogonServer.FormContext.CurrentAction
Si nécessaire, « caste » de la classe Si nécessaire, « caste » de la classe FormContextFormContext en en LSFLSFormContextormContext afin d’obtenir les informations nécessaires afin de afin d’obtenir les informations nécessaires afin de réaliser l’action demandée réaliser l’action demandée
Page Page Client Client LogonLogon
Page Page
Sign Sign
OutOut
Page Page Discove
Discover Client r Client RealmRealm
DémonstrationDémonstration
Pages d’authentification Federation Services
Exigences d’une application « Identity-aware » fédérée
Authentification InfrastructureAuthentification Infrastructure
Vérifier que l’utilisateur a présenté une identité valideVérifier que l’utilisateur a présenté une identité valide
Authentification ApplicationAuthentification Application
Vérifier que l’utilisateur a été authentifié par Vérifier que l’utilisateur a été authentifié par ADFSADFS
AutorisationsAutorisations
Vérifier que l’utilisateur dispose des Vérifier que l’utilisateur dispose des permissions appropriées pour la ressourcepermissions appropriées pour la ressource
Modification des claimsModification des claims
Ajouter/supprimer/modifier les claims à transmettre sur Ajouter/supprimer/modifier les claims à transmettre sur l’identitél’identité
Autorisations applicatives à l’aide des claims
ClaimsClaims
Déclarations faites à propos d’utilisateurs Déclarations faites à propos d’utilisateurs
Peuvent être utilisées à des fins d’autorisationPeuvent être utilisées à des fins d’autorisation
Trois types deTrois types de claimsclaims
IdentitéIdentité (Identity) (Identity)EmailEmail
User Principal Name (UPN)User Principal Name (UPN)
Common NameCommon Name
GroupeGroupe (Group) (Group)
PersonnaliséPersonnalisé (Custom) (Custom)
Exemple d’ensemble de Exemple d’ensemble de claimsclaimsIdentity
CustomSpendingLimit:
$500Position:
Purchasing Agent
GroupPurchaser
AdministratorPlatinum
Bénéfices des claims
Les Les claimsclaims……Exposent un ensemble riche de données d’autorisationExposent un ensemble riche de données d’autorisationSont peuplées à partir d’Active Directory et d’AD/AM à Sont peuplées à partir d’Active Directory et d’AD/AM à l’aide d’une interface graphiquel’aide d’une interface graphiqueSont peuplées à partir d’autres sources via un module de Sont peuplées à partir d’autres sources via un module de transformation de transformation de claimclaimSont modifiées aux différents nœuds par lesquels ils Sont modifiées aux différents nœuds par lesquels ils transitenttransitentSont auditées au niveau d’un référentiel centraliséSont auditées au niveau d’un référentiel centraliséSont échangées entre partenaires « Sont échangées entre partenaires « WS-Federation WS-Federation Passive Requestor Interop ProfilePassive Requestor Interop Profile » (PRIP) » (PRIP)
Applications « Claims-Aware »
Que signifie être une application « Que signifie être une application « Claims-AwareClaims-Aware » ? » ?
Une application dispose d’un ensemble donné de Une application dispose d’un ensemble donné de claimsclaims qu’elle s’attend à recevoir et sait comment l’utiliserqu’elle s’attend à recevoir et sait comment l’utiliser
Une fois reçus, les Une fois reçus, les claimsclaims peuvent être utilisées pour peuvent être utilisées pour Prendre des décisions d’autorisationPrendre des décisions d’autorisation
Présenter des informations à l’utilisateurPrésenter des informations à l’utilisateur
L’application fait confiance à un unique Federation L’application fait confiance à un unique Federation Services (ou ferme de) pour lui fournir les claimsServices (ou ferme de) pour lui fournir les claims
Une telle application permet de conférer un accès Une telle application permet de conférer un accès sécurisé et approprié pour les client / partenaire / sécurisé et approprié pour les client / partenaire / fournisseur / collaborateur en dehors de leur fournisseur / collaborateur en dehors de leur domaine/forêtdomaine/forêt
Applications « Claims-Aware »
Que signifie écrire une application « Que signifie écrire une application « Claims-AwareClaims-Aware » ? » ?
Application ASP.Net 2.0Application ASP.Net 2.0Module HTTP Module HTTP WebSsoAuthenticationModuleWebSsoAuthenticationModule
Configuration d’un Federation Services spécifiqueConfiguration d’un Federation Services spécifique
Implémenter les APIs ADFSImplémenter les APIs ADFSAssemblage Assemblage System.Web.Security.SingleSignOnSystem.Web.Security.SingleSignOn
Ou une API qui consomme les claimsOu une API qui consomme les claimsASP.Net IsInRole()ASP.Net IsInRole()
Authorization Manager (AzMan)Authorization Manager (AzMan)
APIs ADFS
Module HTTP Module HTTP WebSsoAuthenticationModuleWebSsoAuthenticationModuleAssemblage Assemblage System.Web.Security.SingleSignOnSystem.Web.Security.SingleSignOnPlacé en frontal de l’application ASP.NET via le fichier Placé en frontal de l’application ASP.NET via le fichier web.configweb.configPositionne un objet Positionne un objet SingleSignOnIdentitySingleSignOnIdentity dans le dans le HttpContextHttpContext de de l’applicationl’application
Objet Objet SingleSignOnIdentitySingleSignOnIdentityUtilisé par les pages .aspx de l’application pour l’accès aux Utilisé par les pages .aspx de l’application pour l’accès aux claimsclaims du jeton du jeton WebSSOWebSSO
SingleSignOnIdentity SsoId = HttpContext.Current.User.Identity as SingleSignOnIdentity SsoId = HttpContext.Current.User.Identity as SingleSignOnIdentitySingleSignOnIdentity
Vérifier que l’utilisateur a été authentifié
SingleSignOnIdentity SsoId = User.Identity as SingleSignOnIdentitySingleSignOnIdentity SsoId = User.Identity as SingleSignOnIdentityif (SsoId.IsAuthenticated)if (SsoId.IsAuthenticated){{
// user authenticated by ADFS// user authenticated by ADFS}}elseelse{{
Response.Redirect(SsoId.SignInUrl, true);Response.Redirect(SsoId.SignInUrl, true);}}
Second « round » d’authentificationSecond « round » d’authentification
L’application vérifie qu’elle dispose d’un jeton signé L’application vérifie qu’elle dispose d’un jeton signé validevalide
SingleSignOnIdentitySingleSignOnIdentity fournit un accès au(x) fournit un accès au(x)
Statut d’authentification de l’utilisateur (Statut d’authentification de l’utilisateur (IsAuthenticatedIsAuthenticated))
URLsURLs associées à l’ouverture de session (S associées à l’ouverture de session (SignignIInnUrl) et à Url) et à la déconnexion (Sla déconnexion (SignignOOututUrl)Url)
Facilité d’utilisation Facilité d’utilisation
Accéder aux claims ADFSSystem.Web.Security.SingleSignOn.Authorization
SecurityPropertySecurityProperty
Champs statiques publicsChamps statiques publicsCommonNameClaimUriCommonNameClaimUri
CustomClaimUriCustomClaimUri
EmailClaimUriEmailClaimUri
GroupClaimUriGroupClaimUri
UpnClaimUriUpnClaimUri
Propriétés publiquesPropriétés publiquesClaimTypeClaimType
NameName
UriUri
valuevalue
SecurityPropertyCollectionSecurityPropertyCollection
Agrège les claimsAgrège les claims
Permet l’itération à travers l’ensemble de claimsPermet l’itération à travers l’ensemble de claims
Comparer l’URI pour identifier le type de claim et prendre Comparer l’URI pour identifier le type de claim et prendre l’action appropriéel’action appropriée
Accéder aux claims ADFSAccéder aux claims ADFS
foreach (SecurityProperty securityProperty in SsoId.SecurityPropertyCollection)foreach (SecurityProperty securityProperty in SsoId.SecurityPropertyCollection){{ // For each group that we find, we need to add it to AzMan Context// For each group that we find, we need to add it to AzMan Context
if (securityProperty.Uri == SecurityProperty.GroupClaimUri)if (securityProperty.Uri == SecurityProperty.GroupClaimUri){{
azMan.AddRoleToContext(securityProperty.Value);azMan.AddRoleToContext(securityProperty.Value);}}else if (securityProperty.Uri == SecurityProperty.UpnClaimUri)else if (securityProperty.Uri == SecurityProperty.UpnClaimUri){{
// set tu upn// set tu upn upn = securityProperty.Value;upn = securityProperty.Value;
}} else if (securityProperty.Uri == SecurityProperty.CustomClaimUri)else if (securityProperty.Uri == SecurityProperty.CustomClaimUri)
{{// set custom claims// set custom claims
customClaims.Add(securityProperty.NamecustomClaims.Add(securityProperty.Name, , securityProperty.ValuesecurityProperty.Value));;}}
}}
Itérer à travers une SecurityPropertyCollectionItérer à travers une SecurityPropertyCollection
FournitFournit
Un Framework pour le Un Framework pour le Role Based Access Control (RBAC)Role Based Access Control (RBAC)
Un accès à travers des rôles utilisateur assignésUn accès à travers des rôles utilisateur assignés
Une application de la politique d’autorisation à l’exécution Une application de la politique d’autorisation à l’exécution
Etapes relatives à l’utilisation d’AzMan Etapes relatives à l’utilisation d’AzMan
Définir un ensemble d’opérationsDéfinir un ensemble d’opérations
Grouper les opérations en tâchesGrouper les opérations en tâches
Assigner des tâches à des rôlesAssigner des tâches à des rôles
Inclus dansInclus dans Microsoft Windows Server 2003 Microsoft Windows Server 2003 R2 R2
Introduire Authorization Manager (AzMan)
API API AzManAzMan et RCW et RCW Microsoft.Interop.Security.AzRolesMicrosoft.Interop.Security.AzRolesInitialisation de l’applicationInitialisation de l’application – – AzInitializeApplicationAzInitializeApplication
A la connexion d’un utilisateurA la connexion d’un utilisateurInitialisation du contexte utilisateurInitialisation du contexte utilisateur – – AzInitializeContextAzInitializeContext
Exploitation des rôles pour la définition de l’interfaceExploitation des rôles pour la définition de l’interface
Lors d’une requête pour une opération donnéeLors d’une requête pour une opération donnéeMéthode Méthode AccessCheck(Scope, Operation, Operation Data)AccessCheck(Scope, Operation, Operation Data) du contexte du contexte utilisateur utilisateur
Exécution automatique des règles MétierExécution automatique des règles Métier
Introduire Authorization Manager (AzMan)
Intégrer ADFS et AzMan Intégrer ADFS et AzMan
using Microsoft.Interop.Security.AzRoles;using Microsoft.Interop.Security.AzRoles;
uusingsing System.Web.Security.SingleSignOnSystem.Web.Security.SingleSignOn;;using System.Web.Security.SingleSignOn.using System.Web.Security.SingleSignOn.AuthorizationAuthorization;;
Référence .NET nécessaireRéférence .NET nécessaire
Initialisation de l’applicationInitialisation de l’application
AzAuthorizationStoreClass azStore;AzAuthorizationStoreClass azStore;IAzApplicationIAzApplication22 azApp; azApp;
azStore = new AzAuthorizationStoreClass();azStore = new AzAuthorizationStoreClass();azStore.Initialize(0, azmanStoreLocation, null);azStore.Initialize(0, azmanStoreLocation, null);azStore.UpdateCache(null);azStore.UpdateCache(null);
azApp = azStore.OpenApplication2("Trey Ordering", null);azApp = azStore.OpenApplication2("Trey Ordering", null);
Intégrer ADFS et AzMan Intégrer ADFS et AzMan
Initialisation du contexte utilisateurInitialisation du contexte utilisateur
Contexte relatif àContexte relatif à S-1-1-0 – Everyone S-1-1-0 – Everyone
Création sans validation au niveau du domaineCréation sans validation au niveau du domaineChamp nom de domaine est vide, pas de groupes dans le jetonChamp nom de domaine est vide, pas de groupes dans le jeton
WebSsoIdentity SsoId = User.Identity as SingleSignOnIdentity;WebSsoIdentity SsoId = User.Identity as SingleSignOnIdentity;IAzClientContext2 azContext;IAzClientContext2 azContext;
// Determine if the user is authenticated// Determine if the user is authenticatedIf (If (WebSsoId.IsAuthenticatedWebSsoId.IsAuthenticated) {) {
azContext = azApp.InitializeClientContext2("Trey Ordering", null);azContext = azApp.InitializeClientContext2("Trey Ordering", null);……
}}
RBAC dans l’application Ordering
AdministratAdministratoror
AdministratAdministratoror
PurchaserPurchaserPurchaserPurchaser PLATINUMPLATINUMPLATINUMPLATINUM SILVERSILVERSILVERSILVERGOLDGOLDGOLDGOLD
Update Billing Update Billing CodeCode
Update Billing Update Billing CodeCode
TâchesTâches
OpérationsOpérations
RôlesRôles
Magasin de politiqueMagasin de politique
AzStore.xml
Update Update Company Company
Contact Phone Contact Phone NumberNumber
Update Update Company Company
Contact Phone Contact Phone NumberNumber
Submit OrderSubmit OrderSubmit OrderSubmit Order Query Order Query Order StatusStatus
Query Order Query Order StatusStatus
Update Update Department Department
CodeCode
Update Update Department Department
CodeCode
Change Change Depart Depart
InformationInformation
Change Change Depart Depart
InformationInformation
Change Change Partner InfoPartner Info
Change Change Partner InfoPartner Info
Order Order PartsPartsOrder Order PartsParts
Définir les rôles en fonction des claimsDéfinir les rôles en fonction des claims
foreach (SecurityProperty securityProperty in SsoId.SecurityPropertyCollection)foreach (SecurityProperty securityProperty in SsoId.SecurityPropertyCollection){{
// For each group claim that we find, we need to add it to the AzMan context// For each group claim that we find, we need to add it to the AzMan contextif (if (securityProperty.Uri == SecurityProperty.GroupClaimUrisecurityProperty.Uri == SecurityProperty.GroupClaimUri )){{object[] roles = new object[1];object[] roles = new object[1];roles[0] = securityProperty.Valueroles[0] = securityProperty.Value; // ; // roleNameroleNameazContext.AddRoles(roles, null);azContext.AddRoles(roles, null);}}
}}
Obtenir les rôles depuis le contexte utilisateurObtenir les rôles depuis le contexte utilisateur
public string[] GetRoles()public string[] GetRoles(){{
object[] roles;object[] roles;string[] strRoles;string[] strRoles;
roles = (object[]) azContext.GetRoles("");roles = (object[]) azContext.GetRoles("");
strRoles = new string[roles.Length];strRoles = new string[roles.Length];
for (int i = 0; i < roles.Length; i++)for (int i = 0; i < roles.Length; i++){{
strRoles[i] = roles[i].ToString();strRoles[i] = roles[i].ToString();}}
return(strRoles);return(strRoles);}}
public bool IsUserInRole(string role)public bool IsUserInRole(string role){{
string[] roles;string[] roles;bool bResult = false;bool bResult = false;
roles = GetRoles();roles = GetRoles();
for (int i = 0; bResult == false && i < roles.Length; i++)for (int i = 0; bResult == false && i < roles.Length; i++){{
if (roles[i].ToLower() == role.ToLower())if (roles[i].ToLower() == role.ToLower()){{
bResult = true;bResult = true;}}
}}
return(bResult);return(bResult);}}
Afficher les éléments d’interface en fonction des rôlesAfficher les éléments d’interface en fonction des rôles
if (IsUserInRole(“PLATINUM")) {if (IsUserInRole(“PLATINUM")) {partnerLevel = “PLATINUM" ;partnerLevel = “PLATINUM" ;
}}
if (IsUserInRole(“GOLD")) {if (IsUserInRole(“GOLD")) {partnerLevel = “GOLD" ;partnerLevel = “GOLD" ;
}}
if (IsUserInRole(“SILVER")) {if (IsUserInRole(“SILVER")) {partnerLevel = “SILVER" ;partnerLevel = “SILVER" ;
}}
if (IsUserInRole(“Purchaser")) {if (IsUserInRole(“Purchaser")) {EnablePurchaserFunction();EnablePurchaserFunction();partnerDiscountLabel.Visible = true;partnerDiscountLabel.Visible = true;partnerDiscountLabel.Text = "As a " + partnerLevel +partnerDiscountLabel.Text = "As a " + partnerLevel +
" partner you receive a " + discountLevel + "% discount!";" partner you receive a " + discountLevel + "% discount!";purchaseLimitText.Text = purchaseLimit;purchaseLimitText.Text = purchaseLimit;
}}
DémonstrationDémonstration
Construire une application « Claims-Aware »
Qu’en est-il du support du IsInRole ASP.NET ?
Logique d’autorisation bâtie sur la correspondance de chaîneLogique d’autorisation bâtie sur la correspondance de chaîneADFS crée un GenericPrincipal peuplé avec les claims ADFS de ADFS crée un GenericPrincipal peuplé avec les claims ADFS de type group en tant que Rôlestype group en tant que RôlesExemple de code pour une vérification d’accès à l’aide de Exemple de code pour une vérification d’accès à l’aide de GenericPrincipalGenericPrincipal
using System.Security.Principal;using System.Security.Principal;……If (User.IsInRole(“Administrators”))If (User.IsInRole(“Administrators”))
// Do something// Do something
Exigences d’une application « Identity-aware » fédérée
Authentification InfrastructureAuthentification Infrastructure
Vérifier que l’utilisateur a présenté une identité valideVérifier que l’utilisateur a présenté une identité valide
Authentification ApplicationAuthentification Application
Vérifier que l’utilisateur a été authentifié par ADFSVérifier que l’utilisateur a été authentifié par ADFS
AutorisationsAutorisations
Vérifier que l’utilisateur dispose des permissions Vérifier que l’utilisateur dispose des permissions appropriées pour la ressourceappropriées pour la ressource
Modification des claimsModification des claims
Ajouter/supprimer/modifier les claims à Ajouter/supprimer/modifier les claims à transmettre sur l’identitétransmettre sur l’identité
Magasin Magasin ADAD
Flot des claims ADFSFlot des claims ADFS
ApplicationApplication
Partenaire - ComptePartenaire - Compte
ApplicationApplication - - RessourceRessource
PeuplementPeuplement TransformatiTransformationon
ActivationActivation
Transmiss
ion des
Transmiss
ion des
claim
scla
ims
Claims Claims en en
sortiesortie
Claims Claims en en
entréeentrée
TransformatiTransformationon
Claims Claims organisationnelleorganisationnelle
ssRessourceRessource
Claims Claims organisationnelleorganisationnelle
ssCompteCompte
Module de transformation de claim
Obtenir des Obtenir des claimsclaims depuis d’autres sources depuis d’autres sourcesRéaliser des transformations de Réaliser des transformations de claimsclaims non disponibles au non disponibles au niveau de l’interface graphique niveau de l’interface graphique Ajouter / Supprimer / Modifier des Ajouter / Supprimer / Modifier des claimsclaims basés sur les règles basés sur les règles métiermétierImplémentationImplémentation
interface interface IClaimTransformIClaimTransform
Interface du module de transformation
Référence à Référence à System.Web.Security.SingleSignOn.ClaimTransformsSystem.Web.Security.SingleSignOn.ClaimTransformsClaimTransforms.dll dans le GAC sous ClaimTransforms.dll dans le GAC sous %windir%\assembly\GAC\%windir%\assembly\GAC\System.Web.Security.SingleSignOn.ClaimTransformSystem.Web.Security.SingleSignOn.ClaimTransform
Méthode Méthode TransformClaimsTransformClaims invoquées deux fois invoquées deux foisPreProcessingPreProcessing : Avant que le FS ne réalise ses propres opérations : Avant que le FS ne réalise ses propres opérations de transformations de de transformations de claimsclaimsPostProcessingPostProcessing : A l’issue de ces opérations : A l’issue de ces opérations
public class CustomTransformModuleClass : IClaimTransformpublic class CustomTransformModuleClass : IClaimTransform{{
public void TransformClaims(public void TransformClaims(SecurityPropertyCollection incomingClaims, SecurityPropertyCollection incomingClaims, SecurityPropertyCollection corporateClaims, SecurityPropertyCollection corporateClaims, SecurityPropertyCollection outgoingClaims, SecurityPropertyCollection outgoingClaims, ClaimTransformStage transformStage, ClaimTransformStage transformStage, string issuer,string issuer,string target)string target)
{{// manipulate claims// manipulate claims
}}} }
Ex. Ex. CustomTransformModule.csCustomTransformModule.cs
Considérations relatives au module de transformation
Réaliser des tâches à même d’offrir en temps d’exécution raisonnableRéaliser des tâches à même d’offrir en temps d’exécution raisonnable
Un module de transformation est directement dans le pipeline de Un module de transformation est directement dans le pipeline de construction de construction de claimsclaims
Tout temps additionnel passé à attendre la construction des claims Tout temps additionnel passé à attendre la construction des claims constitue un temps d’attente supplémentaire pour l’utilisateurconstitue un temps d’attente supplémentaire pour l’utilisateur
Enregistrer le module au niveau de l’interface graphiqueEnregistrer le module au niveau de l’interface graphique
Localisé au niveau de l’onglet Localisé au niveau de l’onglet Transform ModuleTransform Module de de Trust Policy Trust Policy PropertiesProperties
DémonstrationDémonstration
Module de transformation de claims Federation Services
Revue du scénario
Réduire les coûts de supportsRéduire les coûts de supportsAucune gestion des identités partenaires requiseAucune gestion des identités partenaires requiseL’ensemble des identités arrive sous forme d’un ensemble de L’ensemble des identités arrive sous forme d’un ensemble de claimsclaims
Les partenaires sont propriétaires des identitésLes partenaires sont propriétaires des identitésL’application offre un accès basé sur les L’application offre un accès basé sur les claimsclaimsLes Les claimsclaims et les accès sont déterminés par le partenaire et les accès sont déterminés par le partenaire
Interopérer Interopérer WS-Federation Passive Requestor Interop ProfileWS-Federation Passive Requestor Interop Profile (WS-F PRIP) (WS-F PRIP)Les partenaires peuvent envoyer les identités depuis Les partenaires peuvent envoyer les identités depuis d’autres plateformesd’autres plateformes
Améliorer de la sécuritéAméliorer de la sécuritéUn utilisateur supprimé du système d’identité partenaire Un utilisateur supprimé du système d’identité partenaire perd immédiatement accès à l’applicationperd immédiatement accès à l’application
S’appuyer sur l’infrastructure existanteS’appuyer sur l’infrastructure existanteIdentités dans Active Directory, autorisations dans AD/AMIdentités dans Active Directory, autorisations dans AD/AM
Pour plus d’informations sur ADFS
SDK ADFS SDK ADFS sursur MSDN MSDN
http://msdn.microsoft.com/library/en-us/adfs/adfs/portal.asphttp://msdn.microsoft.com/library/en-us/adfs/adfs/portal.asp .NET Show .NET Show « « ADFSADFS » »
http://msdn.microsoft.com/theshow/episode047/default.asphttp://msdn.microsoft.com/theshow/episode047/default.asp
RRejoignez les discussions surejoignez les discussions sur http://www.identityblog.comhttp://www.identityblog.com
Pour plus d’informations sur AzMan
« Designing Application-Managed Authorization »« Designing Application-Managed Authorization »
http://msdn.microsoft.com/library/en-us/dnbda/html/DAMAZ.ahttp://msdn.microsoft.com/library/en-us/dnbda/html/DAMAZ.aspsp
« Role-Based Access Control for Multi-tier Applications Using « Role-Based Access Control for Multi-tier Applications Using Authorization Manager »Authorization Manager »
http://technet2.microsoft.com/WindowsServer/en/Library/72bhttp://technet2.microsoft.com/WindowsServer/en/Library/72b55950-86cc-4c7f-8fbf-3063276cd0b61033.mspx55950-86cc-4c7f-8fbf-3063276cd0b61033.mspx
« Developing Identity-Aware ASP.NET Applications », Microsoft « Developing Identity-Aware ASP.NET Applications », Microsoft Identity and Access Management Series (Identity and Access Management Series (http://go.microsoft.com/fwlink/?LinkId=14841http://go.microsoft.com/fwlink/?LinkId=14841))
http://www.microsoft.com/technet/security/topics/identitymahttp://www.microsoft.com/technet/security/topics/identitymanagement/idmanage/P3ASPD.mspxnagement/idmanage/P3ASPD.mspx
Microsoft FranceMicrosoft France18, avenue du Québec18, avenue du Québec
91 957 Courtaboeuf Cedex91 957 Courtaboeuf Cedex
www.microsoft.com/france
0 825 827 8290 825 827 829
[email protected]@microsoft.com