\documentclass{article}
\usepackage{ulem}
\usepackage{graphicx}
\usepackage{hyperref}
\pagestyle{headings}
\begin{document}
\part{OpenID Support}
\section{Goal}
Provide both client (consumer) and server OpenID support for Horde (these are different things).

\section{Bugs}
<a href="http://bugs.horde.org/ticket/6571">http://bugs.horde.org/ticket/6571</a>

\section{People}
<a href="https://wiki.horde.org/ChuckHagenbuch">ChuckHagenbuch</a> is interested in this project, and can provide expert support on Horde's authentication layer.

\section{Description}
\subsection{Horde Implementation Plan}
Horde\_Openid\_Server<br />
Horde\_Openid\_Consumer

Horde\_Auth\_Openid -> authenticate with openid server, but generate a local id for users in another horde backend? or have an openid\_users table? still need to integrate that with regular auth to allow lookups, prefs, etc.

horde\_user\_map table - map from any kind of user\_id to a numeric horde\_user\_id that can be used to identify either external (openid, whatever) or internal (Horde\_Auth driver) users, and provide a simple numeric value for use in other applications SQL tables. have different versions of horde\_user\_map if necessary for different kinds of userids, but with openid, probably always going to need a varchar(255) anyway.

\subsection{Notes}
As posted a few months back, I had started working on a PHP5 OpenID library that I wished to port to the framework since it seemed a reasonable addition given our web app focus. Given the complexity of OpenID as a distributed authentication service there are numerous components. Each by itself is actually not that hard, most of the problem is putting them together with a solid set of integration tests.

These include wrappers for large integer (> 32 bits) libraries since bcmath alone is awfully slow for this compared to gmp, cryptographic algorithms, and even a separate extensible web service (already proposed on the wiki). The list of possible sub-components that could feasibly get started with include:

Zend\_Service\_Yadis<br />
Zend\_Crypt\_DiffieHellman<br />
Zend\_Crypt\_Rsa<br />
Zend\_Crypt\_Hmac<br />
Zend\_Crypt\_Xtea<br />
Zend\_Math\_BigInteger

An actual Zend\_Service\_Openid would need all of the above as well as general file parsers. I was looking for an opinion as to whether these are acceptable as individual proposals. It seems to make sense rendering OpenID into its reusable constituent parts rather lumping everything (and inevitably burying/hiding it) into the Openid namespace. I don't want to go spamming the wiki with 6+ proposals until I get a little feedback either :).

JanRain code:<br />
I dug through the JanRain code quite a bit, and it's a bit bloated and sloppy, but I think that's just a side-effect of the library having been ported to a number of different languages, and clearly PHP wasn't the original. You might also be interested in Wez's much simpler code:

<a href="http://netevil.org/node.php?nid=949">http://netevil.org/node.php?nid=949</a>

Unless you're in an environment where you can apply his patch, you can only implement the dumb mode (or do all of that big number math in PHP, which seems wasteful and error-prone). I was hoping the JanRain library would just work, since Wez's patch won't be an option for most people until the next public release of PHP.

\section{Resources}
\begin{itemize}
\item <a href="http://openid.net/developers/">http://openid.net/developers/</a>


\item <a href="http://wiki.openid.net/Main\_Page">http://wiki.openid.net/Main\textbackslash\{\}\_Page</a>


\item <a href="http://openidenabled.com/php-openid/">http://openidenabled.com/php-openid/</a>


\item <a href="http://wiki.guruj.net/Clamshell\!Home">http://wiki.guruj.net/Clamshell\textbackslash\{\}!Home</a>


\item <a href="http://openidenabled.com/php-standalone-openid-server">http://openidenabled.com/php-standalone-openid-server</a>


\item <a href="http://www.plaxo.com/api/openid\_recipe">http://www.plaxo.com/api/openid\textbackslash\{\}\_recipe</a>


\item <a href="http://www.intertwingly.net/blog/2007/01/03/OpenID-for-non-SuperUsers">http://www.intertwingly.net/blog/2007/01/03/OpenID-for-non-SuperUsers</a>


\item <a href="http://devzone.zend.com/article/3581-Getting-Started-with-OpenID-and-PHP">http://devzone.zend.com/article/3581-Getting-Started-with-OpenID-and-PHP</a>


\item <a href="http://www.openidenabled.com/openid/libraries/php">http://www.openidenabled.com/openid/libraries/php</a>


\item <a href="http://www.openidenabled.com/resources/openid-test/checkup/">http://www.openidenabled.com/resources/openid-test/checkup/</a>


\item <a href="http://iwantmyopenid.org/bounty">http://iwantmyopenid.org/bounty</a>


\item <a href="http://www.intertwingly.net/blog/2006/12/28/Unobtrusive-OpenID">http://www.intertwingly.net/blog/2006/12/28/Unobtrusive-OpenID</a>


\item <a href="http://netevil.org/blog/2007/06/howto-set-yourself-up-with-an-openid">http://netevil.org/blog/2007/06/howto-set-yourself-up-with-an-openid</a>


\item <a href="http://siege.org/projects/phpMyID/">http://siege.org/projects/phpMyID/</a>


\item <a href="http://en.wikipedia.org/wiki/[OpenID](OpenID)">http://en.wikipedia.org/wiki/[OpenID](OpenID)</a>


\item <a href="http://en.wikipedia.org/wiki/Yadis">http://en.wikipedia.org/wiki/Yadis</a>


\item <a href="http://www.thespanner.co.uk/2007/06/29/openid-security-issues/">http://www.thespanner.co.uk/2007/06/29/openid-security-issues/</a>


\end{itemize}

\noindent\rule{\textwidth}{1pt}
Back to the <a href="https://wiki.horde.org/Project">Project List</a>

\end{document}
