<?xml 
version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
>

<channel xml:lang="fr">
	<title>OpenID Connect OAuth Server d&#233;di&#233; </title>
	<link>https://oa.dnc.global/</link>
	<description>OAuth Server by DnC (OAuthSD) est un serveur d'authentification qui impl&#233;mente OAuth 2.0 et OpenID Connect.
Avec la connexion unique, une entit&#233; permet aux utilisateurs de ses applications de naviguer de l'une &#224; l'autre de fa&#231;on trans-parente. En centralisant l'authentification des applications et des utilisateurs, un serveur OpenID Connect permet de contr&#244;ler parfaitement l'acc&#232;s des applications et des utilisateurs aux informations sensibles.</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>

	<image>
		<title>&lt;small&gt;OpenID Connect&lt;/small&gt; OAuth Server &lt;small&gt; d&#233;di&#233; &lt;/small&gt;</title>
		<url>https://static.oa.dnc.global/local/cache-vignettes/L144xH126/siteon0-a21bf.png?1733820003</url>
		<link>https://oa.dnc.global/</link>
		<height>126</height>
		<width>144</width>
	</image>



<item xml:lang="fr">
		<title>D&#233;finition des scopes OIDC et g&#233;n&#233;ralit&#233;s sur leur utilisation par les applications</title>
		<link>https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#definitiondesscopesoidcetgeneralitessurleurutilisationparlesapplications</link>
		<guid isPermaLink="true">https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#definitiondesscopesoidcetgeneralitessurleurutilisationparlesapplications</guid>
		<dc:date>2020-10-05T10:22:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>DnC</dc:creator>



		<description>
&lt;p&gt;La port&#233;e de l'autorisation est d&#233;finie par les Scopes. C'est sans doute le point le plus ouvert du standard et donc un concept difficile &#224; ma&#238;triser pour le d&#233;veloppeur d'une application utilisant OpenID Connect. &lt;br class='autobr' /&gt;
La possibilit&#233; de moduler les port&#233;es d'autorisation en fonction de l'application cliente et de l'utilisateur final est une fonctionnalit&#233; exceptionnellement int&#233;ressante d'OAuthSD. &lt;br class='autobr' /&gt;
On voit souvent en OIDC un simple SSO, mais c'est passer &#224; c&#244;t&#233; de toute la puissance du dispositif : le jeton (...)&lt;/p&gt;


-
&lt;a href="https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html" rel="directory"&gt;Sujets communs &#224; Oauth 2 et OpenID Connect&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logo spip_logo_right spip_logos' alt=&#034;&#034; style='float:right' src='https://static.oa.dnc.global/local/cache-vignettes/L150xH130/arton75-579c7.jpg?1734252721' width='150' height='130' /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;La port&#233;e de l'autorisation est d&#233;finie par les Scopes. C'est sans doute le point le plus ouvert du standard et donc un concept difficile &#224; ma&#238;triser pour le d&#233;veloppeur d'une application utilisant OpenID Connect.&lt;/p&gt;
&lt;p&gt;La possibilit&#233; de moduler les port&#233;es d'autorisation en fonction de l'application cliente et de l'utilisateur final est une fonctionnalit&#233; exceptionnellement int&#233;ressante d'OAuthSD.&lt;/p&gt;
&lt;p&gt;On voit souvent en OIDC un simple SSO, mais c'est passer &#224; c&#244;t&#233; de toute la puissance du dispositif : le jeton d'identit&#233; JWT regroupe, de fa&#231;on indissociable et infalsifiable, l'identit&#233; de l'utilisateur final, celle de l'application cliente et les port&#233;es d'autorisation.&lt;/p&gt;
&lt;p&gt;DnC donne un exemple d'application de la transmission des port&#233;es d'autorisation avec &lt;a href=&#034;https://buy.dnc.global&#034; class='spip_out' rel='external'&gt;DnC SaaS&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;OpenID Connect d&#233;finit les scopes en de multiples endroits de la documentation d'OAuth 2.0, sans pourtant donner &#224; ce sujet la synth&#232;se qu'il m&#233;rite. La biblioth&#232;que OAuth2 Server Library for PHP d&#233;velopp&#233;e par Brent Shaffer met en oeuvre les scopes sans que l'auteur en pr&#233;sente la philosophie. Cependant, l'analyse du code de cette biblioth&#232;que permet de compl&#233;ter la sp&#233;cification, de d&#233;gager les principales d&#233;finitions et de proposer un concept d'utilisation.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Quatre niveaux de d&#233;finition des scopes :&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Les Scopes pris en charge par le serveur (Supported scopes)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En plus des scopes r&#233;serv&#233;s et non-r&#233;serv&#233;s d&#233;finis par OpenID Connect, le d&#233;veloppeur d&#233;finit les scopes particuliers utilis&#233;s par les applications. Ils sont inscrits dans le fichier de configuration du serveur (variable $supportedScopes).&lt;/p&gt;
&lt;p&gt;Le scope 'basic' est &#233;galement inscrit dans la configuration en tant que scope par d&#233;faut.&lt;/p&gt;
&lt;p&gt;Seuls ces scopes peuvent &#234;tre utilis&#233;s, le contr&#244;leur Authorize rejettant toute requ&#234;te comprenant un scope absent de cette liste.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Les Scopes r&#233;serv&#233;s (Reserved Scopes)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Les Scopes r&#233;serv&#233;s jouent un r&#244;le particulier&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb1' class='spip_note' rel='appendix' title='Tellement particulier qu'ils n'ont rien &#224; voir avec une port&#233;e d'autorisation, (...)' id='nh1'&gt;1&lt;/a&gt;]&lt;/span&gt;. Ils sont essentiellement utilis&#233;s par le serveur pour modifier le comportement des flux.&lt;/p&gt;
&lt;p&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;strong&gt;openid&lt;/strong&gt; : ce scope indique au serveur d'interpr&#233;ter les requ&#234;tes faites aux points d'entr&#233;e selon les sp&#233;cifications d'OpenID Connect.&lt;/p&gt;
&lt;p&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;strong&gt;&lt;a href='https://static.oa.dnc.global/-OpenID-Connect-SSO-management-de-session-etc-.html#offlineaccess' class='spip_in'&gt;offline_access&lt;/a&gt;&lt;/strong&gt; : Les demandes d'acc&#232;s d'OpenID Connect incluent le jeton d'actualisation uniquement si la port&#233;e offline_access a &#233;t&#233; demand&#233;e et accord&#233;e.&lt;/p&gt;
&lt;p&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;strong&gt;sli&lt;/strong&gt; : ce scope est obligatoire pour que l'application accepte &lt;a href='https://static.oa.dnc.global/-OpenID-Connect-SSO-management-de-session-etc-.html#ssoetconnexionuniquesingleloginidentificationsli' class='spip_in'&gt;l'identification unique&lt;/a&gt; (Single Login Identification, SLI) et la r&#233;-authentification silencieuse (Silent Re-Authentication, SRA) telles que nous les avons impl&#233;ment&#233;es dans OAuthSD.&lt;/p&gt;
&lt;p&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;strong&gt;kerberos&lt;/strong&gt; : ce scope autorise la cr&#233;ation d'une session SLI d'OAuthSD &#224; partir de l'&lt;a href='https://static.oa.dnc.global/-Identifier-l-utilisateur-final-.html#identificationparopenidconnectdesutilisateursidentifiesaveckerberos' class='spip_in'&gt;authentification avec Kerberos&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Notes :&lt;/strong&gt;
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; Les deux premiers scopes sont d&#233;finis par le standard OAuth 2.0, tandis que les deux derniers sont introduits par OAuthSD.
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; Les scopes r&#233;serv&#233;s ne donnent pas lieu &#224; consentement de la part de l'utilisateur final, &#224; l'exception du scope &lt;a href='https://static.oa.dnc.global/-OpenID-Connect-SSO-management-de-session-etc-.html#offlineaccess' class='spip_in'&gt;offline_access&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Les Scopes disponibles pour une application (Available scopes)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ces scopes sont d&#233;finis au moment de l'&lt;a href='https://static.oa.dnc.global/-API-OpenID-Connect-Points-d-extremite-.html#apiopenidconnectpointsdextremite' class='spip_in'&gt;inscription d'une application sur le serveur&lt;/a&gt;. Ils comprennent :
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; tout ou partie des scopes r&#233;serv&#233;s, &lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; des &lt;strong&gt;scopes non-r&#233;serv&#233;s (Non Reserved Scopes)&lt;/strong&gt;, qui sont &lt;a href=&#034;https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims&#034; class='spip_out' rel='external'&gt;les scopes standard d&#233;finis par OpenID Connect&lt;/a&gt; ou d&#233;finis &#224; l'initiative du concepteur de l'application&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb2' class='spip_note' rel='appendix' title='Jusqu'&#224; quel point &#233;tendre la d&#233;finition des scopes ? Nous discutons la (...)' id='nh2'&gt;2&lt;/a&gt;]&lt;/span&gt;. Nous proposons de les appeler &lt;strong&gt;d&#233;clarations priv&#233;es&lt;/strong&gt; (&lt;strong&gt;private scopes&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;Par la suite, une application ne pourra utiliser d'autres scopes que ceux qui auront &#233;t&#233; inscrits ainsi. En particulier, le cont&#244;leur Authorize v&#233;rifie d&#232;s le d&#233;but du processus que les &lt;strong&gt;scopes demand&#233;s&lt;/strong&gt; dans la requ&#234;te figurent bien dans la liste des Scopes disponibles pour l'application (Available scopes).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Les port&#233;es accord&#233;es (Granted scopes)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Une application transmet les scopes dans la demande d'autorisation (appel au point de terminaison Authorize). Ils doivent figurer dans la liste des Scopes disponibles pour une application.&lt;/p&gt;
&lt;p&gt;Certains de ces scopes sont des &lt;strong&gt;demandes d'autorisation (Requested scopes)&lt;/strong&gt;. Une bonne compr&#233;hension du sujet n&#233;cessite de &lt;a href='https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#demandesdeconsentementsurlesporteesdautorisationscopes' class='spip_in'&gt;distinguer deux positions de l'utilisateur final par rapport au propri&#233;taire des donn&#233;es&lt;/a&gt;, comme d&#233;fini par la norme OAuth 2.0 (voir &lt;a href='https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#porteedelautorisationscope' class='spip_in'&gt;Port&#233;e de l'autorisation (Scope)&lt;/a&gt;). En r&#233;sum&#233;, il faut consid&#233;rer ces scopes selon deux cas de figure&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb3' class='spip_note' rel='appendix' title='Comme pr&#233;vu par la norme : voir Port&#233;e de l'autorisation (Scope).' id='nh3'&gt;3&lt;/a&gt;]&lt;/span&gt; :
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; soit &lt;strong&gt;les donn&#233;es prot&#233;g&#233;es sont la propri&#233;t&#233; de l'utilisateur&lt;/strong&gt;, et ces scopes doivent &#234;tre compris comme une demande d'acc&#232;s de l'application &#224; ces donn&#233;es : l'application devra obtenir l'accord de l'utilisateur pour poursuivre, &lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; soit &lt;strong&gt;l'application (au sens large) &#034;poss&#232;de&#034; les donn&#233;es prot&#233;g&#233;es&lt;/strong&gt;, et ces scopes doivent &#234;tre compris comme une port&#233;e accord&#233;e par l'application.&lt;/p&gt;
&lt;p&gt;Dans le deuxi&#232;me cas (si les donn&#233;es appartiennent &#224; l'application) une application peut moduler les privil&#232;ges accord&#233;s &#224; l'utilisateur en fonction du profil de ce dernier qui est traduit par les scopes.&lt;/p&gt;
&lt;p&gt;Si l'application ne pr&#233;voit pas de moduler les privil&#232;ges accord&#233;s, le concepteur peut utiliser les scopes autoris&#233;s ou le scope par d&#233;faut.&lt;/p&gt;
&lt;p&gt;Une fois l'authentification r&#233;alis&#233;e (et, si n&#233;cessaire, les scopes ayant &#233;t&#233; accept&#233;s par l'utilisateur final), les scopes deviennent des port&#233;es accord&#233;es (granted scopes).&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Incorporer au jeton d'identit&#233; des d&#233;clarations suppl&#233;mentaires&lt;/h3&gt;
&lt;p&gt;Pr&#233;cisons que le serveur d'authentification est transparent par rapport aux port&#233;es (scopes) non r&#233;serv&#233;es et aux d&#233;clarations (claims) &#034;non standard&#034; : c'est &#224; la ressource prot&#233;g&#233;e de d&#233;finir ce qui doit en &#234;tre fait dans le cadre d'une application donn&#233;e.&lt;/p&gt;
&lt;p&gt;OAuthSD offre trois approches compl&#233;mentaires pour incorporer des d&#233;clarations suppl&#233;mentaires dans le jeton d'identification :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. OAuthSD : scope &#034;privileges&#034;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ce scope est particulier &#224; OAuthSD dans le cadre des flux d'OpenID Connect.&lt;/p&gt;
&lt;p&gt;Le scope&#034;privileges&#034; comporte les d&#233;clarations (claims) &#034;scope&#034; et &#034;profil&#034;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb4' class='spip_note' rel='appendix' title='Notez qu'il faut distinguer le claim &#034;profil&#034; et le scope &#034;profile&#034;. La (...)' id='nh4'&gt;4&lt;/a&gt;]&lt;/span&gt; qui correspondent aux champs &#233;ponymes de la table users.&lt;/p&gt;
&lt;p&gt;Il revient &#224; une application tierce de d&#233;terminer les valeurs &#224; attribuer au claim &#034;scope&#034;. Pour cela, OAuthSD offre deux techniques d'interface :
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;a href='https://static.oa.dnc.global/-JSON-Web-Token-JWT-JWS-.html#incorporeraujetonjwtdesdeclarationssupplementaires' class='spip_in'&gt;Incorporer au jeton JWT des d&#233;clarations suppl&#233;mentaires&lt;/a&gt;,
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; Utiliser un &lt;a href='https://static.oa.dnc.global/-Techniques-et-code-du-serveur-OAuthSD-.html#apihttprest' class='spip_in'&gt;service HTTP Rest&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Si une application pr&#233;sente le scope &#034;privileges&#034; au contr&#244;leur Authorize, les d&#233;clarations &#034;profil&#034; et &#034;scope&#034; seront incorpor&#233;es aux donn&#233;es UserInfos. Dans cette optique, il s'agit d'une port&#233;e accord&#233;e (Granted Scope) au m&#234;me titre que les port&#233;es &#034;basic&#034;, &#034;email&#034; etc. qui contr&#244;lent l'acc&#232;s aux donn&#233;es de la table users.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;En plus de ce comportement standard, ces d&#233;clarations seront incorpor&#233;es &#224; la charge utile du jeton d'identit&#233;. &lt;br class='autobr' /&gt;
Ainsi l'identit&#233; de l'application, de l'utilisateur final et de ses port&#233;es d'autorisation est parfaitement &#233;tabli par la signature du jeton JWT.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Utilisation du scope &#034;privileges&#034; claim &#034;scope&#034; pour l'attribution de privil&#232;ges dans les applications&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;OAuthSD regroupe les informations sur l'utilisateur final dans la table users. Le champ 'scope' est du type texte et peut donc accueillir toute sorte de donn&#233;es pour d&#233;crire le profil de l'utilisateur ou donner la liste de ses privil&#232;ges. Par exemple, on pourra cr&#233;er un objet de donn&#233;es 'profiler' et le stocker au format Json.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Pour les d&#233;veloppeurs : une technique pour incorporer par programme des d&#233;clarations suppl&#233;mentaires au jeton JWT&lt;/strong&gt;&lt;br class='autobr' /&gt;
En compl&#233;ment des techniques pr&#233;c&#233;dentes, OAuthSD permet d'&lt;a href='https://static.oa.dnc.global/-JSON-Web-Token-JWT-JWS-.html#incorporeraujetonjwtdesdeclarationssupplementaires' class='spip_in'&gt;Incorporer au jeton JWT des d&#233;clarations suppl&#233;mentaires&lt;/a&gt;. Bien que nous pr&#233;sentions cette m&#233;thode en dernier, c'est sans doute celle qui int&#233;ressera le plus les d&#233;veloppeurs. DnC applique cette technique pour r&#233;aliser DnC SaaS.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;DnC SaaS : syst&#232;me de diffusion d'applications en tant que service&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#034;https://buy.dnc.global&#034; class='spip_out' rel='external'&gt;DnC SaaS&lt;/a&gt; couple un syst&#232;me de vente en ligne &#224; un serveur OIDC ( OAuthSD bien &#233;videmment) afin de louer des services en ligne &lt;strong&gt;SaaS - Software as Service&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Le logiciel mis en location est configur&#233; comme application cliente du serveur OIDC.&lt;/p&gt;
&lt;p&gt;Au moment de l'authentification de l'utilisateur final, le module d'identification du contr&#244;leur Authorize fait appel au syst&#232;me de vente en ligne pour v&#233;rifier que l'utilisateur est &#224; jour de ses paiements.&lt;/p&gt;
&lt;p&gt;Cette &#233;tape permet &#233;galement de &lt;strong&gt;d&#233;finir les privil&#232;ges de l'utilisateur final sur l'application&lt;/strong&gt;, par exemple :
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; la validation d'&#233;ventuelles options de l'application prises avec l'abonnement,
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; des droits limit&#233;s (consultation seule ...) au cours d'un d&#233;lai de gr&#226;ce apr&#232;s &#233;ch&#233;ance,
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; etc. &lt;br class='autobr' /&gt;
Les privil&#232;ges sont incorpor&#233;s dans la charge utile du jeton d'identit&#233; (ID Token) sous la forme de d&#233;clarations suppl&#233;mentaires. Les noms des d&#233;clarations et les valeurs transmises sont propres &#224; l'application consid&#233;r&#233;e.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id='nb1'&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href='#nh1' class='spip_note' title='Notes 1' rev='appendix'&gt;1&lt;/a&gt;] &lt;/span&gt;Tellement particulier qu'ils n'ont rien &#224; voir avec une port&#233;e d'autorisation, mais nous apparaissent plut&#244;t comme un moyen de param&#233;trer les flux. Il y a peut-&#234;tre l&#224; un d&#233;faut s&#233;mantique d'OpenID Connect ? Notons qu'IBM d&#233;signe cela sous le terme de &#034;client metadata&#034;, ce qui parait pertinent.&lt;/p&gt;
&lt;/div&gt;&lt;div id='nb2'&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href='#nh2' class='spip_note' title='Notes 2' rev='appendix'&gt;2&lt;/a&gt;] &lt;/span&gt;Jusqu'&#224; quel point &#233;tendre la d&#233;finition des scopes ? Nous discutons la question ici : &lt;a href=&#034;#etendreprofil&#034; class='spip_ancre'&gt;/web/-OpenID-Connect-UserInfo-.html&lt;/a&gt;. Facebook d&#233;finit une centaine de scopes ! Mais, dans la perspective du contr&#244;le de l'acc&#232;s aux web-services et aux API, l'utilisation des scopes peut aller beaucoup plus loin que la seule modulation de Userinfo. Google fait un usage &#233;tendu des scopes pour autoriser l'acc&#232;s aux diff&#233;rentes API. GitHub utilise les scopes pour moduler les acc&#232;s des utilisateurs aux diff&#233;rentes fonctionnalit&#233;s. Il s'agit l&#224; d'applications propri&#233;taire et donc d'une impl&#233;mentation tr&#232;s particuli&#232;re d'OpenID Connect qui montre deux choses : OpenID connect est beaucoup plus qu'un SSO ; A l'oppos&#233; de l'id&#233;e d'un syst&#232;me d'authentification universel (permettant l'acc&#232;s &#224; des applications quelconque avec un seul identifiant), le contr&#244;le de l'acc&#232;s aux applications et au donn&#233;es ne peut se faire que dans un syst&#232;me propri&#233;taire.&lt;/p&gt;
&lt;/div&gt;&lt;div id='nb3'&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href='#nh3' class='spip_note' title='Notes 3' rev='appendix'&gt;3&lt;/a&gt;] &lt;/span&gt;Comme pr&#233;vu par la norme : voir &lt;a href='https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#porteedelautorisationscope' class='spip_in'&gt;Port&#233;e de l'autorisation (Scope)&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div id='nb4'&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href='#nh4' class='spip_note' title='Notes 4' rev='appendix'&gt;4&lt;/a&gt;] &lt;/span&gt;Notez qu'il faut distinguer le claim &#034;profil&#034; et le scope &#034;profile&#034;. La d&#233;finition des scopes est bien embrouill&#233;e !&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Demandes de consentement sur les port&#233;es d'autorisation (scopes)</title>
		<link>https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#demandesdeconsentementsurlesporteesdautorisationscopes</link>
		<guid isPermaLink="true">https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#demandesdeconsentementsurlesporteesdautorisationscopes</guid>
		<dc:date>2019-01-29T10:37:11Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>DnC</dc:creator>



		<description>
