<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://en.wiki.ryzom.com/w/index.php?action=history&amp;feed=atom&amp;title=Ryzom_API%2FAppZone</id>
		<title>Ryzom API/AppZone - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://en.wiki.ryzom.com/w/index.php?action=history&amp;feed=atom&amp;title=Ryzom_API%2FAppZone"/>
		<link rel="alternate" type="text/html" href="https://en.wiki.ryzom.com/w/index.php?title=Ryzom_API/AppZone&amp;action=history"/>
		<updated>2026-04-25T06:48:52Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.29.1</generator>

	<entry>
		<id>https://en.wiki.ryzom.com/w/index.php?title=Ryzom_API/AppZone&amp;diff=51841&amp;oldid=prev</id>
		<title>Leda at 12:49, 27 May 2023</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.ryzom.com/w/index.php?title=Ryzom_API/AppZone&amp;diff=51841&amp;oldid=prev"/>
				<updated>2023-05-27T12:49:16Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 12:49, 27 May 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;noinclude&amp;gt;{{Trad|DE=Ryzom API/AppZone|EN=Ryzom API/AppZone|palette=api|H=1}}&amp;lt;/noinclude&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;User authentication for apps registered in AppZone&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;User authentication for apps registered in AppZone&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Usage ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Usage ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Leda</name></author>	</entry>

	<entry>
		<id>https://en.wiki.ryzom.com/w/index.php?title=Ryzom_API/AppZone&amp;diff=37880&amp;oldid=prev</id>
		<title>Dorothée: Created page with &quot; User authentication for apps registered in AppZone == Usage == ;URL values :&lt;code&gt;user&lt;/code&gt; -- base64 encoded php serialized array :&lt;code&gt;checksum&lt;/code&gt; -- sha1 hash_hmac...&quot;</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.ryzom.com/w/index.php?title=Ryzom_API/AppZone&amp;diff=37880&amp;oldid=prev"/>
				<updated>2020-07-23T09:43:46Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot; User authentication for apps registered in AppZone == Usage == ;URL values :&amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt; -- base64 encoded php serialized array :&amp;lt;code&amp;gt;checksum&amp;lt;/code&amp;gt; -- sha1 hash_hmac...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
User authentication for apps registered in AppZone&lt;br /&gt;
== Usage ==&lt;br /&gt;
;URL values&lt;br /&gt;
:&amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt; -- base64 encoded php serialized array&lt;br /&gt;
:&amp;lt;code&amp;gt;checksum&amp;lt;/code&amp;gt; -- sha1 hash_hmac with app secret key from AppZone&lt;br /&gt;
&lt;br /&gt;
Because of php serialize, checksum must be validated before user value can be safely used.&amp;lt;br /&amp;gt;&lt;br /&gt;
A validating checksum will also give a strong guarantee that the user is who he claims to be.&lt;br /&gt;
&lt;br /&gt;
Example how the response is created:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;$userArray = [&lt;br /&gt;
  'timestamp' =&amp;gt; &amp;quot;0.9696200 1503915319&amp;quot;,&lt;br /&gt;
  'app_url' =&amp;gt; 'http://...',&lt;br /&gt;
  'id' =&amp;gt; &amp;quot;1&amp;quot;,&lt;br /&gt;
  'char_name' =&amp;gt; 'player',&lt;br /&gt;
  'race' =&amp;gt; 'tryker',&lt;br /&gt;
  'cult' =&amp;gt; 'neutral',&lt;br /&gt;
  'civ' =&amp;gt; 'neutral',&lt;br /&gt;
  'organization' =&amp;gt; 'marauder',&lt;br /&gt;
  'guild_id' =&amp;gt; '105906000',&lt;br /&gt;
  'guild_icon' =&amp;gt; '17',&lt;br /&gt;
  'guild_name' =&amp;gt; 'guild',&lt;br /&gt;
  'grade' =&amp;gt; 'Leader',&lt;br /&gt;
  'lang' =&amp;gt; 'en'&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
$user = base64_encode(serialize($userArray));&lt;br /&gt;
$checksum = hash_hmac('sha1', $user, $appKey);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
                &lt;br /&gt;
&amp;lt;code&amp;gt;timestamp&amp;lt;/code&amp;gt; contains microseconds and seconds when the response was created and should be checked to prevent replaying the same response multiple times.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;app_url&amp;lt;/code&amp;gt; must be checked to prevent same AppZone response to be used in other apps.&lt;br /&gt;
&lt;br /&gt;
=== PHP interface ===&lt;br /&gt;
 ryzom_app_authenticate(&amp;amp;$user)&lt;br /&gt;
&lt;br /&gt;
This function verifies AppZone user and checksum url parameters. Uses $_GET['user'] and $_GET['checksum'] directly.&amp;lt;br /&amp;gt;&lt;br /&gt;
Function returns boolean true if successful. $user variable will contain info from AppZone or an error message if there was an error&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;float:left; margin-right: 10px;padding: 0px&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;$_SESSION['app.user']&amp;lt;/syntaxhighlight&amp;gt;|| is set for future requests. PHP session is required.&lt;br /&gt;
|} {{clear}}&lt;br /&gt;
:'''Constants''' that should be defined :&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;code&amp;gt;RYAPI_AUTH_KEY&amp;lt;/code&amp;gt;&lt;br /&gt;
:::secret key in AppZone&lt;br /&gt;
:::if empty, then user info is not verified (not recommended) &lt;br /&gt;
::&amp;lt;code&amp;gt;RYAPI_APP_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
:::app url in AppZone&lt;br /&gt;
:::if empty, then automatic best guess url is tried&lt;br /&gt;
:::if false, then app url is not verified &lt;br /&gt;
::&amp;lt;code&amp;gt;RYAPI_APP_MAXAGE&amp;lt;/code&amp;gt;&lt;br /&gt;
:::max age in seconds for AppZone url to be valid&lt;br /&gt;
:::if 0, then timestamp is not verified &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
  require_once &amp;quot;ryzomapi_lite.php&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  define('RYAPI_AUTH_KEY', 'secret-key');&lt;br /&gt;
  define('RYAPI_APP_URL', 'http://app.url/');&lt;br /&gt;
  define('RYAPI_APP_MAXAGE', 30);&lt;br /&gt;
&lt;br /&gt;
  session_start();&lt;br /&gt;
&lt;br /&gt;
  $user = false;&lt;br /&gt;
  if (ryzom_app_authenticate($user)) {&lt;br /&gt;
    $charName = htmlspecialchars($user['char_name']);&lt;br /&gt;
    echo &amp;quot;Hello {$charName}!&amp;quot;;&lt;br /&gt;
  } else {&lt;br /&gt;
    $error = htmlspecialchars($user);&lt;br /&gt;
    echo &amp;quot;Authentication failure ({$error}).&amp;quot;;&lt;br /&gt;
  }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Ryzom API|AppZone]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dorothée</name></author>	</entry>

	</feed>