<?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>instant-thinking.de &#187; singlesignon</title>
	<atom:link href="http://instant-thinking.de/tag/singlesignon/feed/" rel="self" type="application/rss+xml" />
	<link>http://instant-thinking.de</link>
	<description>Just enough to get you started and leave you confused</description>
	<lastBuildDate>Thu, 26 Jan 2012 15:02:31 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>OpenID selber hosten</title>
		<link>http://instant-thinking.de/2009/08/12/openid-selber-hosten/</link>
		<comments>http://instant-thinking.de/2009/08/12/openid-selber-hosten/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 14:50:23 +0000</pubDate>
		<dc:creator>der Dennis</dc:creator>
				<category><![CDATA[]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[openid]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[singlesignon]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[website]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://instant-thinking.de/?p=1890</guid>
		<description><![CDATA[OpenID1 ist ein dezentrales Single SignOn Verfahren das helfen will, die Legion der User/Passwort-Kombinationen zu reduzieren. Die Idee ist, dass man sich einmal eine OpenID besorgt und sich dann mit dieser bei vielen Sites anmelden kann. Dazu wird meistens ein OpenID-Feld angezeigt in dem man dann die Adresse seiner OpenID eintr&#228;gt. Die Login-Seite leitet dann [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://openid.net/" class="liexternal">OpenID</a><sup><a href="http://instant-thinking.de/2009/08/12/openid-selber-hosten/#footnote_0_1890" id="identifier_0_1890" class="footnote-link footnote-identifier-link" title="Hier der sehr erhellende Wikipedia-Eintrag">1</a></sup> ist ein dezentrales Single SignOn Verfahren das helfen will, die Legion der User/Passwort-Kombinationen zu reduzieren.</p>

<p>Die Idee ist, dass man sich einmal eine OpenID besorgt und sich dann mit dieser bei vielen Sites anmelden kann. Dazu wird meistens ein OpenID-Feld angezeigt in dem man dann die Adresse seiner OpenID eintr&#228;gt. Die Login-Seite leitet dann zu der OpenID weiter. Sollte man sich im Verlauf der aktuellen Surf-Session noch nicht mit seiner OpenID angemeldet haben macht man das nun, wird wieder zur&#252;ck auf die Seite geleitet an der man sich anmelden wollte und ist drin. Das ganze sieht dann z. B. so wie bei <a href="http://identi.ca/" class="liexternal">identi.ca</a><sup><a href="http://instant-thinking.de/2009/08/12/openid-selber-hosten/#footnote_1_1890" id="identifier_1_1890" class="footnote-link footnote-identifier-link" title="Ein Twitter-Clone">2</a></sup> aus:</p>

<p><a href="http://instant-thinking.de/wp-content/uploads/2009/08/openid_login_identica.jpg" rel="lightbox" class="liimagelink"><img src="http://instant-thinking.de/wp-content/uploads/2009/08/openid_login_identica.jpg" alt="openid_login_identica" title="openid_login_identica" width="400" class="center" /></a></p>

<p>Das ist sehr einfach und h&#246;rt sich nur anfangs kompliziert an.</p>

<p>Das ganze hat aber auch Haken:</p>

<ul>
    <li>Bei weitem nicht alle Websites des Internet unterst&#252;tzen OpenID<sup><a href="http://instant-thinking.de/2009/08/12/openid-selber-hosten/#footnote_2_1890" id="identifier_2_1890" class="footnote-link footnote-identifier-link" title="Aber doch schon so einige, darunter auch Google, Yahoo, Flickr, Facebook, MySpace, WordPress&hellip;">3</a></sup></li>
    <li>Manche Websites geben zwar OpenIDs aus, nehmen aber keine fremden an, so dass der ganze dezentrale Gedanke den Sinn verliert</li>
    <li>Man vertraut seine Login-Daten f&#252;r eine ganze Menge Sites seinem OpenID-Provider an</li>
</ul>

<p>Das letzte Problem l&#228;sst sich schnell l&#246;sen, wenn man einfach sein eigener OpenID-Provider wird.</p>

<p>Dazu braucht man im Prinzip nur ein bisschen eigenen Webspace der PHP kann und das Script <a href="http://siege.org/projects/phpMyID/" class="liexternal">PHPMyID</a>. Da ich WordPress f&#252;r meine Seite benutze, habe ich ausserdem noch das <a href="http://eran.sandler.co.il/openid-delegate-wordpress-plugin/" class="liexternal">OpenID Delegate PlugIn</a> heruntergeladen, das es sehr einfach macht OpenID-Anfragen an die richtige Stelle zu lenken.</p>

<p>Weiter nach dem Klick&#8230;</p>

<p>Und schon gehts los:</p>

<p>Ich habe auf meinem Webspace einen neuen Ordner namens <code>id</code> erstellt und die beiden<sup><a href="http://instant-thinking.de/2009/08/12/openid-selber-hosten/#footnote_3_1890" id="identifier_3_1890" class="footnote-link footnote-identifier-link" title="In Worten: Zwei(!) ">4</a></sup> Dateien aus denen PHPMyID besteht in diesen Ordner hoch geladen.</p>

<p>Die Datei <code>MyID.config.php</code> habe ich in <code>index.php</code> umbenannt, die Datei <code>MyID.php</code> habe ich gelassen wie sie ist.</p>

<p>Jetzt kann man schon mal die Erreichbarkeit testen. Wenn man seine OpenID aufruft<sup><a href="http://instant-thinking.de/2009/08/12/openid-selber-hosten/#footnote_4_1890" id="identifier_4_1890" class="footnote-link footnote-identifier-link" title="hier also http://instant-thinking.de/id, f&uuml;r eigene Installationen muss die URL nat&uuml;rlich angepasst werden">5</a></sup> sollte man als Meldung &#8220;This is an OpenID Server endpoint.&#8221; zur&#252;ck bekommen. Ausserdem sollte die Meldung eine &#8220;Server&#8221;-URL und eine &#8220;Realm&#8221; enthalten. Diese sollte in den meisten F&#228;llen &#8220;phpMID&#8221; lauten. Wenn zum Beispiel eine Zahl an diesem String dran h&#228;ngt, l&#228;uft PHP im Safe Mode. Das ist nicht schlimm, dann muss man sich den Realm-Wert nur merken.</p>

<p>In der <code>index.php</code> Datei werden nun der eigentlich User und das Passwort eingetragen. Damit das Passwort nicht im Klartext im Internet steht wird es vorher lokal md5-verschl&#252;sselt.</p>

<p>Das geht unter unixoiden Systemen so:</p>

<p><code class="prettyprint">$ echo -n 'username:realm:password' | openssl md5</code></p>

<p>Windows-User k&#246;nnen sich <a href="http://siege.org/projects/phpMyID/md5.exe" class="liexternal">hier</a> eine <code>md5.exe</code> herunterladen und dann z.B. so ein verschl&#252;sseltes OpenID-Passwort herstellen:</p>

<p><code class="prettyprint">C:\Dokumente und Einstellungen\user\Desktop>md5.exe -d"username:realm:password"</code></p>

<p>Username, Passwort und die Realm muss man nat&#252;rlich durch die eigenen Werte ersetzen. Das so entstandene Passwort und den Usernamen f&#252;gt man nun in die <code>index.php</code> ein, das sollte dann ungef&#228;hr so ausschauen:</p>

<p><code class="prettyprint">
'auth_username' =>      'username',
'auth_password' =>      'ce7ay7i939a4aae768359ac0547wc5be',
</code></p>

<p>Jetzt kann man sich unter dem schon vorhin getesteten OpenID-Endpoint anmelden indem man auf &#8220;Login&#8221; klickt.</p>

<p>An dieser Stelle wurde bei mir leider ein Fehler ausgegeben: Missing expected authorization header.</p>

<p>Das bedeutet, dass PHP im CGI-Modus l&#228;uft und daher die http request header nicht von phpMyID lesbar sind. Gl&#252;cklicherweise liefert phpMyID aber eine Datei namens <code>htaccess</code> mit. Diese habe ich ebenfalls in mein <code>id</code>-Verzeichnis hochgeladen und in <code>.htaccess</code> umbenannt. Der Inhalt sieht bei mir aus wie folgt, vielleicht muss man aber auch eine der anderen beiden mitgelieferten M&#246;glichkeiten ausprobieren, <a href="http://www.urbandictionary.com/define.php?term=YMMV" class="liexternal">YMMV</a>:</p>

<p><code class="prettyprint">
RewriteEngine on
RewriteCond %{HTTP:Authorization} !^$
RewriteCond %{QUERY_STRING} openid.mode=authorize
RewriteCond %{QUERY_STRING} !auth=
RewriteCond %{REQUEST_METHOD} =GET
RewriteRule (.*) %{REQUEST_URI}?%{QUERY_STRING}&amp;auth=%{HTTP:Authorization} [L]
</code></p>

<p>Durch diese mod_rewrite Magie werden die request header passend umgeformt.</p>

<p>Wenn das nun klappt muss man nur noch anderen Websites sagen, wo sich die OpenID verbirgt. Dazu muss man im Header der Site folgende Angaben machen<sup><a href="http://instant-thinking.de/2009/08/12/openid-selber-hosten/#footnote_5_1890" id="identifier_5_1890" class="footnote-link footnote-identifier-link" title="Nat&uuml;rlich wieder durch eigene Werte ersetzen">6</a></sup>:</p>

<p><pre class="brush: html: nogutter">
<link rel="openid.server" href="http://instant-thinking.de/id/index.php">
<link rel="openid.delegate" href="http://instant-thinking.de/id/index.php"></pre></p>

<p>In WordPress kann man das einfach mit dem oben erw&#228;hnten Plugin bewerkstelligen, das ist noch etwas einfacher und schaut in der Konfiguration dann so aus:</p>

<p><a href="http://instant-thinking.de/wp-content/uploads/2009/08/OpenID-Delegation-plugin.jpg" rel="lightbox" class="liimagelink"><img src="http://instant-thinking.de/wp-content/uploads/2009/08/OpenID-Delegation-plugin.jpg" alt="OpenID Delegation plugin" title="OpenID Delegation plugin" width="400" class="center" /></a></p>

<p>Und das wars dann auch. Jetzt kann ich die Adresse meiner Website benutzen um mich bei verschiedenen Websites anzumelden.</p>

<p>Wer sich lieber keine Umst&#228;nde mit der Erstellung und dem Hosting einer OpenID machen m&#246;chte, kann das OpenID Delegation Plugin auch nutzen, um die eigene OpenID bei einem Provider<sup><a href="http://instant-thinking.de/2009/08/12/openid-selber-hosten/#footnote_6_1890" id="identifier_6_1890" class="footnote-link footnote-identifier-link" title="z.B. MyOpenID.com die sind ziemlich toll">7</a></sup> hosten zu lassen und trotzdem die URL der eigenen Website verwenden. In dem Fall werden dann die OpenID-Anfragen eben einfach an  username.myopenid.com weitergeleitet.</p>

<p>Wie man es sich letzen Endes im OpenID-Land einrichtet ist ja eigentlich auch gar nicht so wichtig, die verschiedenen M&#246;glichkeiten werden durch die Offenheit des Protokolls alle gleichberechtigt behandelt. Viele weitere M&#246;glichkeiten sind in dem hervorragendem Post <a href="http://www.intertwingly.net/blog/2007/01/03/OpenID-for-non-SuperUsers" class="liexternal">OpenID for non-SuperUsers</a> von Sam Ruby aufgef&#252;hrt. Besonders die Variante mit <a href="http://yadis.org/wiki/Main_Page" class="liexternal">YADIS</a> finde ich sehr interessant&#8230;</p>

<p>In Zukunft werden sicherlich noch mehr Websites mit OpenID-Unterst&#252;tzung auftauchen und die N&#252;tzlichkeit einer solchen Authentifizierung im gleichen Masse steigen. Bleibt zu hoffen, dass sich weitere gro&#223;e und kleine Anbieter an dieser Idee beteiligen.</p>

<p>(via: <a href="http://intertwingly.net/blog/2007/12/05/phpMyId-0-7" class="liexternal">interwingly.net</a> und <a href="http://drnicwilliams.com/2007/07/03/openid-for-wordpress/" class="liexternal">Dr. Nic</a>)</p>
<ol class="footnotes"><li id="footnote_0_1890" class="footnote">Hier der sehr erhellende <a href="http://de.wikipedia.org/wiki/OpenID" rel="nofollow" class="liwikipedia">Wikipedia-Eintrag</a></li><li id="footnote_1_1890" class="footnote">Ein Twitter-Clone</li><li id="footnote_2_1890" class="footnote">Aber doch schon <a href="https://www.myopenid.com/directory" class="liexternal">so einige</a>, darunter auch Google, Yahoo, Flickr, Facebook, MySpace, WordPress&#8230;</li><li id="footnote_3_1890" class="footnote">In Worten: Zwei(!) </li><li id="footnote_4_1890" class="footnote">hier also <a href="http://instant-thinking.de/id" class="liinternal">http://instant-thinking.de/id</a>, f&#252;r eigene Installationen muss die URL nat&#252;rlich angepasst werden</li><li id="footnote_5_1890" class="footnote">Nat&#252;rlich wieder durch eigene Werte ersetzen</li><li id="footnote_6_1890" class="footnote">z.B. <a href="https://www.myopenid.com/" class="liexternal">MyOpenID.com</a> die sind ziemlich toll</li></ol>]]></content:encoded>
			<wfw:commentRss>http://instant-thinking.de/2009/08/12/openid-selber-hosten/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