&lt;p&gt;Le r&#232;glement g&#233;n&#233;ral sur la protection des donn&#233;es (RGPD) impose une gestion rigoureuse des donn&#233;es personnelles ce qui implique de demander &#224; leur propri&#233;taire l'autorisation d'y acc&#233;der. Quels sont les cas de figure &#224; distinguer ? Comment g&#233;rer les demandes de consentement sur les port&#233;es d'autorisation &#224; bon escient, sans lourdeur ni r&#233;p&#233;tition inutile ? &lt;br class='autobr' /&gt;
Demande de consentement : diff&#233;rents cas de figure &lt;br class='autobr' /&gt;
D&#232;s leur origine, OAuth et OpenID Connect ont &#233;t&#233; pens&#233;s pour prot&#233;ger les donn&#233;es sensibles (...)&lt;/p&gt;


-
&lt;a href="https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html" rel="directory"&gt;Sujets communs &#224; Oauth 2 et OpenID Connect&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logo spip_logo_right spip_logos' alt=&#034;&#034; style='float:right' src='https://static.oa.dnc.global/local/cache-vignettes/L150xH150/arton87-41f5e.png?1734252721' width='150' height='150' /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Le r&#232;glement g&#233;n&#233;ral sur la protection des donn&#233;es (RGPD) impose une gestion rigoureuse des donn&#233;es personnelles ce qui implique de demander &#224; leur propri&#233;taire l'autorisation d'y acc&#233;der. &lt;br class='autobr' /&gt;
Quels sont les cas de figure &#224; distinguer ?&lt;br class='autobr' /&gt;
Comment g&#233;rer les demandes de consentement sur les port&#233;es d'autorisation &#224; bon escient, sans lourdeur ni r&#233;p&#233;tition inutile ?&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;div style=&#034;clear:both;&#034;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 class=&#034;spip&#034;&gt;Demande de consentement : diff&#233;rents cas de figure&lt;/h3&gt;
&lt;p&gt;D&#232;s leur origine, OAuth et OpenID Connect ont &#233;t&#233; pens&#233;s pour prot&#233;ger les donn&#233;es sensibles appartenant &#224; l'utilisateur final, &#224; qui on demande l'autorisation d'y acc&#233;der. Le vocabulaire utilis&#233; et les exemples donn&#233;s dans les sp&#233;cifications sont fortement orient&#233;s par cette vision.&lt;/p&gt;
&lt;p&gt;Cependant, la r&#233;alit&#233; des applications ne se limite pas &#224; ce cas de figure : l'utilisateur de l'application peut &#234;tre distinct du propri&#233;taire des donn&#233;es. Heureusement, OpenID Connect offre un ensemble de techniques qui permettent de s'assurer que l'utilisateur final est bien celui qu'il pr&#233;tend &#234;tre et autoriser son acc&#232;s &#224; des ressources prot&#233;g&#233;es ou des applications qui contiennent des donn&#233;es sensibles, &lt;i&gt;lui appartenant ou non&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Toute la probl&#233;matique du consentement r&#233;side dans la position de l'utilisateur final par rapport au propri&#233;taire des donn&#233;es, comme d&#233;fini par la norme OAuth 2.0 (voir &lt;a href='https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#porteedelautorisationscope' class='spip_in'&gt;Port&#233;e de l'autorisation (Scope)&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Il faut consid&#233;rer &lt;strong&gt;deux paradigmes&lt;/strong&gt; pour la mise en oeuvre de l'authentification :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1 - L'utilisateur final est connect&#233; &#224; une application qui travaille sur ses donn&#233;es personnelles.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;C'est la situation qui a orient&#233; la description d'OAuth et OpenID d&#232;s leur origine et qui impr&#232;gne fortement OpenID Connect avec les donn&#233;es UserInfo. Celles-ci sont segment&#233;es par port&#233;e (scope) de fa&#231;on &#224; n'acc&#233;der qu'aux donn&#233;es n&#233;cessaires &#224; un moment donn&#233;. La sp&#233;cification permet de d&#233;finir de nouveaux scopes et d'&#233;tendre les donn&#233;es personnelles.&lt;/p&gt;
&lt;p&gt;Dans ce cas, il convient de pr&#233;senter &#224; l'utilisateur une demande de consentement pour chaque port&#233;e d'autorisation&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb2-1' class='spip_note' rel='appendix' title='Faut-il demander &#224; l'utilisateur de donner son consentement globalement pour (...)' id='nh2-1'&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;C'est parce-que ce paradigme soustend la conception d'OIDC que l'authentification de l'application cliente a &#233;t&#233; n&#233;glig&#233;e, ce qui se manifeste par l'existence des flux implicites et hybrides qui ne permettent pas cette authentification. De ce point de vue en effet, c'est l'utilisateur qui a choisi l'application et qui, de ce fait, a la responsabilit&#233; de la d&#233;clarer &#034;application de confiance&#034;. Ceci dit, ces flux laissent la porte grande ouverte &#224; des malwares op&#233;rant du c&#244;t&#233; de l'user-agent, ce qui &#233;chappe au contr&#244;le de l'utilisateur final.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2 - L'utilisateur final est connect&#233; &#224; une application &#224; laquelle il fournit des informations personnelles auxquelles des tiers acc&#233;deront ult&#233;rieurement.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Il s'agit donc d'une application &#224; laquelle des tiers authentifi&#233;s peuvent se connecter avec un r&#244;le d&#233;termin&#233;, leur permettant de consulter ou exploiter les donn&#233;es personnelles.&lt;/p&gt;
&lt;p&gt;Ce cas peut &#234;tre trait&#233; de la fa&#231;on suivante :&lt;/p&gt;
&lt;p&gt;B1 - Il est pr&#233;sent&#233; &#224; l'utilisateur final propri&#233;taire des donn&#233;es un avertissement au moment o&#249; il entre dans l'application, libell&#233; en tenant compte des scopes que l'application est susceptible d'utiliser.&lt;/p&gt;
&lt;p&gt;B2 - Il est pr&#233;sent&#233; une demande d'autorisation au moment o&#249; l'utilisateur introduit ses donn&#233;es personnelles dans l'application.&lt;/p&gt;
&lt;p&gt;Nous pourrions mentionner aussi la solution de facilit&#233; qui consiste &#224; :&lt;/p&gt;
&lt;p&gt;B0 - faire approuver, avant toute utilisation, des conditions g&#233;n&#233;rales qui &#233;voquent de fa&#231;on plus ou moins d&#233;taill&#233;e les traitements effectu&#233;s sur les donn&#233;es personnelles. Parfois, cette fa&#231;on de faire ne distingue m&#234;me pas le propri&#233;taire des autres utilisateurs. Elle peut &#233;galement &#234;tre utilis&#233;e pour s'octroyer la dispense d'appliquer le cas A.&lt;/p&gt;
&lt;p&gt;L'id&#233;al serait de demander l'autorisation d'acc&#232;s au cours de l'utilisation de l'application par un tiers : &#034;Bonjour M. Dupont. M. Tournesol souhaite acc&#233;der &#224; vos donn&#233;es scope1, scope2 etc. avec l'application Truc.&#034;&lt;/p&gt;
&lt;p&gt;On pourrait imaginer :&lt;/p&gt;
&lt;p&gt;B3 - un &#233;change d'E-mail, avec toute la difficult&#233; li&#233;e aux d&#233;lai de r&#233;ponse, voire &#224; la non-r&#233;ponse. On imagine difficilement faire cela au cours de chaque session. Il serait plus praticable de le faire p&#233;riodiquement, ou lorsqu'une nouvelle application ou un nouvel agent souhaite acc&#233;der aux donn&#233;es.&lt;/p&gt;
&lt;p&gt;B4 - Une application dans laquelle les deux parties sont connect&#233;es. C'est le cas d'une application &#224; laquelle le propri&#233;taire des donn&#233;es se connecte et &#233;change avec un agent (par exemple un chat avec un conseiller) qui a besoin d'acc&#233;der aux donn&#233;es personnelles au cours de la conversation. Les demandes de consentement pourraient &#234;tre pr&#233;sent&#233;es en temps r&#233;el &#224; l'utilisateur final. C'est parfaitement possible, mais cela ne semble pas une pratique courante. Une difficult&#233; r&#233;side dans le fait que l'on donnerait l'impression &#224; l'utilisateur final que l'on s'interdirait d'acc&#233;der aux donn&#233;es personnelles en dehors de cette proc&#233;dure.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;La mise en oeuvre des demandes de consentement par OAuthSD&lt;/h3&gt;
&lt;p&gt;La plupart des cas de figure ci-dessus devront &#234;tre trait&#233;s diff&#233;remment selon l'application. Tel quel, OpenID Connect offre les moyens de g&#233;rer ces situations au prix de nombreux aller-retours entre le serveur et l'application cliente, &#224; laquelle il appartiendra de d&#233;velopper la logique.&lt;/p&gt;
&lt;p&gt;Un des objectifs d'OAuthSD est de simplifier l'&#233;criture des applications clientes en int&#233;grant le plus possible de fonctionnalit&#233;s dans le serveur d'authentification/autorisation. &lt;br class='autobr' /&gt;
Le cas A est le cas standard auquel OAuthSD r&#233;pond conform&#233;ment aux sp&#233;cifications. Sans pr&#233;tendre prendre totalement en charge chacun des autres cas pr&#233;sent&#233;s ci-dessus, OAuthSD offre des facilit&#233;s d&#233;crites dans ce qui suit.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;La gestion &#034;standard&#034; des consentements&lt;/h3&gt;
&lt;p&gt;La sp&#233;cification d'OpenID Connect permet de traiter pleinement le cas A et offre des outils pour les autres cas.&lt;/p&gt;
&lt;p&gt;Le param&#232;tre d'URL &lt;strong&gt;scope&lt;/strong&gt; d&#233;termine quelles sont les port&#233;es d'autorisation demand&#233;es par l'application cliente. &lt;br class='autobr' /&gt;
Seuls les &lt;strong&gt;scopes non-r&#233;serv&#233;s&lt;/strong&gt;, auxquels s'ajoute le scope &lt;a href='https://static.oa.dnc.global/-OpenID-Connect-SSO-management-de-session-etc-.html#offlineaccess' class='spip_in'&gt;offline_access&lt;/a&gt;, feront l'objet d'une demande de consentement (les autres ont un caract&#232;re technique).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Notes :&lt;/strong&gt;
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; La notion de scope est un fourre-tout d&#233;crit ici : &lt;a href='https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#definitiondesscopesoidcetgeneralitessurleurutilisationparlesapplications' class='spip_in'&gt;D&#233;finition des scopes OIDC et g&#233;n&#233;ralit&#233;s sur leur utilisation par les applications&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La pr&#233;sentation de la demande de consentement d&#233;pend du param&#232;tre d'URL &lt;strong&gt;prompt&lt;/strong&gt; pr&#233;sent dans la requ&#234;te pass&#233;e au contr&#244;leur Authorize&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb2-2' class='spip_note' rel='appendix' title='Voir Authentification utilisant le flux de code d'autorisation OpenID (...)' id='nh2-2'&gt;2&lt;/a&gt;]&lt;/span&gt;. &lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; Si prompt est &#233;gal &#224; 'none' ou 'login', aucun consentement n'est demand&#233; &#224; l'utilisateur final. &lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; Si prompt est omis&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb2-3' class='spip_note' rel='appendix' title='Ce comportement par d&#233;faut peut &#234;tre modifi&#233; dans la configuration.' id='nh2-3'&gt;3&lt;/a&gt;]&lt;/span&gt;, ou est &#233;gal &#224; 'consent' ou 'login consent', les demandes de consentement sont pr&#233;sent&#233;es &#224; l'utilisateur final.&lt;/p&gt;
&lt;p&gt;Une bonne pratique de la gestion des consentements consiste &#224; attendre pour les demander que l'application ait besoin d'acc&#233;der aux donn&#233;es correspondantes, et non syst&#233;matiquement d&#232;s l'entr&#233;e dans l'application. Ceci se fait en appelant le contr&#244;leur Authorize avec le param&#232;tre prompt = 'consent'. &lt;br class='autobr' /&gt;
Cependant, si l'utilisateur n'est pas ou plus connect&#233; &#224; ce moment, il y aura un retour d'erreur.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id='nb2-1'&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href='#nh2-1' class='spip_note' title='Notes 2-1' rev='appendix'&gt;1&lt;/a&gt;] &lt;/span&gt;Faut-il demander &#224; l'utilisateur de donner son consentement globalement pour tous les scopes qui lui sont pr&#233;sent&#233;s ou lui permettre de les approuver un &#224; un ? Nous pensons que les scopes doivent &#234;tre pr&#233;sent&#233;s &#224; l'approbation juste au moment o&#249; l'application cliente a besoin d'acc&#233;der aux donn&#233;es correspondantes. A ce moment, refuser un scope parmi une liste de plusieurs entra&#238;ne le non fonctionnement de l'application, donc une approbation diff&#233;renci&#233;e n'a pas de sens. Dans le formulaire d'approbation, OAuthSD ne pr&#233;sente donc que l'option d'accepter ou refuser globalement la liste pr&#233;sent&#233;e.&lt;/p&gt;
&lt;/div&gt;&lt;div id='nb2-2'&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href='#nh2-2' class='spip_note' title='Notes 2-2' rev='appendix'&gt;2&lt;/a&gt;] &lt;/span&gt;Voir &lt;a href='https://static.oa.dnc.global/-OpenID-Connect-Autorisation-via-un-code-Authorization-Code-Flow-.html#authentificationutilisantlefluxdecodedautorisationopenidconnect' class='spip_in'&gt;Authentification utilisant le flux de code d'autorisation OpenID Connect&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div id='nb2-3'&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href='#nh2-3' class='spip_note' title='Notes 2-3' rev='appendix'&gt;3&lt;/a&gt;] &lt;/span&gt;Ce comportement par d&#233;faut peut &#234;tre modifi&#233; dans la configuration.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;h3 class=&#034;spip&#034;&gt;Traitement d'une demande prompt = 'login grant'&lt;/h3&gt;
&lt;p&gt;Lorsque le contr&#244;leur Authorize re&#231;oit une demande d'authentification avec prompt = 'login grant', la demande login implique de pr&#233;senter &#224; l'utilisateur le formulaire d'authentification, qu'il soit d&#233;j&#224; connect&#233; ou non. Dans ce cas, si l'authentification r&#233;ussit, le contr&#244;leur encha&#238;ne avec la demande de consentement avant de retourner &#224; l'application cliente.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;La m&#233;morisation des accords dans la session de l'utilisateur&lt;/h3&gt;
&lt;p&gt;Alors que le m&#233;canisme de connexion unique (Single Login In, SLI) permet &#224; l'utilisateur final de naviguer dans un groupe d'applications sans avoir &#224; se reconnecter, OAuthSD permet de ne pas r&#233;p&#233;ter inutilement les demandes de consentement en retenant les accords donn&#233;s, application par application, sur la dur&#233;e de la session de l'utilisateur.&lt;/p&gt;
&lt;p&gt;A chaque fois que l'application se connecte au contr&#244;leur Authorize, les scopes non-r&#233;serv&#233;s demand&#233;s sont compar&#233;s &#224; la liste des scopes d&#233;j&#224; consentis au cours de la session de l'utilisateur final. Ceci est r&#233;alis&#233; en relation avec le cookie de session enregistr&#233; dans le domaine du serveur, et donc maintenu au cours de la navigation dans les applications clientes de ce serveur.&lt;/p&gt;
&lt;p&gt;Ce comportement par d&#233;faut peut &#234;tre modifi&#233; dans la configuration (constante DONT_PROMPT_FOR_ALREADY_GRANTED_SCOPE).&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;D&#233;tailler le libell&#233; des scopes selon l'application cliente&lt;/h3&gt;
&lt;p&gt;&lt;i&gt;Fonctionnalit&#233; en cours de d&#233;veloppement.&lt;/i&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Contr&#244;le d'acc&#232;s HTTP (CORS)</title>
		<link>https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#controledacceshttpcors</link>
		<guid isPermaLink="true">https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#controledacceshttpcors</guid>
		<dc:date>2016-11-16T10:52:25Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>DnC</dc:creator>



		<description>
