<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Extra Thimian &#187; OpenLDAP</title>
	<atom:link href="http://blog.thimian.com/category/openldap/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.thimian.com</link>
	<description>Suddenly Fiction</description>
	<lastBuildDate>Sun, 14 Feb 2010 04:03:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Why have thee forsaken me, oh SSO?</title>
		<link>http://blog.thimian.com/2008/05/01/why-have-thee-forsaken-me-oh-sso/</link>
		<comments>http://blog.thimian.com/2008/05/01/why-have-thee-forsaken-me-oh-sso/#comments</comments>
		<pubDate>Thu, 01 May 2008 05:13:00 +0000</pubDate>
		<dc:creator>Phill</dc:creator>
				<category><![CDATA[Authentication]]></category>
		<category><![CDATA[English Language Posts]]></category>
		<category><![CDATA[OpenID]]></category>
		<category><![CDATA[OpenLDAP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Single sign-on]]></category>

		<guid isPermaLink="false">http://blog.thimian.com/2008/05/01/why-have-thee-forsaken-me-oh-sso/</guid>
		<description><![CDATA[Image via Wikipedia
As I&#8217;ve talked about before, I&#8217;ll talk about the requirement gathering first.
Currently, I&#8217;m looking into SSO solutions on *NIX like systems. Which is a certainly interesting field (lots of commercial vendors, in case you need somebody to sue, as Justin Gehtland put it in his RubyConf &#8216;07 presentation Ruby and Identity: OpenID, CAS [...]]]></description>
			<content:encoded><![CDATA[<p><span class="zemanta-img" style="margin: 1em; display: block; float: right;"><a href="http://en.wikipedia.org/wiki/Image:OpenID_logo.svg" target="_blank"><img src="http://upload.wikimedia.org/wikipedia/en/thumb/c/c8/OpenID_logo.svg/202px-OpenID_logo.svg.png" alt="OpenID" style="border: medium none ; display: block;" /></a><span style="margin: 1em 0pt 0pt; display: block;">Image via <a href="http://en.wikipedia.org/wiki/Image:OpenID_logo.svg" target="_blank">Wikipedia</a></span></span>
<div>As I&#8217;ve talked about before, I&#8217;ll talk about the requirement gathering first.</div>
<p>Currently, I&#8217;m looking into SSO solutions on *NIX like systems. Which is a certainly interesting field (lots of commercial vendors, in case you need somebody to sue, as <a href="http://thinkrelevance.com/about">Justin Gehtland</a> put it in his RubyConf &#8216;07 presentation <a href="http://rubyconf2007.confreaks.com/d3t2p1_security_and_identity.html">Ruby and Identity: OpenID, CAS and Information Card</a>  at RubyConf 2007).</p>
<p>However, I don&#8217;t want to <span style="font-style: italic;">buy</span> a solution. My solution shall work with open source software as much as possible (which is a topic for another day).</p>
<p>Since I am using Ruby, my options are currently severely limited:
<ul>
<li><a href="http://openidenabled.com/ruby-openid/">OpenID</a>, and</li>
<li><a href="http://code.google.com/p/rubycas-server/">CAS</a></li>
</ul>
<p>These two options are the best supported for Ruby, which means that both the client as well as the server are available in Ruby. There are <a href="http://www.ohloh.net/tags/authentication/single_sign_on">quite a few SSO solutions</a> available, but most run as a Java application, or as a C solution. While the latter isn&#8217;t much of an issue, the former is. I don&#8217;t want to suck out the whole memory and CPU of a small server just for single sign on!</p>
<div>[<span class="Apple-style-span" style="font-weight: bold;">Edit for clarity</span>: I am taking a look at the storage and retrieval of users and their credentials, before I actually use SSO. On the one hand: I can create the infrastructure from scratch, on the other hand I have to create the infrastructure from scratch, and can't just gear it all towards my little app, but have to consider a lot of usage scenarios. The information about SSO solutions is more about context, than the focus of my post. - Phill]</div>
<div><span style="font-style: italic;">But what about the backend? How do you integrate the user database</span>, I hear you ask.</p>
<p>This is the fun part (or frustrating):</p>
<p>Almost all SSO solutions come back, in one way or another, to OpenLDAP (or another LDAPv3 compatible directory service), as storage service for user data. The authentication is, usually, done via Kerberos.</p>
<p>Quoth <a href="http://en.wikipedia.org/wiki/Kerberos_%28protocol%29">Wikipedia</a>:<br /><a href="http://en.wikipedia.org/wiki/Kerberos_%28protocol%29"></a><br />
<blockquote>Kerberos is the name of a computer network authentication protocol, which allows individuals communicating over a non-secure network to prove their identity to one another in a secure manner.</p></blockquote>
<p>And while I like to apply a certain extend of.. overkill to a solution, this isn&#8217;t really feasible. It is one (1) server that is being used, with three (3) users (current projection). Not concurrent users. Maximum users. <span style="font-weight: bold;">Even LDAP is over the top for this solution (however, it allows for &#8216;true&#8217; SSO on *NIX, via PAM).</span></p>
<p>Both OpenID and CAS can plug into LDAP, and you can use <a href="http://quark.humbug.org.au/publications/ldap/system_auth/sage-au/system_auth.html">LDAP as authentication source</a>.</p>
<p><span style="font-style: italic;">But what about if you cannot use LDAP?</span> Well, the other option is to authenticate a user against <span style="font-family:courier new;">/etc/passwd</span>. Ruby surely is able to do that out of the box. It comes with the <span style="font-family:courier new;">Etc</span> module, after all. Well, yes, but no. While it does come with the <span style="font-family:courier new;">Etc</span> module, I haven&#8217;t found a way to use built-in Ruby tools to authenticate against <span style="font-family:courier new;">/etc/passwd</span> (well, there&#8217;s <a href="http://ruby-pam.sourceforge.net/ruby-pam.html">Ruby-PAM</a>, but the last release was in 2004. Not quite trust-generating for authentication).</p>
<p>So, at the moment I am considering using (parts) of Jamis Buck&#8217;s <a href="http://net-ssh.rubyforge.org/">Net::SSH</a> to hack together an OpenID or Ruby-CAS authenticator. This solution has The Smell, though, and already feels brittle. I cringe just thinking about it.</p>
<p>The benefit of this hackish solution would be, though, that no server excpet the SSH daemon would be required. And that one is already available (also, I don&#8217;t have to care about details like user maintenance, since the SSH daemon handles that for me).</p>
<p>But would the pain of maintaining something like this outweigh the pain of installing and configuring OpenLDAP? That is for the client to decide. I&#8217;ll talk about the actual solution once a decision has been made.</p>
<p>Also, if you have worked with <span style="font-family:courier new;">ruby-pam</span> and <span style="font-family:courier new;">pam-ruby</span> or have valuable experience regarding OpenLDAP (Especially on FreeBSD 5.4!), it&#8217;d be great if you could leave a comment.<br /><a href="http://rubyconf2007.confreaks.com/d3t2p1_security_and_identity.html"></a>
<div id="zemanta-pixie" style="margin: 5px 0pt; width: 100%;"><a id="zemanta-pixie-a" href="http://www.zemanta.com/" title="Zemified by Zemanta"><img id="zemanta-pixie-img" src="http://img.zemanta.com/pixie.png?x-id=7500e042-f6aa-4a3d-8194-725b18f8f372" style="border: medium none ; float: right;" /></a></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.thimian.com/2008/05/01/why-have-thee-forsaken-me-oh-sso/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.008 seconds -->
