<?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://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>CloudSession : session partag&#233;e &#224; travers le Web</title>
		<link>https://oa.dnc.global/-Plus-.html#cloudsessionsessionpartageeatraversleweb</link>
		<guid isPermaLink="true">https://oa.dnc.global/-Plus-.html#cloudsessionsessionpartageeatraversleweb</guid>
		<dc:date>2016-11-04T09:23:29Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>DnC</dc:creator>



		<description>
&lt;p&gt;OAuth Server by DnC offre une solution de session partag&#233;e entre applications r&#233;parties sur le web, ce qui en fait le serveur d'authentification le mieux adapt&#233; pour construire des applications avanc&#233;es, partageant des donn&#233;es en toute s&#233;curit&#233; &#224; travers le Web. De quoi s'agit-il ? &lt;br class='autobr' /&gt;
Ordinairement, les serveurs d'authentification sont utilis&#233;s pour d&#233;l&#233;guer le contr&#244;le d'acc&#232;s &#224; des serveurs de ressources Web de type REST, c'est &#224; dire sans &#233;tat, et donc sans consid&#233;ration d'un contexte de session. La notion (...)&lt;/p&gt;


-
&lt;a href="https://oa.dnc.global/-Plus-.html" rel="directory"&gt;Plus&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;OAuth Server by DnC offre une solution de session partag&#233;e entre applications r&#233;parties sur le web, ce qui en fait le serveur d'authentification le mieux adapt&#233; pour construire des applications avanc&#233;es, partageant des donn&#233;es en toute s&#233;curit&#233; &#224; travers le Web.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h3 class=&#034;spip&#034;&gt;De quoi s'agit-il ?&lt;/h3&gt;
&lt;p&gt;Ordinairement, les serveurs d'authentification sont utilis&#233;s pour d&#233;l&#233;guer le contr&#244;le d'acc&#232;s &#224; des serveurs de ressources Web de type REST, c'est &#224; dire sans &#233;tat, et donc sans consid&#233;ration d'un contexte de session. La notion de session se trouve limit&#233;e &#224; l'application cliente, et ne peut se propager en dehors des limites de son serveur sans risque de s&#233;curit&#233;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OAuth Server by DnC vous offre CloudSession&lt;/strong&gt;, qui vous permettra d'&#233;changer en toute s&#233;curit&#233; des informations entre applications et services Web, dans les deux sens.&lt;/p&gt;
&lt;p&gt;Les donn&#233;es de sessions sont stock&#233;es et servies par le serveur d'authentification.&lt;/p&gt;
&lt;p&gt;Pour cela, OAuth Server by DnC (OAuthSD) offre un point d'extr&#233;mit&#233; de session, auquel toute application inscrite sur le serveur d'authentification ayant re&#231;u un identificateur de CloudSession et un jeton d'acc&#232;s, ainsi que l'application cliente ayant initialis&#233; la CloudSession, peut s'adresser pour partager les informations de session dans les deux sens.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Utilisateur propri&#233;taire des donn&#233;es de session&lt;/h3&gt;
&lt;p&gt;Au moment de la cr&#233;ation de la session, les donn&#233;es de session sont enregistr&#233;es avec le nom de l'utilisateur final connect&#233;, correspondant au jeton d'acc&#232;s. &lt;br class='autobr' /&gt;
Lors d'une lecture, le contr&#244;leur session v&#233;rifie la coh&#233;rence entre l'utilisateur d&#233;sign&#233; par le jeton d'acc&#232;s avec celui de l'enregistrement.&lt;/p&gt;
&lt;p&gt;Le contr&#244;leur interdit les manipulations de donn&#233;es par un utilisateur non connect&#233;.&lt;/p&gt;
&lt;p&gt;Seul l'utilisateur final connect&#233; peut donc manipuler les donn&#233;es de la session qui lui correspond. Ceci justifie le titre de &#034;session utilisateur&#034;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb2-1' class='spip_note' rel='appendix' title='Au niveau des applications participant &#224; la session, une pratique (...)' id='nh2-1'&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Le point d'extr&#233;mit&#233; de CloudSession&lt;/h3&gt;
&lt;p&gt;Dans l'impl&#233;mentation de DnC, le serveur OAuth est &#233;tendu pour offrir un nouveau contr&#244;leur Session. Le point d'extr&#233;mit&#233; de session se trouve &#224; l'adresse suivante :&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code' dir='ltr'&gt;https://oa.dnc.global/oauth/session.php&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Les requ&#234;tes doivent comporter l'Identificateur de CloudSession et le Jeton d'acc&#232;s.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identificateur de CloudSession&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;L'identificateur de CloudSession est d&#233;fini librement par l'application cliente qui initialise la CloudSession. Cependant :
&lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; L'identificateur doit &#234;tre unique, ce qui peut donner lieu &#224; collision au moment de la cr&#233;ation de la session. Une bonne pratique est d'utiliser un hash d'une valeur al&#233;atoire g&#233;n&#233;r&#233;e avec un salt.
&lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; L'identificateur doit &#234;tre compos&#233; de lettres (majuscules et minuscules, de chiffres, sans espace ni caract&#232;re sp&#233;ciaux.&lt;/p&gt;
&lt;p&gt;Seules peuvent participer &#224; une CloudSession les applications ayant re&#231;u un identificateur de CloudSession session_id propre &#224; cette session.&lt;/p&gt;
&lt;p&gt;La fa&#231;on de transmettre l'identificateur de session aux diff&#233;rentes applications est laiss&#233;e &#224; l'appr&#233;ciation du d&#233;veloppeur&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb2-2' class='spip_note' rel='appendix' title='A ce stade de la r&#233;flexion, on peut penser que les m&#233;thodes de transmission (...)' id='nh2-2'&gt;2&lt;/a&gt;]&lt;/span&gt;. Cela permet de d&#233;finir quelles applications acc&#232;dent &#224; la session, et de contr&#244;ler quand cela se produit.&lt;/p&gt;
&lt;p&gt;Il est recommand&#233; que l'application cliente valide la bonne forme de l'identificateur de CloudSession avant de l'utiliser. Le code de validation est le suivant :&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: #666666; font-style: italic;&#034;&gt;// Verify format of session_id&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;$session_id&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$request&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;-&gt;&lt;/span&gt;&lt;span style=&#034;color: #004000;&#034;&gt;query&lt;/span&gt;&lt;span style=&#034;color: #009900;&#034;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&#034;color: #0000ff;&#034;&gt;'session_id'&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;$sanitized_session_id&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;=&lt;/span&gt; &lt;a href=&#034;http://www.php.net/preg_replace&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;preg_replace&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;'/[^A-Za-z0-9&#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: #339933;&#034;&gt;,&lt;/span&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$session_id&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: #000088;&#034;&gt;$sanitized_sesion_id&lt;/span&gt; &lt;span style=&#034;color: #339933;&#034;&gt;!==&lt;/span&gt; &lt;span style=&#034;color: #000088;&#034;&gt;$session_id&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: #000088;&#034;&gt;$response&lt;/span&gt;&lt;span style=&#034;color: #339933;&#034;&gt;-&gt;&lt;/span&gt;&lt;span style=&#034;color: #004000;&#034;&gt;send&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;#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/die&#034;&gt;&lt;span style=&#034;color: #990000;&#034;&gt;die&lt;/span&gt;&lt;/a&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;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class='download code_download'&gt;&lt;a href='https://oa.dnc.global/local/cache-code/94030e773fae8e1427c639783fce5733.txt'&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Il est utile, mais non essentiel, que soit conserv&#233; secret l'identificateur de CloudSession. Comme toujours, il vaut mieux utiliser une liaison serveur-serveur que passer par le navigateur du client.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jeton d'acc&#232;s&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Le jeton d'acc&#232;s&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb2-3' class='spip_note' rel='appendix' title='Il s'agit du jeton opaque OAuth 2.0. Dans le cas d'OPenID Connect, ce jeton (...)' id='nh2-3'&gt;3&lt;/a&gt;]&lt;/span&gt; d&#233;livr&#233; &#224; l'application cliente, est transmis avec les requ&#234;tes pour v&#233;rifier que l'application est autoris&#233;e.&lt;/p&gt;
&lt;p&gt;L'application cliente doit &#233;mettre le jeton d'acc&#232;s avec la requ&#234;te adress&#233;e au point d'extr&#233;mit&#233; session. Cependant, elle n'est pas tenue d'effectuer la v&#233;rification du jeton d'acc&#232;s pr&#233;alablement &#224; l'utilisation de la CloudSession, car le contr&#244;leur session effectue cette v&#233;rification. En cas d'&#233;chec, les messages d'erreur retourn&#233;s sont les m&#234;me que ceux retourn&#233;s par le contr&#244;leur resource.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Format des donn&#233;es de session&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Les donn&#233;es de session sont form&#233;es d'un unique array associatif dont les clefs doivent &#234;tre de type string. Les donn&#233;es sont transmises au contr&#244;leur session, dans les deux sens, au format JSON.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Espace de validit&#233; de la CloudSession&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Les d&#233;veloppeurs doivent consid&#233;rer les facteurs suivants pour &#233;valuer la s&#233;curit&#233; des donn&#233;es d'une CloudSession :
&lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; Un identificateur de CloudSession n'a pas de limite de validit&#233;. OAuthSD conserve ind&#233;finiment les donn&#233;es associ&#233;es.
&lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; Toute application en possession d'un jeton d'acc&#232;s valide (et de l'identificateur de CloudSession) peut acc&#233;der aux donn&#233;es de CloudSession.&lt;/p&gt;
&lt;p&gt;On notera qu'il n'y a pas de lien entre le jeton d'acc&#232;s et l'identificateur de CloudSession. Ainsi, une application cliente qui aurait perdu son jeton d'acc&#232;s peut acc&#233;der &#224; la CloudSession apr&#232;s en avoir obtenu un nouveau.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Cr&#233;ation d'une CloudSession&lt;/h3&gt;
&lt;p&gt;Une CloudSession ne peut &#234;tre cr&#233;&#233;e que par une application cliente inscrite avec le scope &#034;session&#034; et en possession d'un jeton d'acc&#232;s valide.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Forme de la Requ&#234;te&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pour initialiser une CloudSession, l'application appelle le point de terminaison de session, avec les param&#232;tres suivants :
&lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; mode=create, &lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; session_id : un identification de CloudSession de son choix,
&lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; access_token : le jeton d'acc&#232;s en provenance du client.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;R&#233;ponse du serveur&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;En cas de succ&#232;s&lt;/strong&gt;, le serveur retourne une r&#233;ponse HTTP 200.&lt;/p&gt;
&lt;p&gt;Le corps de la r&#233;ponse contient un tableau portant les informations suivantes :&lt;/p&gt;
&lt;table class=&#034;spip&#034;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id5487_c0'&gt; index &lt;/th&gt;&lt;th id='id5487_c1'&gt; type &lt;/th&gt;&lt;th id='id5487_c2'&gt; valeur &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id5487_c0'&gt;status&lt;/td&gt;
&lt;td headers='id5487_c1'&gt;entier&lt;/td&gt;
&lt;td headers='id5487_c2'&gt;code HTTP&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id5487_c0'&gt;headers&lt;/td&gt;
&lt;td headers='id5487_c1'&gt;string&lt;/td&gt;
&lt;td headers='id5487_c2'&gt;Headers de la r&#233;ponse&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id5487_c0'&gt;page&lt;/td&gt;
&lt;td headers='id5487_c1'&gt;string&lt;/td&gt;
&lt;td headers='id5487_c2'&gt;JSON Array :&lt;br class='autobr' /&gt;
success : true,&lt;br class='autobr' /&gt;
initial_client_id : ID de l'application cliente ayant initialis&#233; la session&lt;br class='autobr' /&gt;
initial_user_id : ID de l'utilisateur final ayant initialis&#233; la session&lt;br class='autobr' /&gt;
expires : instant de la fin de validit&#233; (long)&lt;br class='autobr' /&gt;
maj : instant de mise &#224; jour des donn&#233;es&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;En cas d'&#233;chec&lt;/strong&gt;, le corps de la r&#233;ponse contient :&lt;/p&gt;
&lt;table class=&#034;spip&#034;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id2351_c0'&gt; index &lt;/th&gt;&lt;th id='id2351_c1'&gt; type &lt;/th&gt;&lt;th id='id2351_c2'&gt; valeur &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id2351_c0'&gt;page&lt;/td&gt;
&lt;td headers='id2351_c1'&gt;string&lt;/td&gt;
&lt;td headers='id2351_c2'&gt;JSON Array :&lt;br class='autobr' /&gt;
error : titre de l'erreur,&lt;br class='autobr' /&gt;
error_description : description de l'erreur&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;La r&#233;ponse HTTP ainsi que les valeurs de error et error_description sont les m&#234;mes que pour une requ&#234;te de validation de jeton d'acc&#232;s, avec les d&#233;finitions suppl&#233;mentaires suivantes :&lt;/p&gt;
&lt;table class=&#034;spip&#034;&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;strong&gt;R&#233;ponse&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;error&lt;br class='autobr' /&gt;
titre de l'erreur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;error_description&lt;br class='autobr' /&gt;
description de l'erreur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Explication&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;409&lt;/td&gt;
&lt;td&gt;session_error&lt;/td&gt;
&lt;td&gt;Session ID conflict&lt;/td&gt;
&lt;td&gt;Le session_id fourni est d&#233;j&#224; utilis&#233;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;td&gt;session_error&lt;/td&gt;
&lt;td&gt;Error while creating session&lt;/td&gt;
&lt;td&gt;Erreur de la base de donn&#233;es, la nouvelle session n'a pu &#234;tre cr&#233;&#233;e&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;h3 class=&#034;spip&#034;&gt;Lecture des donn&#233;es de CloudSession&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Forme de la Requ&#234;te&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La lecture des donn&#233;es de session se fait par l'appel du point de terminaison de session, avec les param&#232;tres suivants :
&lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; mode=read, &lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; session_id : l'identification de CloudSession en provenance du client,
&lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; access_token : le jeton d'acc&#232;s en provenance du client.&lt;/p&gt;
&lt;p&gt;Voici un exemple avec les param&#232;tres pass&#233;s dans l'URL de la requ&#234;te :&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code' dir='ltr'&gt;https://oa.dnc.global/oauth/session.php?mode=read&amp;session_id=MonBelIdentificateurDeSessionf&amp;token=0df45a21bc2356bbf8a291&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;R&#233;ponse du serveur&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;En cas de succ&#232;s&lt;/strong&gt;, le serveur retourne une r&#233;ponse HTTP 200.&lt;/p&gt;
&lt;p&gt;Le corps de la r&#233;ponse contient un tableau portant les informations suivantes :&lt;/p&gt;
&lt;table class=&#034;spip&#034;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id2740_c0'&gt; index &lt;/th&gt;&lt;th id='id2740_c1'&gt; type &lt;/th&gt;&lt;th id='id2740_c2'&gt; valeur &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id2740_c0'&gt;status&lt;/td&gt;
&lt;td headers='id2740_c1'&gt;entier&lt;/td&gt;
&lt;td headers='id2740_c2'&gt;code HTTP&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id2740_c0'&gt;headers&lt;/td&gt;
&lt;td headers='id2740_c1'&gt;string&lt;/td&gt;
&lt;td headers='id2740_c2'&gt;Headers de la r&#233;ponse&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id2740_c0'&gt;page&lt;/td&gt;
&lt;td headers='id2740_c1'&gt;string&lt;/td&gt;
&lt;td headers='id2740_c2'&gt;JSON Array :&lt;br class='autobr' /&gt;
success : true,&lt;br class='autobr' /&gt;
initial_client_id : ID de l'application cliente ayant initialis&#233; la session&lt;br class='autobr' /&gt;
initial_user_id : ID de l'utilisateur final ayant initialis&#233; la session&lt;br class='autobr' /&gt;
expires : instant de la fin de validit&#233; (long)&lt;br class='autobr' /&gt;
data : donn&#233;es au format JSON&lt;br class='autobr' /&gt;
maj : instant de mise &#224; jour des donn&#233;es&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Notes :&lt;/strong&gt;
&lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; Afin de permettre aux d&#233;veloppeurs d'effectuer des contr&#244;les de s&#233;curit&#233;, ainsi qu'&#224; toute fin utile, les informations suivantes sont syst&#233;matiquement retourn&#233;es par le point d'extr&#233;mit&#233; &#034;session&#034; : initial_client_id, initial_user_id et expires. L'application tierce peut ainsi obtenir des informations sur l'application cliente et l'utilisateur final qui ont initialis&#233; la CloudSession.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;En cas d'&#233;chec&lt;/strong&gt;, le corps de la r&#233;ponse contient :&lt;/p&gt;
&lt;table class=&#034;spip&#034;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id2351_c0'&gt; index &lt;/th&gt;&lt;th id='id2351_c1'&gt; type &lt;/th&gt;&lt;th id='id2351_c2'&gt; valeur &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id2351_c0'&gt;page&lt;/td&gt;
&lt;td headers='id2351_c1'&gt;string&lt;/td&gt;
&lt;td headers='id2351_c2'&gt;JSON Array :&lt;br class='autobr' /&gt;
error : titre de l'erreur,&lt;br class='autobr' /&gt;
error_description : description de l'erreur&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;La r&#233;ponse HTTP ainsi que les valeurs de error et error_description sont les m&#234;mes que pour une requ&#234;te de validation de jeton d'acc&#232;s, avec les d&#233;finitions suppl&#233;mentaires suivantes :&lt;/p&gt;
&lt;table class=&#034;spip&#034;&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;strong&gt;R&#233;ponse&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;error&lt;br class='autobr' /&gt;
titre de l'erreur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;error_description&lt;br class='autobr' /&gt;
description de l'erreur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Explication&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;td&gt;session_error&lt;/td&gt;
&lt;td&gt;Error while reading session data&lt;/td&gt;
&lt;td&gt;Erreur de la base de donn&#233;es, la lecture des donn&#233;es a &#233;chou&#233;e.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Notes :&lt;/strong&gt;
&lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; Certains cas d'erreur, correspondant &#224; des incoh&#233;rences dans la requ&#234;te, peuvent signifier une tentative d'intrusion et donnent lieu &#224; un &#233;chec sans d&#233;tail de l'erreur.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;Ecriture des donn&#233;es de CloudSession&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Forme de la Requ&#234;te&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;L'&#233;crture des donn&#233;es de session se fait par l'appel du point de terminaison de session, avec les param&#232;tres suivants :
&lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; mode=write, &lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; session_id : l'identification de CloudSession en provenance du client,
&lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; access_token : le jeton d'acc&#232;s en provenance du client,
&lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; data : Tout ou partie des donn&#233;es de session sous la forme d'un array associatif au format JSON.&lt;/p&gt;
&lt;p&gt;Voici un exemple avec les param&#232;tres pass&#233;s dans l'URL de la requ&#234;te :&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code' dir='ltr'&gt;https://oa.dnc.global/oauth/session.php?mode=read&amp;client_id=radar&amp;session_id=MonBelIdentificateurDeSessionf&amp;token=0df45a21bc2356bbf8a291&amp;data={&#034;balance&#034;: 1000.21,&#034;id&#034;:12031,&#034;nom&#034;:&#034;foo&#034;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Cette fa&#231;on de faire n'est pas recommand&#233;e et ne peut convenir pour les donn&#233;es de grande dimension. De plus, il convient d'URL-encoder et d&#233;coder le param&#232;tre data. On pr&#233;f&#232;rera un envoi par POST :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;...&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;La longueur maximale de la cha&#238;ne au format JSON est d'environ 16Mo (16777212 octets).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;R&#233;ponse du serveur&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;En cas de succ&#232;s&lt;/strong&gt;, le serveur retourne une r&#233;ponse HTTP 200.&lt;/p&gt;
&lt;p&gt;Le corps de la r&#233;ponse contient un tableau portant les informations suivantes :&lt;/p&gt;
&lt;table class=&#034;spip&#034;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='idef69_c0'&gt; index &lt;/th&gt;&lt;th id='idef69_c1'&gt; type &lt;/th&gt;&lt;th id='idef69_c2'&gt; valeur &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idef69_c0'&gt;status&lt;/td&gt;
&lt;td headers='idef69_c1'&gt;entier&lt;/td&gt;
&lt;td headers='idef69_c2'&gt;code HTTP&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idef69_c0'&gt;headers&lt;/td&gt;
&lt;td headers='idef69_c1'&gt;string&lt;/td&gt;
&lt;td headers='idef69_c2'&gt;Headers de la r&#233;ponse&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idef69_c0'&gt;page&lt;/td&gt;
&lt;td headers='idef69_c1'&gt;string&lt;/td&gt;
&lt;td headers='idef69_c2'&gt;JSON Array :&lt;br class='autobr' /&gt;
success : true&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;En cas d'&#233;chec&lt;/strong&gt;, le corps de la r&#233;ponse contient :&lt;/p&gt;
&lt;table class=&#034;spip&#034;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id2351_c0'&gt; index &lt;/th&gt;&lt;th id='id2351_c1'&gt; type &lt;/th&gt;&lt;th id='id2351_c2'&gt; valeur &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id2351_c0'&gt;page&lt;/td&gt;
&lt;td headers='id2351_c1'&gt;string&lt;/td&gt;
&lt;td headers='id2351_c2'&gt;JSON Array :&lt;br class='autobr' /&gt;
error : titre de l'erreur,&lt;br class='autobr' /&gt;
error_description : description de l'erreur&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;La r&#233;ponse HTTP ainsi que les valeurs de error et error_description sont les m&#234;mes que pour une requ&#234;te de validation de jeton d'acc&#232;s, avec les d&#233;finitions suppl&#233;mentaires suivantes :&lt;/p&gt;
&lt;table class=&#034;spip&#034;&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;strong&gt;R&#233;ponse&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;error&lt;br class='autobr' /&gt;
titre de l'erreur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;error_description&lt;br class='autobr' /&gt;
description de l'erreur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Explication&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;td&gt;session_error&lt;/td&gt;
&lt;td&gt;Error while writing session data&lt;/td&gt;
&lt;td&gt;Erreur de la base de donn&#233;es, la cr&#233;ation de la session a &#233;chou&#233;e.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;503&lt;/td&gt;
&lt;td&gt;session_error&lt;/td&gt;
&lt;td&gt;Busy&lt;/td&gt;
&lt;td&gt;Avant d'&#233;crire dans la base de donn&#233;es, le contr&#244;leur v&#233;rifie qu'il n'y a pas d&#233;j&#224; une &#233;criture en cours sur la m&#234;me session, et attend quelques dizaines de millisecondes avant de tenter &#224; nouveau l'&#233;criture. A ce moment, si une &#233;criture est toujours en cours, l'&#233;criture objet de la requ&#234;te courante est abandonn&#233;e et cette erreur est g&#233;n&#233;r&#233;e. Il est de la responsabilit&#233; de l'application de recommencer l'&#233;criture&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href='#nb2-4' class='spip_note' rel='appendix' title='On notera qu'il s'agit du mode &#034;pessimiste&#034; de gestion des collisions (...)' id='nh2-4'&gt;4&lt;/a&gt;]&lt;/span&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;h3 class=&#034;spip&#034;&gt;Codes d'erreur communs aux diff&#233;rents modes&lt;/h3&gt;
&lt;p&gt;Outre les erreurs communes avec la v&#233;rification du jeton d'acc&#232;s, les erreurs suivantes sont communes aux diff&#233;rents modes de CloudSession :&lt;/p&gt;
&lt;table class=&#034;spip&#034;&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;strong&gt;R&#233;ponse&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;error&lt;br class='autobr' /&gt;
titre de l'erreur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;error_description&lt;br class='autobr' /&gt;
description de l'erreur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Explication&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;403&lt;/td&gt;
&lt;td&gt;session_error&lt;/td&gt;
&lt;td&gt;Missing &#034;session&#034; scope for this client&lt;/td&gt;
&lt;td&gt;Le scope &#034;session&#034; n'a pas &#233;t&#233; autoris&#233; pour l'application.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;400&lt;/td&gt;
&lt;td&gt;session_error&lt;/td&gt;
&lt;td&gt;Unknown session mode in request&lt;/td&gt;
&lt;td&gt;Le param&#232;tre mode est inconnu&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;h3 class=&#034;spip&#034;&gt;A propos du scope &#034;session&#034;&lt;/h3&gt;
&lt;p&gt;Pour pouvoir b&#233;n&#233;ficier du service de CloudSession, l'application cliente doit &#234;tre inscrite avec le scope &#034;session&#034;.&lt;/p&gt;
&lt;p&gt;L'utilit&#233; du scope session est double :
&lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; il permet de d&#233;finir quelles sont les applications clientes autoris&#233;es &#224; initialiser une CloudSession,
&lt;br /&gt;&lt;img src='https://oa.dnc.global/local/cache-vignettes/L8xH11/puce-32883.gif?1733817730' width='8' height='11' class='puce' alt=&#034;-&#034; /&gt; ce scope peut &#234;tre retir&#233; &#224; une instance d'une application cliente (et donc l'usage de CloudSession interdit) &#224; la suite d'une authentification douteuse, par exemple sur l'action de &lt;a href='https://oa.dnc.global/-Plus-.html#identitybydnc' class='spip_in'&gt;Identity by DnC&lt;/a&gt;.&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;Au niveau des applications participant &#224; la session, une pratique int&#233;ressante serait de synchroniser la session locale au moyen de l'identifiant de session. Cela rejoint la technique de gestion de session utilis&#233;e notamment par les application &#224; page unique (Single Page Application, SPA).&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;A ce stade de la r&#233;flexion, on peut penser que les m&#233;thodes de transmission de l'id de session sont analogues &#224; celles qui sont employ&#233;es pour la connexion unique (Single Login Identification, SLI) et le renouvellement silencieux de l'autorisation (Silent Re-authentication) ou le &lt;a href='https://oa.dnc.global/-OpenID-Connect-SSO-management-de-session-etc-.html#openidconnectsessionmanagement' class='spip_in'&gt;OpenID Connect Session Management&lt;/a&gt; et qui font appel aux cookies de serveur et/ou aux iframe invisibles. La s&#233;curit&#233; de ces techniques reste &#224; &#233;valuer.&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;Il s'agit du jeton opaque OAuth 2.0. Dans le cas d'OPenID Connect, ce jeton est toujours transmis parall&#232;lement &#224; l'ID Token.&lt;/p&gt;
&lt;/div&gt;&lt;div id='nb2-4'&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href='#nh2-4' class='spip_note' title='Notes 2-4' rev='appendix'&gt;4&lt;/a&gt;] &lt;/span&gt;On notera qu'il s'agit du mode &#034;pessimiste&#034; de gestion des collisions d'&#233;criture, qui est la seule fa&#231;on de proc&#233;der avec rigueur.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