&lt;p&gt;Les requ&#234;tes HTTP de type multi-origines (Cross-Origin Resource Sharing) sont des requ&#234;tes pour des ressources localis&#233;es sur un domaine diff&#233;rent de celui qui est &#224; l'origine de la requ&#234;te. &lt;br class='autobr' /&gt;
C'est exactement la configuration dans laquelle nous nous trouvons quand nous voulons appliquer les protocoles d'authentification &#224; la communication entre applications r&#233;parties sur Internet. &lt;br class='autobr' /&gt;
Du fait de nombreux abus (attaques de type cross-site request forgery ou CSRF), les requ&#234;tes HTTP crois&#233;es ont &#233;t&#233; (...)&lt;/p&gt;


-
&lt;a href="https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html" rel="directory"&gt;Sujets communs &#224; Oauth 2 et OpenID Connect&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Les requ&#234;tes HTTP de type multi-origines (Cross-Origin Resource Sharing) sont des requ&#234;tes pour des ressources localis&#233;es sur un domaine diff&#233;rent de celui qui est &#224; l'origine de la requ&#234;te.&lt;/p&gt;
&lt;p&gt;C'est exactement la configuration dans laquelle nous nous trouvons quand nous voulons appliquer les protocoles d'authentification &#224; la communication entre applications r&#233;parties sur Internet.&lt;/p&gt;
&lt;p&gt;Du fait de nombreux abus (attaques de type cross-site request forgery ou CSRF), les requ&#234;tes HTTP crois&#233;es ont &#233;t&#233; sujettes &#224; des restrictions pour des raisons de s&#233;curit&#233; bien compr&#233;hensibles.&lt;/p&gt;
&lt;p&gt;Le but de cet article et d'expliquer comment franchir ces restrictions en toute l&#233;gitimit&#233; et s&#233;curit&#233; dans le cadre de la mise en oeuvre du service OAuth Server by DnC.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;R&#233;f&#233;rences :
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;a href=&#034;https://developer.mozilla.org/fr/docs/HTTP/Access_control_CORS&#034; class='spip_out' rel='external'&gt;Contr&#244;le d'acc&#232;s HTTP&lt;/a&gt;
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;a href=&#034;https://www.w3.org/TR/cors/&#034; class='spip_out' rel='external'&gt;Cross-Origin Resource Sharing&lt;/a&gt;
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;a href=&#034;http://www.cert.ssi.gouv.fr/site/CERTA-2008-INF-003/&#034; class='spip_out' rel='external'&gt;Les attaques de type cross-site request forgery&lt;/a&gt;&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Partage de ressources avec requ&#234;te multi-origines&lt;/h3&gt;
&lt;p&gt;Il est de nombreuses configurations dans lesquelles les h&#244;tes de l'application et les points de terminaison des services ( ressources prot&#233;g&#233;es (RS) ou API ) se situent sur des serveurs diff&#233;rents. Les applications dont les ressources sont r&#233;parties dans le Web (Public Cloud) constituent un bon exemple de cette configuration.&lt;/p&gt;
&lt;p&gt;En utilisation Web normale, cette approche multi-h&#244;te ou, plus pr&#233;cis&#233;ment, &#034;multi-origines&#034; est restreinte pour des raisons de s&#233;curit&#233;. Les r&#232;gles de partage de ressources multi-origines (Cross-Origin Resource Sharing, CORS) permettent de r&#233;pondre &#224; ce type de requ&#234;tes en toute s&#233;curit&#233;.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Diff&#233;rents cas de figure&lt;/h3&gt;
&lt;p&gt;Comme toujours lorsque nous abordons la question de la communication entre applications r&#233;parties sur diff&#233;rents domaines, nous devons d'abord distinguer deux cas :
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; les serveurs de ressources prot&#233;g&#233;es (RS) sont interrog&#233;s par des applications clientes identifi&#233;es &#224; l'avance ; c'est toujours le cas lorsque les applications et les RS appartiennent &#224; une m&#234;me organisation ;
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; les RS n'ont pas une connaissance pr&#233;alable des applications.&lt;/p&gt;
&lt;p&gt;Le premier cas est trivial. L'autorisation des requ&#234;tes multi-origines (Cross-Origin Resource Sharing) pourra &#234;tre donn&#233;e, par exemple si le service est publi&#233; par un serveur http Apache ou compatible, dans le fichier .htaccess du RS :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;##### CORS pour monsite.com :&lt;br /&gt; SetEnvIf Origin &#034;^http(s)?://(.+\.)?monsite\.com$&#034; origin_is=$0 &lt;br /&gt; Header always set Access-Control-Allow-Origin %{origin_is}e env=origin_is&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Seul le deuxi&#232;me cas m&#233;rite notre attention.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Autorisation apr&#232;s validation du jeton d'identit&#233;&lt;/h3&gt;
&lt;p&gt;Dans le deuxi&#232;me cas (l'application cliente n'est pas connue du RS) notre solution consiste &#224; &lt;strong&gt;inscrire le champ Access-Control-Allow-Origin dans la r&#233;ponse du serveur de ressource (RS) si, et seulement si, le jeton a &#233;t&#233; valid&#233; aupr&#232;s du serveur d'authentification&lt;/strong&gt;. Cela semble la bonne m&#233;thode, puisque le RS s'en remet au serveur d'authentification pour r&#233;aliser toutes les v&#233;rifications n&#233;cessaires, et n'a donc pas besoin de conna&#238;tre au pr&#233;alable le domaine d'origine de la requ&#234;te&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb3-1' class='spip_note' rel='appendix' title='Voici une d&#233;monstration claire de la diff&#233;rence entre autorisation et (...)' id='nh3-1'&gt;1&lt;/a&gt;]&lt;/span&gt;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb3-2' class='spip_note' rel='appendix' title='Ceci ne veut pas dire que le RS r&#233;pond &#224; n'importe quelle application qui (...)' id='nh3-2'&gt;2&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Voici un exemple de fonction d'autorisation en PHP pour SPIP 3.1, dans laquelle le RS valide le jeton par introspection (voir : &lt;a href='https://static.oa.dnc.global/-Gestion-du-jeton-d-acces-.html#validationdujetondaccesparinterrogationdupointdextremiteresource' class='spip_in'&gt;Validation du jeton d'acc&#232;s par interrogation du point d'extr&#233;mit&#233; &#034;resource&#034;&lt;/a&gt;) :&lt;/p&gt;
&lt;div class=&#034;coloration_code code&#034;&gt;&lt;div class=&#034;spip_php code&#034;&gt;&lt;div class=&#034;php&#034;&gt;&lt;ol&gt;&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt;&lt;span style=&#034;color: #666666; font-style: italic;&#034;&gt;/*&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt;&lt;span style=&#034;color: #666666; font-style: italic;&#034;&gt;Autorisation avec OAuth Server by DnC&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt;&lt;span style=&#034;color: #666666; font-style: italic;&#034;&gt;Auteur : Bertrand degoy&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt;&lt;span style=&#034;color: #666666; font-style: italic;&#034;&gt;Copyright (c) 2016 DnC&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt;&lt;span style=&#034;color: #666666; font-style: italic;&#034;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt;&lt;span style=&#034;color: #000000; font-weight: bold;&#034;&gt;function&lt;/span&gt; oauth_authorize&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$accesstoken&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&#123;&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #b1b100;&#034;&gt;if&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;!&lt;/span&gt;&lt;a href=&#034;http://www.php.net/empty&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$idtoken&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #666666; font-style: italic;&#034;&gt;// Interroger OAuth Server by DnC&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; include_spip&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #0000ff;&#034;&gt;'inc/distant'&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #666666; font-style: italic;&#034;&gt;// V&#233;rifier le jeton d'identit&#233; (ID token)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$url&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;&#034;https://oa.dnc.global/introspect.php?token=&#034;&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$idtoken&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;&amp;&lt;/span&gt;requester_ip&lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$_SERVER&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&#034;color: #0000ff;&#034;&gt;'REMOTE_ADDR'&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$res&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt; recuperer_url&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$url&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #b1b100;&#034;&gt;if&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;int&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$res&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&#034;color: #0000ff;&#034;&gt;'status'&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;===&lt;/span&gt; &lt;span style=&#034;color: #cc66cc;&#034;&gt;200&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #b1b100;&#034;&gt;if&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt; &lt;a href=&#034;http://www.php.net/isset&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$_SERVER&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&#034;color: #0000ff;&#034;&gt;&#034;HTTP_ORIGIN&#034;&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #666666; font-style: italic;&#034;&gt;// Acc&#232;s HTTP (CORS) : autoriser l'origine&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$issuer&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt; &lt;a href=&#034;http://www.php.net/trim&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;trim&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&#034;http://www.php.net/strtr&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;strtr&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$_SERVER&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&#034;color: #0000ff;&#034;&gt;&#034;REMOTE_ADDR&#034;&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;'&lt;&gt;&#034;\''&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;'[]##'&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;a href=&#034;http://www.php.net/header&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;header&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #0000ff;&#034;&gt;'Access-Control-Allow-Origin'&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$issuer&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #b1b100;&#034;&gt;return&lt;/span&gt; &lt;span style=&#034;color: #009900; font-weight: bold;&#034;&gt;true&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&#125;&lt;/span&gt; &lt;span style=&#034;color: #b1b100;&#034;&gt;else&lt;/span&gt; &lt;span style=&#034;color: #b1b100;&#034;&gt;return&lt;/span&gt; &lt;span style=&#034;color: #009900; font-weight: bold;&#034;&gt;false&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&#125;&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class='download code_download'&gt;&lt;a href='https://static.oa.dnc.global/local/cache-code/94bbaf185ed1f85864cff76b04da0a87.txt'&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;S&#233;curit&#233; :&lt;/strong&gt;&lt;br class='autobr' /&gt;
Notez que l'IP $_SERVER['REMOTE_ADDR'] est pass&#233;e &#224; l'introspection par le param&#232;tre 'requester_ip' et sera compar&#233;e &#224; l'IP de l'application cliente enregistr&#233;e sur le serveur. Il n'y a donc pas de risque de r&#233;pondre &#224; une application &#233;trang&#232;re. Voyez : &lt;a href='https://static.oa.dnc.global/-Authentifier-l-application-.html#verificationdeloriginedelarequeterecueparunserveurderessource' class='spip_in'&gt;V&#233;rification de l'origine de la requ&#234;te re&#231;ue par un serveur de ressource&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tester :&lt;/strong&gt;&lt;br class='autobr' /&gt;
&lt;a href=&#034;http://chemindeleau.com/?page=test-rpc-3&#034; class='spip_url spip_out' rel='external'&gt;http://chemindeleau.com/?page=test-rpc-3&lt;/a&gt; (utilise la fonction ProtectedApi_GET_auto() d&#233;crite ici : &lt;a href='https://static.oa.dnc.global/-Autorisation-via-un-code-Authorization-Code-Grant-.html#unefonctionpourtoutsimplifier' class='spip_in'&gt;Une fonction pour tout simplifier !&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Cet exemple s'appuie sur l'&lt;a href=&#034;http://r.dnc.global/api-http-rest.html&#034; class='spip_out' rel='external'&gt;API HTTP REST de Radar&lt;/a&gt;. Le site &lt;a href=&#034;http://chemindeleau.com&#034; class='spip_out' rel='external'&gt;Chemin de l'eau&lt;/a&gt; est un site op&#233;rationnel qui met en &#339;uvre des fonctionnalit&#233;s issues des prototypes OAuthSD et Radar.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Message d'erreur : Blocage d'une requ&#234;te multi-origines &lt;/h3&gt;
&lt;p&gt;&#034;Blocage d'une requ&#234;te multi-origines (Cross-Origin Request) : la politique &#171; Same Origin &#187; ne permet pas de consulter la ressource distante situ&#233;e sur &lt;a href=&#034;http://r.dnc.global/http.api/collectionjson/gis?lat=47.8655638&amp;lon=5.3314162&amp;dmax=10&amp;token=&#034; class='spip_url spip_out auto' rel='nofollow external'&gt;http://r.dnc.global/http.api/collectionjson/gis?lat=47.8655638&amp;lon=5.3314162&amp;dmax=10&amp;token=&lt;/a&gt;. Raison : &#233;chec du canal de pr&#233;-v&#233;rification des requ&#234;tes CORS.&#034;&lt;/p&gt;
&lt;p&gt;La requ&#234;te suivante, bien que le type indiqu&#233; soit 'GET', est n&#233;goci&#233;e avec la m&#233;thode 'OPTIONS'. Il en r&#233;sulte que &lt;strong&gt;la requ&#234;te cross-site est de type requ&#234;te pr&#233;v&#233;rifi&#233;e&lt;/strong&gt; (&#034;preflighted requests&#034;) :&lt;/p&gt;
&lt;div class=&#034;coloration_code code&#034;&gt;&lt;div class=&#034;spip_php code&#034;&gt;&lt;div class=&#034;php&#034;&gt;&lt;ol&gt;&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt;&lt;span style=&#034;color: #339933;&#034;&gt;&lt;&lt;/span&gt;div id&lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt;&lt;span style=&#034;color: #0000ff;&#034;&gt;&#034;result&#034;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;&gt;&lt;/&lt;/span&gt;div&lt;span style=&#034;color: #339933;&#034;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt;&lt;span style=&#034;color: #339933;&#034;&gt;&lt;&lt;/span&gt;script&lt;span style=&#034;color: #339933;&#034;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; $&lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt;ajax&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&#123;&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; url&lt;span style=&#034;color: #339933;&#034;&gt;:&lt;/span&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;'http://r.dnc.global/http.api/collectionjson/gis'&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; dataType&lt;span style=&#034;color: #339933;&#034;&gt;:&lt;/span&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;'json'&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; type&lt;span style=&#034;color: #339933;&#034;&gt;:&lt;/span&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;'GET'&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; contentType&lt;span style=&#034;color: #339933;&#034;&gt;:&lt;/span&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;'application/json'&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; data&lt;span style=&#034;color: #339933;&#034;&gt;:&lt;/span&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;'lat=47.8655638&amp;lon=5.3314162&amp;dmax=10&amp;token=#SESSION{auth_token}'&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; timeout&lt;span style=&#034;color: #339933;&#034;&gt;:&lt;/span&gt; &lt;span style=&#034;color: #cc66cc;&#034;&gt;15000&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; success&lt;span style=&#034;color: #339933;&#034;&gt;:&lt;/span&gt; &lt;span style=&#034;color: #000000; font-weight: bold;&#034;&gt;function&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;data&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #000000; font-weight: bold;&#034;&gt;var&lt;/span&gt; text &lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;'&lt;b&gt;Requete : '&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;+&lt;/span&gt; data&lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt;collection&lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt;href &lt;span style=&#034;color: #339933;&#034;&gt;+&lt;/span&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;'&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;'&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; items &lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt; data&lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt;collection&lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt;items&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #b1b100;&#034;&gt;for&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000000; font-weight: bold;&#034;&gt;var&lt;/span&gt; i&lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt;&lt;span style=&#034;color: #cc66cc;&#034;&gt;0&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt; i &lt;span style=&#034;color: #339933;&#034;&gt;&lt;&lt;/span&gt; items&lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt;length&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt; i&lt;span style=&#034;color: #339933;&#034;&gt;++&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #b1b100;&#034;&gt;for&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000000; font-weight: bold;&#034;&gt;var&lt;/span&gt; j&lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt;&lt;span style=&#034;color: #cc66cc;&#034;&gt;0&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt; j &lt;span style=&#034;color: #339933;&#034;&gt;&lt;&lt;/span&gt; items&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#91;&lt;/span&gt;i&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt;data&lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt;length&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt; j&lt;span style=&#034;color: #339933;&#034;&gt;++&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; text &lt;span style=&#034;color: #339933;&#034;&gt;+=&lt;/span&gt; items&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#91;&lt;/span&gt;i&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt;data&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#91;&lt;/span&gt;j&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt;name &lt;span style=&#034;color: #339933;&#034;&gt;+&lt;/span&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;'='&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;+&lt;/span&gt; items&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#91;&lt;/span&gt;i&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt;data&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#91;&lt;/span&gt;j&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt;value &lt;span style=&#034;color: #339933;&#034;&gt;+&lt;/span&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;&#034;&lt;br /&gt;&#034;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; text &lt;span style=&#034;color: #339933;&#034;&gt;+=&lt;/span&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;&#034;&lt;br /&gt;&#034;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; $&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #0000ff;&#034;&gt;&#034;#result&#034;&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt;html&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;text&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&#125;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; error&lt;span style=&#034;color: #339933;&#034;&gt;:&lt;/span&gt; &lt;span style=&#034;color: #000000; font-weight: bold;&#034;&gt;function&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;oops&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #666666; font-style: italic;&#034;&gt;// oops.statusText returns error&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; $&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #0000ff;&#034;&gt;&#034;#result&#034;&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt;html&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;oops&lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt;statusText&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&#125;&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt;&lt;span style=&#034;color: #000000; font-weight: bold;&#034;&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class='download code_download'&gt;&lt;a href='https://static.oa.dnc.global/local/cache-code/128051be6bcbfd919640db9360b076af.txt'&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Cliquez sur la vignette pour voir la requ&#234;te et la r&#233;ponse :&lt;/p&gt;
&lt;dl class='spip_document_9 spip_documents spip_documents_center'&gt;
&lt;dt&gt;&lt;a href='https://static.oa.dnc.global/IMG/png/cors_1-2.png' title='PNG - 41.6 ko' type=&#034;image/png&#034;&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L150xH50/cors_1-2-aa057-fa8cc.png?1733821239' width='150' height='50' alt='' /&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;/dl&gt;
&lt;p&gt;(Article &#224; compl&#233;ter. Mais est-ce pertinent ? L'utilisation de script expose le jeton, ce n'est pas la m&#233;thode recommand&#233;e).&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id='nb3-1'&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href='#nh3-1' class='spip_note' title='Notes 3-1' rev='appendix'&gt;1&lt;/a&gt;] &lt;/span&gt;Voici une d&#233;monstration claire de la diff&#233;rence entre autorisation et authentification : le serveur de ressource va r&#233;pondre sans rien savoir &lt;i&gt;a priori&lt;/i&gt; de l'identit&#233; de l'application cliente ni de l'utilisateur final. OpenID Connect permet de r&#233;aliser l'authentification, donc de r&#233;pondre (ou non) en fonction de l'identit&#233; de l'application, de l'utilisateur final, voire des port&#233;es d'autorisation (scopes).&lt;/p&gt;
&lt;/div&gt;&lt;div id='nb3-2'&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href='#nh3-2' class='spip_note' title='Notes 3-2' rev='appendix'&gt;2&lt;/a&gt;] &lt;/span&gt;Ceci ne veut pas dire que le RS r&#233;pond &#224; n'importe quelle application qui pr&#233;sente le jeton, voir : &lt;a href='https://static.oa.dnc.global/-Authentifier-l-application-.html#verificationdeloriginedelarequeterecueparunserveurderessource' class='spip_in'&gt;V&#233;rification de l'origine de la requ&#234;te re&#231;ue par un serveur de ressource&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Documents de r&#233;f&#233;rence</title>
		<link>https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#documentsdereference</link>
		<guid isPermaLink="true">https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#documentsdereference</guid>
		<dc:date>2016-11-11T17:27:20Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>DnC</dc:creator>



		<description>
