<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.open-xchange.com/wiki/index.php?action=history&amp;feed=atom&amp;title=FormLoginSpecial</id>
	<title>FormLoginSpecial - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.open-xchange.com/wiki/index.php?action=history&amp;feed=atom&amp;title=FormLoginSpecial"/>
	<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=FormLoginSpecial&amp;action=history"/>
	<updated>2026-07-21T01:50:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=FormLoginSpecial&amp;diff=15205&amp;oldid=prev</id>
		<title>Choeger: Created page with &quot;= FormLogin =  The goal here is to authenticate a user for the Open-Xchange system from an external system and to safely pass on the received session data to the user´s brows...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=FormLoginSpecial&amp;diff=15205&amp;oldid=prev"/>
		<updated>2013-08-07T08:53:45Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= FormLogin =  The goal here is to authenticate a user for the Open-Xchange system from an external system and to safely pass on the received session data to the user´s brows...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= FormLogin =&lt;br /&gt;
&lt;br /&gt;
The goal here is to authenticate a user for the Open-Xchange system from an external system and to safely pass on the received session data to the user´s browser. To do so the external system has to know the user data (username, password) for Open-Xchange in plain text.&lt;br /&gt;
There are three participants in this process: User, Open-Xchange system (&amp;quot;OX&amp;quot;) and External system (&amp;quot;3rd-party&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
1. A ReverseProxy-directive has to be set in the OX-/Loadbalancer-Apache&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
&lt;br /&gt;
 #ReverseProxy to 3rd-party to enable the form-login&lt;br /&gt;
 ProxyPass /forwardname http://3rdpartydomain.tld&lt;br /&gt;
 ProxyPassReverse /forwardname http://3rdpartydomain.tld&lt;br /&gt;
 #enable sslProxy&lt;br /&gt;
 SSLProxyEngine on&lt;br /&gt;
&lt;br /&gt;
please note that &amp;quot;forwardname&amp;quot; is just an example, this could be anything&lt;br /&gt;
&lt;br /&gt;
2. The necessary apache-module needs to be installed for this directive to work&lt;br /&gt;
&lt;br /&gt;
Typically that is done like this:&lt;br /&gt;
a2enmod proxy_http&lt;br /&gt;
&lt;br /&gt;
3. The 3rd-party system accesses the OX-system via the same domainname as the user (e.g. oxdomain.TLD)&lt;br /&gt;
&lt;br /&gt;
4. the 3rd-party system is on the ip-check-whitelist of the OX-system as described here (in &amp;quot;10.2.20. noipcheck.cnf&amp;quot;):&lt;br /&gt;
http://software.open-xchange.com/OX6/doc/OX6-Installation-and-Administration.pdf&lt;br /&gt;
&lt;br /&gt;
Also the exact parameter-names for the FormLogin can be found here:&lt;br /&gt;
http://oxpedia.org/wiki/index.php?title=HTTP_API#Form_Login_.28since_6.20.29&lt;br /&gt;
&lt;br /&gt;
== Diagram ==&lt;br /&gt;
&lt;br /&gt;
This diagram shows the complete process. Just read it naturally from top to bottom and you have the chronological order things need to happen in.&lt;br /&gt;
&lt;br /&gt;
[[File:formLoginDiagram3.png]]&lt;br /&gt;
&lt;br /&gt;
== Example for the login-form ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD HTML 4.01//EN&amp;quot; &amp;quot;http://www.w3.org/TR/html4/strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
 &amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;meta http-equiv=&amp;quot;content-type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;meta http-equiv=&amp;quot;cache-control&amp;quot; content=&amp;quot;no-cache&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;Login&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
 function uuid() {&lt;br /&gt;
     function hex(len, x) {&lt;br /&gt;
         if (x === undefined) x = Math.random();&lt;br /&gt;
         var s = new Array(len);&lt;br /&gt;
         for (var i = 0; i &amp;lt; len; i++) {&lt;br /&gt;
             x *= 16;&lt;br /&gt;
             var digit = x &amp;amp; 15;&lt;br /&gt;
             s[i] = digit + (digit &amp;lt; 10 ? 48 : 87); // '0' and 'a' - 10&lt;br /&gt;
         }&lt;br /&gt;
         return String.fromCharCode.apply(String, s);&lt;br /&gt;
     }&lt;br /&gt;
     return [hex(8), &amp;quot;-&amp;quot;, hex(4), &amp;quot;-4&amp;quot;, hex(3), &amp;quot;-&amp;quot;, hex(4, 0.5 + Math.random() / 4), &amp;quot;-&amp;quot;, hex(12)].join(&amp;quot;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
 &amp;lt;form action=&amp;quot;/ajax/login?action=formlogin&amp;amp;authId=&amp;quot; method=&amp;quot;post&amp;quot; onSubmit=&amp;quot;this.action += uuid();&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
 &amp;lt;label for=&amp;quot;login&amp;quot;&amp;gt;Username: &amp;lt;/label&amp;gt;&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;login&amp;quot; id=&amp;quot;login&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;label for=&amp;quot;password&amp;quot;&amp;gt;Password:  &amp;lt;/label&amp;gt;&lt;br /&gt;
 &amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;password&amp;quot; id=&amp;quot;password&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Login&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;version&amp;quot; value=&amp;quot;Form Login&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;autologin&amp;quot; value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!-- When using OX App Suite --&amp;gt;&lt;br /&gt;
 &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;client&amp;quot; value=&amp;quot;open-xchange-appsuite&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;!-- Important: value of uiWebPath MUST be terminated by a trailing slash &amp;quot;/&amp;quot; --&amp;gt;&lt;br /&gt;
 &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;uiWebPath&amp;quot; value=&amp;quot;/appsuite/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!-- When using OX6 --&amp;gt;&lt;br /&gt;
 &amp;lt;!-- &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;client&amp;quot; value=&amp;quot;com.openexchange.ox.gui.dhtml&amp;quot;&amp;gt; --&amp;gt;&lt;br /&gt;
 &amp;lt;!-- &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;uiWebPath&amp;quot; value=&amp;quot;/ox6/index.html&amp;quot;&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/form&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Choeger</name></author>
	</entry>
</feed>