&lt;p&gt;Documents essentiels &lt;br class='autobr' /&gt;
Synth&#232;se : OAuth 2.0 Code : Brent Shaffer's OAuth Server PHP &lt;br class='autobr' /&gt;
Documents de l'IETF RFC 6749 L'architecture d'authentification OAuth 2.0. L'architecture d'autorisation OAuth 2.0 permet &#224; une application tierce d'obtenir un acc&#232;s limit&#233; &#224; un service HTTP, soit au nom d'un propri&#233;taire de ressource en orchestrant une interaction d'approbation entre le propri&#233;taire de la ressource et le service HTTP, soit en autorisant l'application tierce &#224; obtenir l'acc&#232;s en son propre nom. RFC 7523 (...)&lt;/p&gt;


-
&lt;a href="https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html" rel="directory"&gt;Sujets communs &#224; Oauth 2 et OpenID Connect&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h3 class=&#034;spip&#034;&gt;Documents essentiels&lt;/h3&gt;
&lt;p&gt;Synth&#232;se : &lt;a href=&#034;https://oauth.net/2/&#034; class='spip_out' rel='external'&gt;OAuth 2.0&lt;/a&gt;&lt;br class='autobr' /&gt;
Code : &lt;a href=&#034;https://github.com/bshaffer/oauth2-server-php&#034; class='spip_out' rel='external'&gt;Brent Shaffer's OAuth Server PHP&lt;/a&gt;&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Documents de l'IETF&lt;/h3&gt;
&lt;p&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;strong&gt; &lt;a href=&#034;https://tools.ietf.org/html/rfc6749&#034; class='spip_out' rel='external'&gt;RFC 6749&lt;/a&gt; L'architecture d'authentification OAuth 2.0.&lt;/strong&gt;&lt;br class='autobr' /&gt;
L'architecture d'autorisation OAuth 2.0 permet &#224; une application tierce d'obtenir un acc&#232;s limit&#233; &#224; un service HTTP, soit au nom d'un propri&#233;taire de ressource en orchestrant une interaction d'approbation entre le propri&#233;taire de la ressource et le service HTTP, soit en autorisant l'application tierce &#224; obtenir l'acc&#232;s en son propre nom.&lt;/p&gt;
&lt;p&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;strong&gt;&lt;a href=&#034;https://tools.ietf.org/html/rfc7523&#034; class='spip_out' rel='external'&gt;RFC 7523&lt;/a&gt; JSON Web Token (JWT) Profil pour les soumissions d'authentification et d'autorisation de client OAuth 2.0.&lt;/strong&gt;&lt;br class='autobr' /&gt;
Cette sp&#233;cification d&#233;finit l'utilisation d'un JSON Web Token (JWT) Bearer Token comme moyen de demander un jeton d'acc&#232;s OAuth 2.0 ainsi que pour l'authentification du client.&lt;/p&gt;
&lt;p&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;strong&gt;&lt;a href=&#034;https://tools.ietf.org/html/rfc7516&#034; class='spip_out' rel='external'&gt;RFC 7516&lt;/a&gt; JSON Web Encryption (JWE)&lt;/strong&gt;&lt;br class='autobr' /&gt;
JSON Web Encryption (JWE) repr&#233;sente du contenu chiffr&#233; bas&#233; sur JSON. Les algorithmes cryptographiques et les identificateurs &#224; utiliser avec cette sp&#233;cification sont d&#233;crits dans le document JSON Sp&#233;cification des Algorithmes Web (JWA) et registres IANA d&#233;finis par cette sp&#233;cification. En relation, la signature num&#233;rique et les capacit&#233;s du Code d'Authentification de Message (MAC) sont d&#233;crites dans le document s&#233;par&#233; Sp&#233;cification JSON Web Signature (JWS).&lt;/p&gt;
&lt;p&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;strong&gt;&lt;a href=&#034;https://tools.ietf.org/html/rfc7515&#034; class='spip_out' rel='external'&gt;RFC 7515&lt;/a&gt; JSON Web Signature (JWS)&lt;/strong&gt;&lt;br class='autobr' /&gt;
JSON Web Signature (JWS) repr&#233;sente du contenu s&#233;curis&#233; par signature num&#233;rique ou des codes d'authentification de message (MACs) utilisant des structures de donn&#233;es bas&#233;es sur JSON. Les algorithmes cryptographiques et les identificateurs &#224; utiliser avec cette sp&#233;cification sont d&#233;crits dans le document JSON Web Algorithmes (JWA) et un registre IANA d&#233;fini par la sp&#233;cification. Les capacit&#233;s de cryptage associ&#233;es sont d&#233;crites par la sp&#233;cification distincte JSON Web Encryption (JWE).&lt;/p&gt;
&lt;p&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;strong&gt;&lt;a href=&#034;https://tools.ietf.org/html/rfc7662&#034; class='spip_out' rel='external'&gt;RFC 7662&lt;/a&gt; OAuth 2.0 Token Introspection&lt;/strong&gt;&lt;br class='autobr' /&gt;
Cette sp&#233;cification d&#233;finit une m&#233;thode permettant &#224; une ressource prot&#233;g&#233;e d'interroger un serveur d'autorisation OAuth 2.0 pour d&#233;terminer l'&#233;tat actif d'un jeton OAuth 2.0 et pour d&#233;terminer des m&#233;ta-informations sur ce jeton.&lt;br class='autobr' /&gt;
Les d&#233;ploiements OAuth 2.0 peuvent utiliser cette m&#233;thode pour transmettre &#224; la ressource prot&#233;g&#233;e des informations sur le contexte d'autorisation du jeton &#224; partir du serveur d'autorisation.&lt;/p&gt;
&lt;p&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;strong&gt; &lt;a href=&#034;https://tools.ietf.org/html/rfc7009&#034; class='spip_out' rel='external'&gt;RFC 7009&lt;/a&gt; OAuth 2.0 Token Revocation.&lt;/strong&gt;&lt;br class='autobr' /&gt;
Ce document propose un point d'extr&#233;mit&#233; suppl&#233;mentaire pour le serveur d'autorisation OAuth, qui permet aux clients d'avertir le serveur d'autorisation qu'un jeton de rafra&#238;chissement ou d'acc&#232;s pr&#233;c&#233;demment obtenu n'est plus n&#233;cessaire. Cela permet au serveur d'autorisation de nettoyer les donn&#233;es de s&#233;curit&#233;. Une demande de r&#233;vocation invalidera le jeton en question et, le cas &#233;ch&#233;ant, d'autres jetons bas&#233;s sur la m&#234;me autorisation.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;OpenID Connect&lt;/h3&gt;
&lt;p&gt;La r&#233;f&#233;rence : &lt;strong&gt;&lt;a href=&#034;http://openid.net/connect/&#034; class='spip_out' rel='external'&gt;OpenID Connect&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&#034;http://openid.net/specs/openid-connect-core-1_0.html&#034; class='spip_out' rel='external'&gt;OpenID Connect Core 1.0 incorporating errata set 1&lt;/a&gt;&lt;/strong&gt;&lt;br class='autobr' /&gt;
OpenID Connect 1.0 est une couche d'identit&#233; simple fond&#233;e sur le protocole OAuth 2.0. Il permet aux clients de v&#233;rifier l'identit&#233; de l'utilisateur final en fonction de l'authentification effectu&#233;e par un serveur d'autorisation, ainsi que d'obtenir des informations de profil de base sur l'utilisateur final de mani&#232;re interop&#233;rable et REST.&lt;br class='autobr' /&gt;
Cette sp&#233;cification d&#233;finit la fonctionnalit&#233; de base OpenID Connect : authentification construite sur OAuth 2.0 et l'utilisation de d&#233;clarations (claims) pour communiquer des informations sur l'utilisateur final. Il d&#233;crit &#233;galement les consid&#233;rations de s&#233;curit&#233; et de confidentialit&#233; pour l'utilisation d'OpenID Connect.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&#034;https://openid.net/specs/openid-connect-basic-1_0.html&#034; class='spip_out' rel='external'&gt;OpenID Connect Basic Client Implementer's Guide 1.0 - draft 37&lt;/a&gt;&lt;/strong&gt;&lt;br class='autobr' /&gt;
OpenID Connect 1.0 est une couche d'identit&#233; simple fond&#233;e sur le protocole OAuth 2.0. Il permet aux clients de v&#233;rifier l'identit&#233; de l'utilisateur final en fonction de l'authentification effectu&#233;e par un serveur d'autorisation, ainsi que d'obtenir des informations de profil de base sur l'utilisateur final de mani&#232;re interop&#233;rable et REST.&lt;br class='autobr' /&gt;
Ce Guide d'impl&#233;mentation OpenID Connect Basic Client 1.0 contient un sous-ensemble de la sp&#233;cification OpenID Connect Core 1.0 con&#231;ue pour &#234;tre facile &#224; lire et &#224; impl&#233;menter pour les &#233;changes entre applications Web bas&#233;s sur le flux d'autorisation OAuth. Ce document double intentionnellement le contenu de la sp&#233;cification Core pour fournir un guide d'impl&#233;mentation autonome pour des d&#233;veloppements d'applications Web &#233;l&#233;mentaires utilisant le flux de code d'autorisation OAuth.&lt;br class='autobr' /&gt;
Les fournisseurs OpenID et les applications non Web doivent plut&#244;t consulter la sp&#233;cification Core.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Documents de Microsoft Exchange&lt;/h3&gt;
&lt;p&gt;Exchange 2013 utilise un jeton JWT (JSON Web Token) pour le jeton d'identit&#233;. La documentation technique d'Exchange appelle &#034;Jeton d'identit&#233;&#034; quelque chose de tr&#232;s similaire &#224; l'ID Token d&#233;fini par OpenID Connect. Il est donc int&#233;ressant de consulter les documents suivants :&lt;/p&gt;
&lt;p&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;a href=&#034;https://msdn.microsoft.com/fr-fr/library/office/fp179838.aspx&#034; class='spip_out' rel='external'&gt;Pr&#233;sentation du jeton d'identit&#233; Exchange&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;a href=&#034;https://msdn.microsoft.com/fr-fr/library/office/dn270544.aspx&#034; class='spip_out' rel='external'&gt;Utilisation de PHP pour valider un jeton d'identit&#233;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Envoi d'une requ&#234;te &#224; un serveur de ressource (RS)</title>
		<link>https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#envoidunerequeteaunserveurderessourcers</link>
		<guid isPermaLink="true">https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#envoidunerequeteaunserveurderessourcers</guid>
		<dc:date>2016-11-07T09:06:55Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>DnC</dc:creator>



		<description>&lt;p&gt;Dans cet article, nous traitons de l'acc&#232;s &#224; une ressource prot&#233;g&#233;e suivant le protocole HTTP REST, avec les bonnes pratiques.&lt;/p&gt;
&lt;p&gt;Envoi d'une requ&#234;te &#224; une ressource prot&#233;g&#233;e&lt;/p&gt;
&lt;p&gt;Il y a trois m&#233;thodes pour l'envoi d'une requ&#234;te &#224; une ressource prot&#233;g&#233;e : une bonne, une acceptable et une non recommand&#233;e. Ce qui suit est une traduction de parties de la RFC 6750, section 2 :&lt;/p&gt;
&lt;p&gt;2. Requ&#234;tes authentifi&#233;es&lt;/p&gt;
&lt;p&gt;Cette section d&#233;finit trois m&#233;thodes d'envoi de jetons d'acc&#232;s aux serveurs de ressources. Les clients NE DOIVENT PAS utiliser (...)&lt;/p&gt;

-
&lt;a href="https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html" rel="directory"&gt;Sujets communs &#224; Oauth 2 et OpenID Connect&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Dans cet article, nous traitons de l'acc&#232;s &#224; une ressource prot&#233;g&#233;e de type HTTP REST, avec les bonnes pratiques.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h3 class=&#034;spip&#034;&gt;Envoi d'une requ&#234;te &#224; une ressource prot&#233;g&#233;e&lt;/h3&gt;
&lt;p&gt;Il y a trois m&#233;thodes pour l'envoi d'une requ&#234;te &#224; une ressource prot&#233;g&#233;e : une bonne, une acceptable et une mauvaise :&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Ce qui suit est en partie traduit de la &lt;a href=&#034;https://tools.ietf.org/html/rfc6750&#034; class='spip_out' rel='external'&gt;RFC 6750&lt;/a&gt;, section 2&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Requ&#234;tes authentifi&#233;es&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cette section d&#233;finit trois m&#233;thodes d'envoi de jetons d'acc&#232;s aux serveurs de ressources. Les clients NE DOIVENT PAS utiliser plus d'une m&#233;thode pour transmettre le jeton dans chaque requ&#234;te.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.1. Demande d'autorisation par Champ d'en-t&#234;te (la bonne m&#233;thode)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; Lors de l'envoi du jeton d'acc&#232;s par l'en-t&#234;te de la requ&#234;te (Request Header) dans le champ &#034;Authorization&#034; d&#233;fini par HTTP / 1.1 [RFC2617], le client utilise le sch&#233;ma d'authentification &#034;Bearer&#034; pour transmettre le jeton d'acc&#232;s.&lt;br class='autobr' /&gt;
Par exemple :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt; GET / resource HTTP / 1.1&lt;br /&gt; Host: oa.dnc.global&lt;br /&gt; Authorization: Bearer mF_9.B5f-4.1JqM&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Exemples de code :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PHP&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;coloration_code code&#034;&gt;&lt;div class=&#034;spip_php code&#034;&gt;&lt;div class=&#034;php&#034;&gt;&lt;ol&gt;&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$h&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt; &lt;a href=&#034;http://www.php.net/curl_init&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;curl_init&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #0000ff;&#034;&gt;'https://oa.dnc.global/userinfo'&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;a href=&#034;http://www.php.net/curl_setopt&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;curl_setopt&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$h&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; CURLOPT_RETURNTRANSFER&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; &lt;span style=&#034;color: #009900; font-weight: bold;&#034;&gt;true&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;a href=&#034;http://www.php.net/curl_setopt&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;curl_setopt&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$h&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; CURLOPT_TIMEOUT&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; &lt;span style=&#034;color: #cc66cc;&#034;&gt;10&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;a href=&#034;http://www.php.net/curl_setopt&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;curl_setopt&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$h&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; CURLOPT_HTTPHEADER&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;a href=&#034;http://www.php.net/array&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #0000ff;&#034;&gt;'Authorization: Bearer '&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$access_token&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$res&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt; &lt;a href=&#034;http://www.php.net/curl_exec&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;curl_exec&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$h&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class='download code_download'&gt;&lt;a href='https://static.oa.dnc.global/local/cache-code/3a08e3db9ab751312e4cbcd54bcaaab5.txt'&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;SPIP&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;coloration_code code&#034;&gt;&lt;div class=&#034;spip_php code&#034;&gt;&lt;div class=&#034;php&#034;&gt;&lt;ol&gt;&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$url&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;&#034;https://oa.dnc.global/userinfo&#034;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$options&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt; &lt;a href=&#034;http://www.php.net/array&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;'methode'&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;=&gt;&lt;/span&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;'GET'&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;'datas'&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;=&gt;&lt;/span&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;'Authorization: Bearer '&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$access_token&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$res&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt; recuperer_url&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$url&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$options&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class='download code_download'&gt;&lt;a href='https://static.oa.dnc.global/local/cache-code/8ff1b5755e93e483a908806c1db6bb8f.txt'&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt; Les clients DOIVENT faire des requ&#234;tes authentifi&#233;es avec un jeton Bearer en utilisant le champ d'en-t&#234;te de demande &#171; Authorization &#187; avec le sch&#233;ma d'autorisation du protocole HTTP &#171; Bearer &#187;. Les serveurs de ressources DOIVENT supporter cette m&#233;thode.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.2. Param&#232;tres form-urlencoded dans le corps (une m&#233;thode acceptable sous conditions)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lors de l'envoi du jeton d'acc&#232;s dans le corps d'entit&#233; de requ&#234;te HTTP, le Client ajoute le jeton d'acc&#232;s au corps de requ&#234;te en Param&#232;tre &#034;access_token&#034;. Le client NE DOIT PAS utiliser cette m&#233;thode &#224; moins que toutes les conditions suivantes ne soient remplies :
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; L'ent&#234;te d'entit&#233; de requ&#234;te HTTP inclut le champ d'en-t&#234;te &#034;Content-Type&#034; &#034;application / x-www-form-urlencoded&#034;.
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; Le corps de l'entit&#233; suit les exigences d'encodage du type de contenu &#034;Application / x-www-form-urlencoded&#034; tel que d&#233;fini par HTML 4.01 [W3C.REC-html401-19991224].
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; Le corps de l'entit&#233; de demande HTTP est mono-partie.
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; Le contenu cod&#233; dans le corps de l'entit&#233; DOIT se composer enti&#232;rement de caract&#232;res ASCII [USASCII].
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; La m&#233;thode de requ&#234;te HTTP suit la s&#233;mantique d&#233;finie pour le corps de requ&#234;te. En particulier, cela signifie que la m&#233;thode &#034;GET&#034; NE DOIT PAS &#234;tre utilis&#233;e.&lt;/p&gt;
&lt;p&gt;Le corps de l'entit&#233; PEUT inclure d'autres param&#232;tres sp&#233;cifiques aux requ&#234;tes, auquel cas le param&#232;tre &#034;access_token&#034; DOIT &#234;tre correctement s&#233;par&#233; des param&#232;tres sp&#233;cifiques &#224; la requ&#234;te en utilisant le caract&#232;re &#034;&amp;&#034; (ASCII Code 38).&lt;/p&gt;
&lt;p&gt;Par exemple, le client effectue la requ&#234;te HTTP suivante en utilisant la s&#233;curit&#233; des couches de transport :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt; POST / ressource HTTP / 1.1&lt;br /&gt; Host: oa.dnc.global&lt;br /&gt; Content-Type: application/ x-www-form-urlencoded&lt;br /&gt; access_token = mF_9.B5f-4.1JqM&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;La m&#233;thode &#034;application/ x-www-form-urlencoded&#034; NE DOIT PAS &#234;tre utilis&#233;e sauf dans les contextes d'application o&#249; les navigateurs participants n'ont pas acc&#232;s au champ d'en-t&#234;te de demande &#034;Authorization&#034;. Les serveurs PEUVENT soutenir cette m&#233;thode.&lt;/p&gt;
&lt;p&gt;Exemple de code :&lt;br class='autobr' /&gt;
&lt;strong&gt;PHP&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;coloration_code code&#034;&gt;&lt;div class=&#034;spip_php code&#034;&gt;&lt;div class=&#034;php&#034;&gt;&lt;ol&gt;&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$data2&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt; &lt;a href=&#034;http://www.php.net/array&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;'access_token'&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;=&gt;&lt;/span&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$access_token&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$h&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt; &lt;a href=&#034;http://www.php.net/curl_init&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;curl_init&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$userinfo_endpoint&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;a href=&#034;http://www.php.net/curl_setopt&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;curl_setopt&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$h&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; CURLOPT_RETURNTRANSFER&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; &lt;span style=&#034;color: #009900; font-weight: bold;&#034;&gt;true&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;a href=&#034;http://www.php.net/curl_setopt&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;curl_setopt&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$h&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; CURLOPT_TIMEOUT&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; &lt;span style=&#034;color: #cc66cc;&#034;&gt;10&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;a href=&#034;http://www.php.net/curl_setopt&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;curl_setopt&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$h&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; CURLOPT_POST&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; &lt;span style=&#034;color: #009900; font-weight: bold;&#034;&gt;true&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;a href=&#034;http://www.php.net/curl_setopt&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;curl_setopt&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$h&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; CURLOPT_HTTPHEADER&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;a href=&#034;http://www.php.net/array&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #0000ff;&#034;&gt;'Content-Type: application/x-www-form-urlencoded'&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;a href=&#034;http://www.php.net/curl_setopt&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;curl_setopt&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$h&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; CURLOPT_POSTFIELDS&lt;span style=&#034;color: #339933;&#034;&gt;,&lt;/span&gt; &lt;a href=&#034;http://www.php.net/http_build_query&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;http_build_query&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$data2&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$res&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt; &lt;a href=&#034;http://www.php.net/curl_exec&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;curl_exec&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$h&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class='download code_download'&gt;&lt;a href='https://static.oa.dnc.global/local/cache-code/83cecfd4e97d7da3571b4cbb4ea74573.txt'&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;2.3. Param&#232;tres de requ&#234;te dans l'URI (la mauvaise m&#233;thode)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lors de l'envoi du jeton d'acc&#232;s dans l'URI de requ&#234;te HTTP, le client ajoute le jeton d'acc&#232;s au composant de requ&#234;te de l'URI tel que d&#233;fini par &#034;Uniform Resource Identifier (URI) : Syntaxe g&#233;n&#233;rique&#034; [RFC3986], en utilisant le param&#232;tre &#034;access_token&#034;.&lt;/p&gt;
&lt;p&gt;Par exemple, le client effectue la requ&#234;te HTTP suivante en utilisant la s&#233;curit&#233; des couches de transport :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt; GET /resource?access_token=mF_9.B5f-4.1JqM HTTP / 1.1&lt;br /&gt; Host: oa.dnc.global&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;Les clients utilisant la m&#233;thode URI Query Parameter DEVRAIENT &#233;galement envoyer un ent&#234;te Cache-Control contenant l'option &#034;no-store&#034;. Les r&#233;ponses de succ&#232;s (status 2XX) du serveur &#224; ces demandes Serveur DOIVENT contenir un ent&#234;te Cache-Control avec l'option &#034;private&#034;.&lt;/p&gt;
&lt;p&gt;En raison des faiblesses de s&#233;curit&#233; associ&#233;es &#224; la m&#233;thode URI (Voir la section 5), y compris la forte probabilit&#233; que l'URL contenant le jeton d'acc&#232;s soit enregistr&#233;e, elle NE DOIT PAS &#234;tre utilis&#233;e &#224; moins qu'il soit impossible de transporter le jeton d'acc&#232;s dans le champ d'en-t&#234;te de requ&#234;te &#034;Authorization&#034; ou dans le corps d'entit&#233; de la requ&#234;te HTTP. Les serveurs de ressources PEUVENT supporter cette m&#233;thode.&lt;/p&gt;
&lt;p&gt;Cette m&#233;thode est incluse pour documenter une utilisation possible ; son utilisation n'est pas recommand&#233;e en raison de ses d&#233;ficiences en mati&#232;re de s&#233;curit&#233; (voir section 5), mais &#233;galement parce qu'elle utilise un nom de param&#232;tre de requ&#234;te r&#233;serv&#233;, ce qui est contraire aux meilleures pratiques de l'espace de noms URI, d&#233;finies par &#171; Architecture of the World Wide Web, Volume One&#034; [W3C.REC-webarch-20041215].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Voir aussi :&lt;/strong&gt;
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;a href='https://static.oa.dnc.global/-Gestion-du-jeton-d-acces-.html#validationdujetondaccesparinterrogationdupointdextremiteresource' class='spip_in'&gt;Validation du jeton d'acc&#232;s par interrogation du point d'extr&#233;mit&#233; &#034;resource&#034;&lt;/a&gt;
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &lt;a href='https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#controledacceshttpcors' class='spip_in'&gt;Contr&#244;le d'acc&#232;s HTTP (CORS)&lt;/a&gt;&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Recommandation de s&#233;curit&#233;&lt;/h3&gt;
&lt;p&gt;Les ressources prot&#233;g&#233;es qui re&#231;oivent un jeton doivent toujours le v&#233;rifier. Elles devraient le faire par Introspection, et devraient toujours transmettre le &lt;a href=&#034;https://oa.dnc.global/web/-JSON-Web-Token-JWT-18-.html#PasMalware&#034; class='spip_out' rel='external'&gt;param&#232;tre 'requester_ip'&lt;/a&gt; pour &#233;viter de r&#233;pondre &#224; un malware.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Port&#233;e de l'autorisation (Scope)</title>
		<link>https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#porteedelautorisationscope</link>
		<guid isPermaLink="true">https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#porteedelautorisationscope</guid>
		<dc:date>2016-11-03T06:31:11Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>DnC</dc:creator>



		<description>
&lt;p&gt;Les Scopes d&#233;finissent l'&#233;tendue des droits (les actions permises sur les donn&#233;es de la ressource prot&#233;g&#233;e) attach&#233;s au jeton d'acc&#232;s qui est transmis par l'application cliente aux applications tierces (Serveurs de ressources). Celles-ci &#233;num&#232;rent les scopes attach&#233;s &#224; l'autorisation ; elles ont la responsabilit&#233; d'agir en cons&#233;quence pour permettre ou non l'acc&#232;s de l'application cliente aux donn&#233;es prot&#233;g&#233;es. &lt;br class='autobr' /&gt;
Il est important de noter que les droits port&#233;s par un scope ne d&#233;pendent que de la fa&#231;on dont (...)&lt;/p&gt;


-
&lt;a href="https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html" rel="directory"&gt;Sujets communs &#224; Oauth 2 et OpenID Connect&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Les Scopes d&#233;finissent l'&#233;tendue des droits (les actions permises sur les donn&#233;es de la ressource prot&#233;g&#233;e) attach&#233;s au jeton d'acc&#232;s qui est transmis par l'application cliente aux applications tierces (Serveurs de ressources). Celles-ci &#233;num&#232;rent les scopes attach&#233;s &#224; l'autorisation ; elles ont la responsabilit&#233; d'agir en cons&#233;quence pour permettre ou non l'acc&#232;s de l'application cliente aux donn&#233;es prot&#233;g&#233;es.&lt;/p&gt;
&lt;p&gt;Il est important de noter que les droits port&#233;s par un scope ne d&#233;pendent que de la fa&#231;on dont l'application tierce en tient compte (ou non). Autrement dit, l'application tierce doit &#234;tre une application de confiance, parfaitement identifiable par l'utilisateur final. De m&#234;me, l'utilisateur final doit &#234;tre authentifi&#233;. OAuth Server by DnC s'attache &#224; apporter des solutions innovantes pour la qualification des applications et des utilisateurs, ce qui constitue une grande part de sa valeur ajout&#233;e.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h3 class=&#034;spip&#034;&gt;D&#233;finition&lt;/h3&gt;
&lt;p&gt;L'attribut &#034;scope&#034; est d&#233;fini dans la section 3.3 de la [RFC6749].&lt;/p&gt;
&lt;p&gt;L'attribut &#034;scope&#034; est une liste de valeurs sensibles &#224; la casse, d&#233;limit&#233;es par des espaces, indiquant la port&#233;e requise du jeton d'acc&#232;s pour acc&#233;der &#224; la ressource demand&#233;e.&lt;/p&gt;
&lt;p&gt;Les valeurs &#034;scope&#034; sont d&#233;finies par l'impl&#233;mentation ; il n'y a pas de registre centralis&#233; pour eux ; les valeurs autoris&#233;es sont d&#233;finies par le serveur d'autorisation.&lt;/p&gt;
&lt;p&gt;L'ordre des valeurs &#034;scope&#034; n'est pas significatif.&lt;/p&gt;
&lt;p&gt;Dans certains cas, la valeur &#034;scope&#034; sera utilis&#233;e lors de la demande d'un nouveau jeton d'acc&#232;s avec une &#233;tendue d'acc&#232;s suffisante pour utiliser la ressource prot&#233;g&#233;e.&lt;/p&gt;
&lt;p&gt;L'utilisation de l'attribut &#034;scope&#034; est OPTIONNELLE.&lt;/p&gt;
&lt;p&gt;L'attribut &#034;scope&#034; NE DOIT PAS appara&#238;tre plus d'une fois. &lt;br class='autobr' /&gt;
&lt;a id=&#034;DeuxCas&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Deux cas de figure&lt;/h3&gt;
&lt;p&gt;La norme OAuth 2.0 (&lt;a href=&#034;https://tools.ietf.org/html/rfc6749&#034; class='spip_out' rel='external'&gt;RFC 6749&lt;/a&gt;) distingue deux cas de figure dans lesquels les scopes seront utilis&#233;s diff&#233;remment :&lt;/p&gt;
&lt;p&gt;1. &lt;strong&gt;L'utilisateur final est propri&#233;taire des donn&#233;es prot&#233;g&#233;es&lt;/strong&gt;, et c'est donc lui qui autorise l'acc&#232;s &#224; ses donn&#233;es par les applications clientes tierces. Pour cela il s&#233;lectionne les scopes parmi ceux qui lui sont pr&#233;sent&#233;s au moment de la proc&#233;dure d'autorisation. Le serveur de ressource ne doit permettre l'acc&#232;s qu'aux ressources autoris&#233;es en fonction des scopes s&#233;lectionn&#233;s.&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb4-1' class='spip_note' rel='appendix' title='C'est souvent beaucoup plus simple que cela : l'application signale les (...)' id='nh4-1'&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;2. &lt;strong&gt;L'application cliente est elle-m&#234;me propri&#233;taire des donn&#233;es&lt;/strong&gt; situ&#233;es sur les serveurs de ressources : elle autorise l'utilisateur final &#224; acc&#233;der &#224; ces donn&#233;es en son nom propre. Dans ce cas, les scopes sont d&#233;finis par l'application cliente&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb4-2' class='spip_note' rel='appendix' title='Ou plus g&#233;n&#233;ralement &#034;par l'impl&#233;mentation&#034;. En effet, le concepteur de (...)' id='nh4-2'&gt;2&lt;/a&gt;]&lt;/span&gt;. Il est important de consid&#233;rer que cela donne &#224; l'application cliente le moyen de moduler les autorisations selon le statut ou le profil de l'utilisateur, ce qui est un m&#233;canisme tr&#232;s puissant puisque cette modulation de l'autorisation est propag&#233;e aux applications tierces.&lt;/p&gt;
&lt;p&gt;Voyez &#233;galement &lt;a href='https://static.oa.dnc.global/-Plus-.html#identitybydnc' class='spip_in'&gt;Identity by DnC&lt;/a&gt; qui apporte une solution innovante pour moduler les scopes selon le profil des utilisateurs.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;La norme OAuth 2.0 ne donne pas un jeu de scopes pr&#233;d&#233;fini&lt;/h3&gt;
&lt;p&gt;OAuth d&#233;finit les scopes et les m&#233;canismes attach&#233;s de fa&#231;on tr&#232;s g&#233;n&#233;rale. Rappelons que OAuth sert de base &#224; diff&#233;rents protocoles qui en font un usage diff&#233;rent selon les applications.&lt;/p&gt;
&lt;p&gt;Un jeu de scopes peut &#234;tre d&#233;fini &#224; la fois pour segmenter un ensemble de donn&#233;es en sous-ensembles (diviser un profil en identit&#233;, adresse postale, donn&#233;es personnelle etc.), ou pour d&#233;finir les actions (lecture, &#233;criture, suppression etc.) permises sur les donn&#233;es, ou ces deux usages simultan&#233;ment. &lt;br class='autobr' /&gt;
On voit qu'ils d&#233;pendent de la nature des ressources et de l'utilisation que pourraient en faire les applications clientes. Les scopes peuvent donc &#234;tre tr&#232;s vari&#233;s.&lt;/p&gt;
&lt;p&gt;Un serveur OAuth suivant la norme OAuth 2.0 (comme c'est le cas de OAuth Server by DnC) doit donc &#234;tre totalement transparent &#224; leur d&#233;finition et &#224; leur usage :
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; les scopes sont d&#233;finis par le concepteur du serveur de ressources,
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; c'est au serveur de ressource d'assurer le respect des autorisations d&#233;finies par les scopes accompagnant le jeton d'acc&#232;s au moment de la requ&#234;te,
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; les scopes qu'une application cliente peut utiliser sont librement d&#233;finis au moment de son inscription sur le serveur d'autorisation.&lt;/p&gt;
&lt;p&gt;Ceci a des cons&#233;quences tr&#232;s importantes :&lt;/p&gt;
&lt;p&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; Soit les scopes ont une d&#233;finition tr&#232;s g&#233;n&#233;rale, et le serveur de ressource peut r&#233;pondre &#224; des requ&#234;tes en provenance d'application clientes qui lui sont totalement &#233;trang&#232;res,&lt;/p&gt;
&lt;p&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; Soit les scopes ont une signification plus pr&#233;cise, et les serveurs de ressources comme les applications clientes doivent avoir une connaissance mutuelle. Cela peut se produire dans le cadre d'un protocole particulier, dans un ensemble particulier d'applications ou dans un espace contr&#244;l&#233; par une organisation (corporate realm).&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;OpenID Connect : une d&#233;finition ouverte des scopes&lt;/h3&gt;
&lt;p&gt;OpenID Connect est un protocole d'authentification construit sur OAuth.&lt;/p&gt;
&lt;p&gt;Concernant les scopes, OpenID connect d&#233;finit un &lt;a href=&#034;https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims&#034; class='spip_out' rel='external'&gt;jeu de scopes standards&lt;/a&gt;, adapt&#233;s &#224; la fonction d'authentification de l'utilisateur final, mais permet &#233;galement l'utilisation de scopes particuliers.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id='nb4-1'&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href='#nh4-1' class='spip_note' title='Notes 4-1' rev='appendix'&gt;1&lt;/a&gt;] &lt;/span&gt;C'est souvent beaucoup plus simple que cela : l'application signale les scopes qu'elle demande, et l'utilisateur final termine la proc&#233;dure si les donn&#233;es r&#233;clam&#233;es (claims) lui conviennent, ou il abandonne.&lt;/p&gt;
&lt;/div&gt;&lt;div id='nb4-2'&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href='#nh4-2' class='spip_note' title='Notes 4-2' rev='appendix'&gt;2&lt;/a&gt;] &lt;/span&gt;Ou plus g&#233;n&#233;ralement &#034;par l'impl&#233;mentation&#034;. En effet, le concepteur de l'application cliente d&#233;finit les scopes en fonction de ce qu'elle attend et de ce qu'elle en fait. Mais les scopes autoris&#233;s pour une application cliente peuvent &#234;tre utilis&#233;s ou non, assortis &#233;ventuellement d'un param&#232;tre, en fonction des droits que l'on veut accorder &#224; l'utilisateur final. Ceci peut aussi bien &#234;tre d&#233;termin&#233; par le serveur d'authentification au moment o&#249; l'on cr&#233;e le jeton, en fonction de conditions ext&#233;rieures &#224; l'application cliente.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>R&#233;ponse UserInfo</title>
		<link>https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#reponseuserinfo</link>
		<guid isPermaLink="true">https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#reponseuserinfo</guid>
		<dc:date>2016-10-25T10:46:30Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>DnC</dc:creator>



		<description>
&lt;p&gt;Le protocole OpenID Connect d&#233;finit des informations de profil standard devant &#234;tre retourn&#233;es en r&#233;ponse &#224; une requ&#234;te UserInfo. &lt;br class='autobr' /&gt;
Il permet &#233;galement d'&#233;tendre ces donn&#233;es pour r&#233;pondre aux besoins d'applications clientes sp&#233;cifiques. OAuth Server by DnC propose un jeu &#233;tendu. &lt;br class='autobr' /&gt;
Cependant, il convient de d&#233;finir avec soin les informations qui rel&#232;vent d'un serveur d'authentification et celles qui devraient &#234;tre servies &#224; part. &lt;br class='autobr' /&gt; Informations de profil standard et scopes standards &lt;br class='autobr' /&gt;
La sp&#233;cification de (...)&lt;/p&gt;


-
&lt;a href="https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html" rel="directory"&gt;Sujets communs &#224; Oauth 2 et OpenID Connect&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Le protocole OpenID Connect d&#233;finit des informations de profil standard devant &#234;tre retourn&#233;es en r&#233;ponse &#224; une requ&#234;te UserInfo. &lt;br class='autobr' /&gt;
Il permet &#233;galement d'&#233;tendre ces donn&#233;es pour r&#233;pondre aux besoins d'applications clientes sp&#233;cifiques. OAuth Server by DnC propose un jeu &#233;tendu. &lt;br class='autobr' /&gt;
Cependant, il convient de d&#233;finir avec soin les informations qui rel&#232;vent d'un serveur d'authentification et celles qui devraient &#234;tre servies &#224; part.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;&lt;a id=&#034;oidcscopesstd&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Informations de profil standard et scopes standards&lt;/h3&gt;
&lt;p&gt;La sp&#233;cification de UserInfo dans le standard OpenID Connect figure ici : &lt;a href=&#034;http://openid.net/specs/openid-connect-basic-1_0-15.html#id_res&#034; class='spip_out' rel='external'&gt;UserInfo Response&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Dans l'&#233;tat actuel du d&#233;veloppement, OAuth Server by DnC fournit les d&#233;clarations (claims), autrement dit informations de profil, suivantes en fonction du scope (ou des scopes) :&lt;/p&gt;
&lt;table class=&#034;spip&#034;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id7a33_c0'&gt; Scope &lt;/th&gt;&lt;th id='id7a33_c1'&gt; Informations de profil (claims)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id7a33_c0'&gt;profile&lt;/td&gt;
&lt;td headers='id7a33_c1'&gt;name, family_name, given_name, middle_name, nickname, profile, picture, website, gender, birthday, zoneinfo, locale, updated_at&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id7a33_c0'&gt;email&lt;/td&gt;
&lt;td headers='id7a33_c1'&gt;email, verified&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id7a33_c0'&gt;address&lt;/td&gt;
&lt;td headers='id7a33_c1'&gt;address, street_address, locality, region, postal_code, country&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id7a33_c0'&gt;phone&lt;/td&gt;
&lt;td headers='id7a33_c1'&gt;phone_number&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;[dnc2]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Notes : &lt;/strong&gt; &lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; La sp&#233;cification indique qu'il n'est pas garanti que la r&#233;ponse UserInfo Endpoint corresponde &#224; l'utilisateur identifi&#233; par l'&#233;l&#233;ment sub du jeton d'identit&#233; (Token ID)&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb6-1' class='spip_note' rel='appendix' title='Pourquoi ?' id='nh6-1'&gt;1&lt;/a&gt;]&lt;/span&gt;. Avant de consid&#233;rer la r&#233;ponse UserInfo comme valide, il convient de v&#233;rifier que la d&#233;claration sub dans la r&#233;ponse UserInfo correspond exactement &#224; la d&#233;claration sub du jeton d'identit&#233; (Token ID).
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; La d&#233;claration sub est toujours incluse dans la r&#233;ponse, par d&#233;faut, c'est &#224; dire y compris en l'absence de Scope.
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; Lors de la certification OpenID Connect, nous avons constat&#233; que la d&#233;claration name est &#233;galement exig&#233;e par d&#233;faut&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb6-2' class='spip_note' rel='appendix' title='A &#233;tudier : est-ce conforme &#224; la sp&#233;cification ?' id='nh6-2'&gt;2&lt;/a&gt;]&lt;/span&gt;. &lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; La d&#233;claration name est une valeur compos&#233;e avec les valeurs d'autres champs en fonction de r&#232;gles locales&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb6-3' class='spip_note' rel='appendix' title='Voir la sp&#233;cification &#167; 2.4.2 : &#034;End-User's full name in displayable form (...)' id='nh6-3'&gt;3&lt;/a&gt;]&lt;/span&gt;. De ce fait (mais aussi en application des r&#232;gles de normalisation des bases de donn&#233;es relationnelles), ce champ n'est pas pr&#233;sent dans la table users, mais il est calcul&#233; par le contr&#244;leur UserInfo. Dans l'&#233;tat actuel du d&#233;veloppement, la valeur de name est d&#233;termin&#233;e comme suit :&lt;/p&gt;
&lt;div class=&#034;coloration_code code&#034;&gt;&lt;div class=&#034;spip_php code&#034; data-clipboard-text=&#034;$name = strtoupper($userinfo['given_name']) . ' ' . strtoupper($userinfo['family_name']);&#034;&gt;&lt;div class=&#034;php&#034;&gt;&lt;ol&gt;&lt;li style=&#034;font-weight: normal; vertical-align:top;&#034;&gt;&lt;div style=&#034;&#034;&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$name&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt; &lt;a href=&#034;http://www.php.net/strtoupper&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;strtoupper&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$userinfo&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&#034;color: #0000ff;&#034;&gt;'given_name'&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt; &lt;span style=&#034;color: #0000ff;&#034;&gt;' '&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;.&lt;/span&gt; &lt;a href=&#034;http://www.php.net/strtoupper&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;strtoupper&lt;/span&gt;&lt;/a&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&#034;color: #000088;&#034;&gt;$userinfo&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&#034;color: #0000ff;&#034;&gt;'family_name'&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class=&#034;spip&#034;&gt;Informations de profil &#233;tendu&lt;/h3&gt;
&lt;p&gt;La d&#233;finition standard des couples scope-claims n'est pas satisfaisante pour deux raisons principales :
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; le scope profile appelle trop d'informations, m&#233;langeant des information essentielles et l&#233;gitimement acceptables par l'utilisateur final avec des informations secondaires et plus intimes, telles que gender et birthdate.
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; &#224; l'inverse, plus d'informations sur l'utilisateur devraient &#234;tre disponibles.&lt;/p&gt;
&lt;p&gt;La norme permettant de d&#233;finir des scope et des claims additionnels, une impl&#233;mentation sp&#233;cifique d'OAuth Server by DnC pourrait exposer de nouveaux couples scope-claims mieux appropri&#233;s.&lt;/p&gt;
&lt;p&gt;Voici par exemple des scopes permettant de d&#233;finir des employ&#233;s d'une entreprise :&lt;/p&gt;
&lt;table class=&#034;spip&#034;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='ida20b_c0'&gt; Scope &lt;/th&gt;&lt;th id='ida20b_c1'&gt; Informations de profil (claims)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='ida20b_c0'&gt;job&lt;/td&gt;
&lt;td headers='ida20b_c1'&gt;job_title, job_street_address, job_locality, job_region, job_postal_code, job_country, job_phone, job_phone2, job_mobile, job_fax, job_email, job_website&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='ida20b_c0'&gt;firm&lt;/td&gt;
&lt;td headers='ida20b_c1'&gt;firm_name, firm_street_address, firm_locality, firm_region, firm_postal_code, firm_country, firm_phone, firm_phone2, firm_mobile, firm_fax, firm_email, firm_website&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='ida20b_c0'&gt;trading&lt;/td&gt;
&lt;td headers='ida20b_c1'&gt;legalidentity, siret, rcs, vat_id, terms, rights&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Voici un autre exemple permettant &#224; une application eCommerce d'authentifier ses clients :&lt;/p&gt;
&lt;table class=&#034;spip&#034;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='idbfd2_c0'&gt; Scope &lt;/th&gt;&lt;th id='idbfd2_c1'&gt; Informations de profil (claims)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idbfd2_c0'&gt;delivery&lt;/td&gt;
&lt;td headers='idbfd2_c1'&gt;delivery_fullname, delivery_street_address, delivery_locality, delivery_region, delivery_postal_code, delivery_country, delivery_phone, delivery_infos&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idbfd2_c0'&gt;billing&lt;/td&gt;
&lt;td headers='idbfd2_c1'&gt;billing_fullname, billing_street_address, billing_locality, billing_region, billing_postal_code, billing_country, billing_phone, billing_vat_id&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idbfd2_c0'&gt;bank&lt;/td&gt;
&lt;td headers='idbfd2_c1'&gt;bank_name, bank_full_address, bank_bic, bank_iban&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;a id=&#034;etendreprofil&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style=&#034;clear:both;&#034;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 class=&#034;spip&#034;&gt;Comment &#233;tendre les informations de profil ?&lt;/h3&gt;
&lt;p&gt;Il faut distinguer deux configurations du serveur d'authentification :&lt;/p&gt;
&lt;p&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; le serveur est con&#231;u pour des applications vari&#233;es et non connues &#224; l'avance (ce peut &#234;tre un SaaS ouvert &#224; la configuration d'applications par des administrateurs publics), et dans ce cas il parait souhaitable de le conserver conforme au standard OIDC. L'extension des informations de profil devrait alors se faire &#224; l'aide de Web services distincts, propres aux applications.&lt;/p&gt;
&lt;p&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; le serveur est un serveur priv&#233; mis en &#339;uvre dans le cadre d'un domaine d'entreprise pour des applications connues (c'est le cas des serveurs d'authentification de G..., F..., Wordpress avec le jeton blog etc.). Dans ce cas, la meilleure solution pour la s&#233;curit&#233; (et notamment pour appliquer le RGPD) consiste &#224; compl&#233;ter la table users de la base de donn&#233;es et &#224; d&#233;finir des scopes particuliers avec la liste d'informations qui leur est rattach&#233;e.&lt;/p&gt;
&lt;p&gt;Dans le deuxi&#232;me cas, une &lt;strong&gt;bonne pratique&lt;/strong&gt; serait de conserver la r&#233;ponse UserInfo conforme au standard lorsque l'on interroge le point d'extr&#233;mit&#233; UserInfo, et de &lt;strong&gt;cr&#233;er un point d'extr&#233;mit&#233; sp&#233;cifique&lt;/strong&gt;, par exemple UserInfoExt pour les informations de profil &#233;tendues, ainsi qu'une table particuli&#232;re dans la base de donn&#233;es. Cette pratique permettra de conserver le serveur conforme au standard et de mieux g&#233;rer le code ainsi que les donn&#233;es.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id='nb6-1'&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href='#nh6-1' class='spip_note' title='Notes 6-1' rev='appendix'&gt;1&lt;/a&gt;] &lt;/span&gt;Pourquoi ?&lt;/p&gt;
&lt;/div&gt;&lt;div id='nb6-2'&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href='#nh6-2' class='spip_note' title='Notes 6-2' rev='appendix'&gt;2&lt;/a&gt;] &lt;/span&gt;A &#233;tudier : est-ce conforme &#224; la sp&#233;cification ?&lt;/p&gt;
&lt;/div&gt;&lt;div id='nb6-3'&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href='#nh6-3' class='spip_note' title='Notes 6-3' rev='appendix'&gt;3&lt;/a&gt;] &lt;/span&gt;Voir la sp&#233;cification &#167; 2.4.2 : &#034;End-User's full name in displayable form including all name parts, ordered according to End-User's locale and preferences.&#034;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;On pourrait souhaiter que l'administrateur puisse d&#233;finir, au moment de l'enregistrement de son application cliente sur le serveur d'autorisation, le jeu de donn&#233;es UserInfo qui corresponde aux besoin de son application.&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Q&amp;R pour les auteurs et d&#233;veloppeurs</title>
		<link>https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#qrpourlesauteursetdeveloppeurs</link>
		<guid isPermaLink="true">https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html#qrpourlesauteursetdeveloppeurs</guid>
		<dc:date>2016-10-06T13:58:35Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>DnC</dc:creator>



		<description>
&lt;p&gt;L'Auteur est un utilisateur privil&#233;gi&#233; de OAuth Server. Il est notamment propri&#233;taire d'une ou plusieurs applications clientes qu'il a inscrites sur le serveur &#224; l'aide de ce site. Il est un d&#233;veloppeur ou en poss&#232;de les connaissances. &lt;br class='autobr' /&gt;
OAuthSD est-il compatible OPenID Connect ? &lt;br class='autobr' /&gt;
OAuthSD a pour ambition de se conformer aux sp&#233;cifications de l'IETF telles qu'elles sont publi&#233;es par l'OPenID Foundation. OAuthSD est 100% conforme en ce qui concerne le flux Authentication Code, voyez : OAuthSD vers la (...)&lt;/p&gt;


-
&lt;a href="https://static.oa.dnc.global/-Sujets-communs-a-Oauth-2-et-OpenID-Connect-.html" rel="directory"&gt;Sujets communs &#224; Oauth 2 et OpenID Connect&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;L'Auteur est un utilisateur privil&#233;gi&#233; de OAuth Server. Il est notamment propri&#233;taire d'une ou plusieurs applications clientes qu'il a inscrites sur le serveur &#224; l'aide de ce site. Il est un d&#233;veloppeur ou en poss&#232;de les connaissances.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h3 class=&#034;spip&#034;&gt;OAuthSD est-il compatible OPenID Connect ?&lt;/h3&gt;
&lt;p&gt;OAuthSD a pour ambition de se conformer aux sp&#233;cifications de l'IETF telles qu'elles sont publi&#233;es par l'OPenID Foundation.&lt;br class='autobr' /&gt;
OAuthSD est 100% conforme en ce qui concerne le flux Authentication Code, voyez : &lt;a href='https://static.oa.dnc.global/-Tests-et-certification-.html#oauthsdverslacertificationopenidr' class='spip_in'&gt;OAuthSD vers la Certification OpenID (r)&lt;/a&gt;.&lt;br class='autobr' /&gt;
Notez que :
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; OAuthSD ne met pas en &#339;uvre certains flux, voyez : &lt;a href='https://static.oa.dnc.global/-Decouvrir-.html#openidconnectetoauth20synthesedesfluxdautorisationgranttype' class='spip_in'&gt;OpenID Connect et OAuth 2.0 : Synth&#232;se des flux d'autorisation (Grant Type)&lt;/a&gt;.
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; OAuthSD &#233;volue vite et de nouveaux tests de conformit&#233; seront effectu&#233;s,
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; OAuthSD impose certaines restrictions qui vont dans le sens de la s&#233;curit&#233; ; ainsi, le param&#232;tre state est obligatoire dans les requ&#234;tes &#224; Authorize, alors que la sp&#233;cification ne l'exige pas. &lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; OAuthSD offre des fonctionnalit&#233;s &#233;tendues qui, cependant, ne contredisent en rien les sp&#233;cifications. Il en est ainsi du m&#233;canisme SLI : les sp&#233;cifications d'OIDC d&#233;finissent tout ce qu'il faut pour la r&#233;-authentification silencieuse (notamment avec le param&#232;tre prompt='none'), mais cela resterait &#224; traiter par allers-retours entre le serveur et l'application cliente. OAuthSD traite cela au niveau du contr&#244;leur Authorise &#224; l'aide du cookie SLI, &#233;vitant aux d&#233;veloppeurs un fastidieux travail d'adaptation des applications.
&lt;br /&gt;&lt;img src='https://static.oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; OAuthSD apporte quelques ajouts &#224; la sp&#233;cification, sans influence sur la conformit&#233;. Ainsi, le contr&#244;leur Authorize peut &#234;tre interrog&#233; en Ajax et retourner le temps de session restant. Voyez : &lt;a href='https://static.oa.dnc.global/-OpenID-Connect-SSO-management-de-session-etc-.html#monitoringdeletatdelauthentificationetslo' class='spip_in'&gt;Monitoring de l'&#233;tat de l'authentification et SLO&lt;/a&gt;, &lt;a href='https://static.oa.dnc.global/-OpenID-Connect-SSO-management-de-session-etc-.html#avertirdelafindesessionoidcetlaprolonger' class='spip_in'&gt;Avertir de la fin de session OIDC et la prolonger&lt;/a&gt;.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Qu'est-ce qu'apporte OAuthSD en mati&#232;re de s&#233;curit&#233; ?&lt;/h3&gt;
&lt;p&gt;Les sp&#233;cifications d'OIDC ne prennent pas en compte certaines menaces. Par exemple l'attaque &#034;Broken End-User Authentication&#034; n'est pas prise en compte par les sp&#233;cifications, la preuve en est le fait que le param&#232;tre state n'est pas obligatoire. &lt;br class='autobr' /&gt;
L'accent est mis sur l'&#233;viction d'application cliente ou de user-agent douteux. Par exemple, il y a aujourd'hui 12 tests dans le controleur Authorize permettant d'&#233;liminer des requ&#234;tes douteuses.&lt;/p&gt;
&lt;p&gt;Dans le domaine de la s&#233;curit&#233;, OAuthSD n'est pas seulement un serveur d'authentification mais un superviseur.&lt;/p&gt;
&lt;p&gt;Par exemple, dans les pages de la rubrique &#034;Surveiller&#034;, l'historisation des incidents est dat&#233;e &#224; mieux que la microseconde afin de faciliter le croisement des informations. Il faut pour cela que les autres historiques soient aussi &#224; la microseconde&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb7-1' class='spip_note' rel='appendix' title='Le projet est que le noyau du serveur OIDC sera encapsul&#233; dans un composant (...)' id='nh7-1'&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;OAuthSD comporte &#233;galement un dispositif d'alerte de l'administrateur par E-mail ou SMS, ainsi qu'un interface pour le suivi et l'alerte avec PRTG.&lt;/p&gt;
&lt;p&gt;L'historique des &#233;v&#233;nements est dans un format compatible syslog afin de permettre leur traitement par des applications de d&#233;tection d'intrusion, de suivi et d'alerte.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;On peut lire des critiques sur certains flux, pourquoi les mettre en &#339;uvre ?&lt;/h3&gt;
&lt;p&gt;Il faut consid&#233;rer qu'un serveur OIDC est aussi s&#233;curis&#233; que le flux le moins s&#233;curis&#233; qu'il impl&#233;mente.&lt;br class='autobr' /&gt;
Une caract&#233;ristique &#233;tonnante d'OAuth 2.0 est d'offrir des flux tr&#232;s peu s&#233;curis&#233;s par rapport au flux Autorisation avec Code. Encore celui-ci n'est-il vraiment complet que dans sa version OpenID Connect (pas OAuth 2.0) qui met en &#339;uvre le jeton d'identit&#233;.&lt;br class='autobr' /&gt;
Ouvrir la possibilit&#233; que le serveur r&#233;ponde &#224; des requ&#234;tes tr&#232;s diverses (telles que les flux implicites et hybrides) sans contr&#244;ler l'application cliente peut &#234;tre consid&#233;r&#233; comme une faille de s&#233;curit&#233;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb7-2' class='spip_note' rel='appendix' title='C'est peut-&#234;tre la raison pour laquelle vous pouvez lire ici : &#034;Cependant, (...)' id='nh7-2'&gt;2&lt;/a&gt;]&lt;/span&gt; !&lt;br class='autobr' /&gt;
Nous souhaitons mettre &#224; disposition un serveur 100% compatible OpenID Connect. En m&#234;me temps, les d&#233;veloppeurs et administrateurs doivent &#234;tre conscients qu'exposer le serveur aux flux implicites et hybrides est une faille de s&#233;curit&#233;. Pour cette raison, une constante de configuration permet d'autoriser l'usage ou non du flux implicite. On pourrait ainsi ne r&#233;pondre qu'aux requ&#234;tes de types Authorization Code et Autorisation de Serveur &#224; serveur.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Peut-on tout faire avec le flux Authorization Code ?&lt;/h3&gt;
&lt;p&gt;Non, car il faut qu'il existe une URI de retour vers l'application cliente pour l'identifier. Cela exige le plus souvent une application de type Web. Sur ce sujet, voyez : &lt;a href='https://static.oa.dnc.global/-Authentifier-l-application-.html#typologiedesapplicationsauregarddelasecuritedesdonnees' class='spip_in'&gt;Typologie des applications au regard de la s&#233;curit&#233; des donn&#233;es&lt;/a&gt; et &lt;a href='https://static.oa.dnc.global/-Authentifier-l-application-.html#oidcetlesapplicationapageuniqueexempledunebellemascarade' class='spip_in'&gt;OIDC et les Application &#224; page unique : exemple d'une belle mascarade !&lt;/a&gt;. Des applications natives peuvent satisfaire la condition, voyez par exemple : &lt;a href='https://static.oa.dnc.global/-Ressources-pour-les-developpeurs-.html#applicationsnativesunexempleavecwindev' class='spip_in'&gt;Applications natives : un exemple avec Windev&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le flux &lt;a href='https://static.oa.dnc.global/-Autorisation-de-serveur-a-serveur-Client-Credentials-Grant-.html#oauth20autorisationdeserveuraserveurexemplecomplet' class='spip_in'&gt;Client Credentials&lt;/a&gt; est &#233;galement int&#233;ressant pour l'acc&#232;s d'une application aux ressources prot&#233;g&#233;es. &lt;br class='autobr' /&gt;
Mais il est possible de se servir du flux Authorization Code pour cela, avec l'avantage du jeton d'Identit&#233; JWT qui peut d&#233;finir notamment des autorisations ; voyez : &lt;a href='https://static.oa.dnc.global/-OpenID-Connect-Autorisation-via-un-code-Authorization-Code-Flow-.html#openidconnectexemplescompletsdufluxdautorisationviauncodepuisrequeteuserinfo' class='spip_in'&gt;OpenID Connect : Exemples complets du flux d'Autorisation via un code puis requ&#234;te UserInfo&lt;/a&gt;.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Que signifie &#034;Il existe des informations compl&#233;mentaires, connectez vous pour les voir&#034; ?&lt;/h3&gt;
&lt;p&gt;Lorsque ce message apparait en bas d'un article, cela signifie qu'il existe des informations r&#233;serv&#233;es aux utilisateurs privil&#233;gi&#233;s de ce site. Si vous avez les droits d'&#233;criture sur la rubrique, vous serez autoris&#233;s &#224; voir ce texte apr&#232;s vous &#234;tre connect&#233;.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id='nb7-1'&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href='#nh7-1' class='spip_note' title='Notes 7-1' rev='appendix'&gt;1&lt;/a&gt;] &lt;/span&gt;Le projet est que le noyau du serveur OIDC sera encapsul&#233; dans un composant Docker dans lequel il y aura &#233;galement la base de donn&#233;es et un firewall applicatif. Ce dernier sera coupl&#233; aux &#233;v&#233;nements d'OIDC pour r&#233;agir imm&#233;diatement.&lt;/p&gt;
&lt;/div&gt;&lt;div id='nb7-2'&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href='#nh7-2' class='spip_note' title='Notes 7-2' rev='appendix'&gt;2&lt;/a&gt;] &lt;/span&gt;C'est peut-&#234;tre la raison pour laquelle vous pouvez lire &lt;a href=&#034;https://bitbucket.org/PEOFIAMP/phpoidc/src/default/&#034; class='spip_out' rel='external'&gt;ici&lt;/a&gt; : &#034;Cependant, l'accent &#233;tant mis sur l'interop&#233;rabilit&#233;, moins d'attention a &#233;t&#233; port&#233;e sur les probl&#232;mes de s&#233;curit&#233; autour de la mise en &#339;uvre&#034;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
