<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUUNRns5eCp7ImA9WhBbF0U.&quot;"><id>tag:blogger.com,1999:blog-37220752</id><updated>2013-05-17T11:34:57.520+02:00</updated><category term="clickonce" /><category term="security token" /><category term="DigitalMe" /><category term="AES" /><category term="livehttpheaders" /><category term="Firefox plugin" /><category term="Trust Center" /><category term="bug" /><category term="InclusiveNamespaces" /><category term="robot" /><category term="iiw2009a" /><category term="fun communications" /><category term="UI" /><category term="layalty system" /><category term="Berlin" /><category term="privacy" /><category term="cmort" /><category term="IIW IIW2007b identity" /><category term="identity selector" /><category term="identity selector selector" /><category term="healthvault" /><category term="asn.1 to java" /><category term="web2.0 summit" /><category term="&quot;off topic&quot; xkcd comic" /><category term="data portability" /><category term="extension" /><category term="spam" /><category term="U-Prove" /><category term="FriendsWithCards" /><category term="subject confirmation" /><category term="license" /><category term="video" /><category term="Information Card Foundation" /><category term="enabler" /><category term="xhtml" /><category term="maowberlin09" /><category term="eic" /><category term="CS4FF" /><category term="liberty alliance" /><category term="extended validation certificates" /><category term="multifactor" /><category term="google wave" /><category term="catalyst09" /><category term="information card" /><category term="OpenId" /><category term="Salesforce" /><category term="iiw2009b" /><category term="icf" /><category term="java" /><category term="authentication" /><category term="xsd" /><category term="user agent" /><category term="ooTao" /><category term="nfc" /><category term="codeswarm" /><category term="plugin2" /><category term="ADFS" /><category term="Kantara" /><category term="CeBIT" /><category term="oidf" /><category term="id selector advertising" /><category term="iiw8" /><category term="vrm" /><category term="CardSpace openinfocard firefox extension" /><category term="reputation management" /><category term="datasharing summit" /><category term="The Laws of Identity" /><category term="j2me" /><category term="iPhone" /><category term="compatibility" /><category term="Azigo" /><category term="hexbug" /><category term="electronic signature" /><category term="osis" /><category term="IdentitySelector" /><category term="information card image" /><category term="geneva" /><category term="G1" /><category term="firefox mobile" /><category term="CardSpace 1.5" /><category term="IdP" /><category term="relationship management" /><category term="holder-of-key" /><category term="Deutsche Telekom" /><category term="Online Communities" /><category term="verisign" /><category term="crypto" /><category term="json" /><category term="google" /><category term=".NET" /><category term="lame++" /><category term="eID" /><category term="cyberspace" /><category term="tile" /><category term="weave" /><category term="geopriv" /><category term="rsa2008" /><category term="web guide" /><category term="account manager" /><category term="Microsoft" /><category term="cardstore" /><category term="rsa" /><category term="ISO" /><category term="teletrust" /><category term="iiw2008b" /><category term="no-SSL" /><category term="IDIB" /><category term="consent" /><category term="CardSpace4Firefox" /><category term="identity bus" /><category term="event" /><category term="BurtonGroupCatalyst07 xmldap openinfocard identity interop" /><category term="ssosummit" /><category term="user centric identity" /><category term="developer garden" /><category term="perpetual-motion" /><category term="voice search" /><category term="drag and drop" /><category term="logo" /><category term="FAT" /><category term="accountchooser" /><category term="2FA" /><category term="java firefox plugin" /><category term="bearer" /><category term="unlinkability" /><category term="opensource" /><category term="plugin" /><category term="dotNET" /><category term="KeeLoq" /><category term="openid connect" /><category term="opengovernment opengov" /><category term="open identity" /><category term="xauth" /><category term="off topic" /><category term="idtbd" /><category term="&quot;IDDY 2007&quot; openinfocard" /><category term="web2.0 expo europe" /><category term="id selector" /><category term="SSL" /><category term="Fraunhofer Fokus" /><category term="xbl" /><category term="ENISA" /><category term="rsa2009" /><category term="ceremony" /><category term="xsd to asn.1" /><category term="snake oil" /><category term="social network" /><category term="Microsoft tags" /><category term="periodic table" /><category term="personas" /><category term="openinfocard" /><category term="Identity TTL" /><category term="metasystem" /><category term="cisa" /><category term="cissp" /><category term="startup" /><category term="relyingparty" /><category term="easter-egg" /><category term="codeplex" /><category term="Mobile Monday" /><category term="Momo" /><category term="NSAPI" /><category term="brown bag" /><category term="iPhone CardSpace &quot;Bandit Project&quot; openinfocard" /><category term="Google Chrome" /><category term="OSIS PIP verisignlabs &quot;laws of identity&quot; xmldap &quot;id selector&quot;" /><category term="open government" /><category term="rsac" /><category term="speaker verification" /><category term="mime-handler" /><category term="Klaatu brada nikto" /><category term="identity" /><category term="openinfocard firefox extension &quot;Kevin Miller&quot;" /><category term="iiw2008a" /><category term="gender" /><category term="telco" /><category term="keystore" /><category term="facebook jvsmith" /><category term="problem" /><category term="openinfocard drag'n'drop user-centric" /><category term="mobile" /><category term="interop" /><category term="concordia" /><category term=".net3.5" /><category term="Novell" /><category term="identity management" /><category term="html5" /><category term="Standards" /><category term="ASN.1" /><category term="datasharing" /><category term="cyberspace policy" /><category term="BarCamp" /><category term="bsi" /><category term="proprietary crypto" /><category term="open source" /><category term="eic2008" /><category term="Information Cards" /><category term="firefox" /><category term="location" /><category term="dss2008" /><category term="PDC2008" /><category term="XPCOM" /><category term="css" /><category term="ActiveX" /><category term="e4x" /><category term="wallet" /><category term="r-cards" /><category term="BYOD" /><category term="sun" /><category term="quillp" /><category term="microformat" /><category term="link" /><category term="ip location" /><category term="ISIP" /><category term="eic2009" /><category term="yhoo" /><category term="eclipse" /><category term="DIDW" /><category term="windows mobile" /><category term="didw2008" /><category term="IRM" /><category term="openinfocard firefox extension" /><category term="humor" /><category term="xml" /><category term="IE7" /><category term="magic wand" /><category term="midlet" /><category term="html object" /><category term="higgins" /><category term="controls" /><category term="cardspace geneva" /><category term="security" /><category term="german language" /><category term="xrds" /><category term="age verification" /><category term="Sun Microsystems" /><category term="elf" /><category term="toolbar" /><category term="federation" /><category term="WS-Trust" /><category term="cloud" /><category term="SSO" /><category term="DIDW2007" /><category term=".net3" /><category term="internet identity workshop" /><category term="CardSpace" /><category term="SAML" /><category term="oracle" /><category term="LDAP" /><category term="t-home" /><category term="&quot;sign midlet&quot; midlet j2me &quot;code signing&quot; &quot;intermediate  certificate&quot;" /><category term="icardie.dll" /><category term="claims" /><category term="single-sign-on" /><category term="geolocation" /><category term="mobile wallet" /><category term="local chapter" /><category term="rsa2" /><category term="GPS" /><category term="certificate" /><category term="probile" /><category term="selector" /><category term="fun" /><category term="active client" /><category term="id selector selector" /><category term="bugzilla" /><category term="variable claim" /><category term="xmldap &quot;id selector&quot; openidcard sxip SAML" /><category term="Avoco" /><category term="wiki" /><category term="javascript" /><category term="trust" /><category term="smartcard" /><category term="iiw2010a" /><category term="reputation" /><category term="informationcard  openinfocard" /><category term="map" /><category term="glassfish" /><category term="relying party" /><category term="firefox3" /><category term="Firefix" /><category term="identity metasystem" /><category term="conference" /><category term="paymentCard" /><category term="identropy" /><category term="sex" /><category term="eternal optimist" /><category term="Kim Cameron" /><category term="STS" /><category term="wordle" /><category term="python" /><category term="firefox4" /><category term="deep dive" /><category term="bandit project" /><category term="claims informationcard" /><category term="WLAN" /><category term="open" /><category term="oauth" /><category term="civicloc" /><category term="iiw" /><category term="Android" /><category term="wave" /><category term="addon" /><category term="IMI" /><category term="developer phone" /><category term="Yahoo" /><category term="untracebility" /><category term="pageaction" /><category term="fennec" /><category term="Firefox extension" /><category term="apache" /><category term="msft" /><category term="iiw2007b" /><category term="recommendation" /><category term="multiple claims" /><category term="xmldap" /><category term="opensso" /><category term="trustbearer" /><category term="OASIS" /><category term="openinfocard.org" /><category term="rsac2010US" /><category term="information card icon" /><category term="openinfocard interop" /><category term="ISIP1.5" /><category term="Symbian" /><category term="&quot;id selector&quot; java openinfocard signature" /><category term="Open Source Projects" /><category term="keytool" /><category term="openifnocard" /><category term="minimal disclosure token" /><category term="pingidentity" /><category term="jobs" /><category term="xml schema" /><category term="search" /><category term="IDM" /><category term="Credentica" /><category term="eGovernment" /><category term="IE" /><category term="mozilla" /><category term="infocard" /><category term="informationcard" /><category term="metadata" /><category term="password" /><category term="identity theft" /><category term="xmldap infocard sts relyingparty" /><category term="merger" /><category term="DIDW DIDW2007" /><title>ignisvulpis</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://ignisvulpis.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>289</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Ignisvulpis" /><feedburner:info uri="ignisvulpis" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CUUNRns-eyp7ImA9WhBbF0U.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-4487976271721511384</id><published>2013-05-17T11:34:00.000+02:00</published><updated>2013-05-17T11:34:57.553+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-17T11:34:57.553+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mobile wallet" /><category scheme="http://www.blogger.com/atom/ns#" term="Standards" /><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="password" /><category scheme="http://www.blogger.com/atom/ns#" term="2FA" /><category scheme="http://www.blogger.com/atom/ns#" term="wallet" /><category scheme="http://www.blogger.com/atom/ns#" term="nfc" /><category scheme="http://www.blogger.com/atom/ns#" term="open" /><category scheme="http://www.blogger.com/atom/ns#" term="identity" /><category scheme="http://www.blogger.com/atom/ns#" term="BYOD" /><title>FIDO Alliance</title><content type="html">I am not happy with the FIDO Alliance and their &lt;a href="http://www.fidoalliance.org/faqs.html" target="_blank"&gt;FAQ &lt;/a&gt;do not eliminate my concerns.&lt;br /&gt;
&lt;br /&gt;
The major concern beeing: "Why isn't this going straight to a standards body?"&lt;br /&gt;
Their answer:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;h5&gt;
The FIDO authentication protocol needs to be part of a standardized,
 interoperable ecosystem to be successful. Building this ecosystem 
requires the active commitment of everybody from hardware chipset 
vendors, to the manufacturers of back-end server systems. Coordination 
across the divergent interests of these players is a complex affair, and
 one that current technical standards bodies are not well suited to 
handle.&lt;/h5&gt;
&lt;h5&gt;
The FIDO Alliance will refine the protocol, and monitor the 
extensions required to meet market needs and to make the protocol robust
 and mature.  Implementation will not be undertaken by the FIDO 
Alliance.  The mature protocol will be presented to the IETF, W3C or 
similar body after which it will be open to all industry players to 
implement.&lt;/h5&gt;
&lt;/blockquote&gt;
This is what standardization bodies working groups are for. Work on protocols and formats. Work on security considerations. Use the experience of "the community".&lt;br /&gt;
&lt;br /&gt;
So FIDO is developing a protocol and will then present it to one standardization body...&lt;br /&gt;
Meanwhile it is a closed thing and it costs relevant amounts of &lt;a href="http://www.fidoalliance.org/join.html" target="_blank"&gt;money &lt;/a&gt;to join the alliance.&lt;br /&gt;
This neither free nor open.&lt;br /&gt;
&lt;br /&gt;
During IIW there were several sessions on FIDO (&lt;a href="http://iiw.idcommons.net/Strong_2-Factor_For_All_%E2%80%93_Google_and_FIDO_Alliance" target="_blank"&gt;1&lt;/a&gt;, &lt;a href="http://iiw.idcommons.net/FIDO_Alliance_%E2%80%93_Fast_Identity_Online_Overview/Nutshell" target="_blank"&gt;2&lt;/a&gt;). Each full of good intentions and marketing speek but no substance. No real information. You have to join the alliance to get that. Well, ...&lt;br /&gt;
&lt;br /&gt;
Somebody at &lt;a href="https://www.noknok.com/" target="_blank"&gt;Nok Nok Labs&lt;/a&gt; convinced somebody at Paypal to hire them and found FIDO. Why Google joined despite Google's support for the &lt;a href="http://www.w3.org/2012/webcrypto/" target="_blank"&gt;W3C WebCrypto&lt;/a&gt; group I have no idea.&lt;br /&gt;
&lt;br /&gt;
The W3C WebCrypto group is were this belongs. This might need &lt;a href="http://www.w3.org/2011/11/webcryptography-charter.html" target="_blank"&gt;rechartering&lt;/a&gt; of the group. But that is doable. Especially if the proposal is backed by a prototype implementation. Especially if it is backed by by Paypal, Lenovo, Google, Nxp and &lt;a href="http://www.fidoalliance.org/members.html" target="_blank"&gt;others&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I believe that we need better authentication methods beyond username and password. I think that bring your own (hardware) identiy might work to that goal. I believe that mobile phones, and SIM cards and NFC help to achieve this. I believe that the mobile wallet is the right user interface to choose your identity.&lt;br /&gt;
&lt;br /&gt;
I believe that doing it in a closed group is not the right way. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;img border="0" src="https://lh3.ggpht.com/-QoVBbOx3bcw/UZX28alXeWI/AAAAAAAAI7E/wJZG4_2NXyo/s1600/nopasswords3.png" style="display: block; margin-left: auto; margin-right: auto;" /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/ZYJrZEPhA64" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/4487976271721511384/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=4487976271721511384" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/4487976271721511384?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/4487976271721511384?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/ZYJrZEPhA64/fido-alliance.html" title="FIDO Alliance" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2013/05/fido-alliance.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMCQHk6eyp7ImA9WhNRE0o.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-8755863173814451820</id><published>2012-11-08T13:24:00.000+01:00</published><updated>2012-11-08T13:24:21.713+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-08T13:24:21.713+01:00</app:edited><title>Javascript API for OpenID</title><content type="html">Too long ago I wrote about an Javascript API for openid:
&lt;a href="http://ignisvulpis.blogspot.de/2011/03/all-those-nascars.html"&gt;all those NASCARs&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;
To repeat the main points:&lt;br/&gt;&lt;br/&gt;

Sites currently have no easy way to detect support for openid&lt;/br&gt;
The site can detect support for openid like so:&lt;br/&gt;
&lt;pre&gt;
   if (window.openid) { don't show the nascar }&lt;br/&gt;
&lt;/pre&gt;


The DOM level API that allows the site to query the preferred identity provider looks like this:&lt;br/&gt;
&lt;pre&gt;
   window.openid.getPreferredOpenidProvider(callback);
&lt;/pre&gt;

In a world of oauth2 and openid connect this could be generalized to:&lt;br/&gt;
https://openid.net/specs/openid-connect-standard-1_0.html#rf_prep


&lt;pre&gt;
    var parameters = {};
    parameters.response_type="id_token";
    parameters.client_id="https://server.example.com/seminar/callback.html";
    parameters.request = "eyJhbGciOiJSUzI1NiIsIng1dSI6Imh0dHBzOlwvXC9nYWJ1bm9taS5uZXRcL3NlbWluYXJcL3JzYV9wdWJsaWNfa2V5LnBlbSJ9.ewoJInJlc3BvbnNlX3R5cGUiOiAiaWRfdG9rZW4iLAoJInNjb3BlIjogIm9wZW5pZCIsCgkiY2xpZW50X2lkIjogImh0dHBzOi8vZ2FidW5vbWkubmV0L3NlbWluYXIvY2FsbGJhY2suaHRtbCIsCgkicG9saWN5X3VybCI6ICJodHRwczovL2dhYnVub21pLm5ldC9zZW1pbmFyL3BvbGljeS5odG1sIiwKCSJ1c2VyaW5mbyI6IHsKCQkiY2xhaW1zIjogewoJCQkibmFtZSI6IG51bGwsCgkJCSJlbWFpbCI6IG51bGwsCgkJCSJwaWN0dXJlIjogbnVsbAoJCX0KCX0sCgkicmVnaXN0cmF0aW9uIjogewoJCSJhcHBsaWNhdGlvbl9uYW1lIjogIlNhbXBsZSBTZW1pbmFyIiwKCQkibG9nb191cmwiOiAiaHR0cHM6Ly9nYWJ1bm9taS5uZXQvc2VtaW5hci9sb2dvLnBuZyIsCgkJIng1MDlfdXJsIjogImh0dHBzOi8vZ2FidW5vbWkubmV0L3NlbWluYXIvcnNhX3B1YmxpY19rZXkucGVtIgoJfQp9Cg.Faytuhwb2W4CWVz2-10umSieh-bqR7QXqU0bNF39u_D0mGoBD4e3X2b4jZNqPvPADSnQhlBGSJu189iFM5bwFzchnO-quCpj7T2CK_-wkrpL5LUn_WHYMmYlFadmb-a1p-TEo7exU9azMS9cT70-kHNqmTaJziZyiAMoJ0Q4TtyTt1Xbkknc_CQRug3ilNv3bEXSlOlva3HUOY7jQIbYMB3jDL3QxS1wbVYNAjOxCxCDmiNAUJA-BkYe6Tpyj-DUs57IM4wQSp64sqim8RqirJJfFb4bCbNTkC3G8sYfN2_1-qEDpOnWW7N3gjl174TWHbnzVLAZGg_rZm58-wHOLw";
    parameters.state="509b9cafd3119";
    parameters.nonce="509b9cafd34fd";

    window.openid.connect(parameters, oc_callback);
&lt;/pre&gt;

The callback &lt;pre&gt;oc_callback&lt;/pre&gt; would be called with one parameter.

&lt;pre&gt;
function oc_callback(resp) {
  // resp contains a signed then encrypted id_token in jw-* format
  // https://tools.ietf.org/html/draft-ietf-jose-json-web-encryption
  // https://tools.ietf.org/html/draft-ietf-jose-json-web-signature
  // state and nonce are inside the resp parameter too
  // need a private key to decrypt it so forward it to my own validation endpoint
  $.post("validate.php", { resp: resp },
   function(id_token) {
     alert("returned id_token: " + id_token);
   }); 
}
&lt;/pre&gt;

The general idea is: put all http request parameters which are defined in openid connect into the request object. Put all the http respones parameters into the response object.&lt;br/&gt;&lt;br/&gt;

I think we need an Javascript API for identity that is supported by browsers.
BrowserID/Persona and AccountChooser do something in this direction but not enough.


&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/vJnrfLOIBuI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/8755863173814451820/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=8755863173814451820" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/8755863173814451820?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/8755863173814451820?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/vJnrfLOIBuI/javascript-api-for-openid.html" title="Javascript API for OpenID" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2012/11/javascript-api-for-openid.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUHQngzcCp7ImA9WhVbFUo.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-1201012832778133063</id><published>2012-06-01T15:41:00.000+02:00</published><updated>2012-06-01T19:37:13.688+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-01T19:37:13.688+02:00</app:edited><title>ECDH-ES for JSON Web Encryption</title><content type="html">The JSON WebToken spec RECOMMENDS that &lt;a href="http://en.wikipedia.org/wiki/Elliptic_curve_Diffie%E2%80%93Hellman"&gt;ECDH-ES&lt;/a&gt; is implemented. Here we go:

&lt;br /&gt;
&lt;br /&gt;
Here are the relevant snippets from the &lt;a href="https://tools.ietf.org/id/draft-ietf-jose-json-web-algorithms-02.html"&gt;JWA&lt;/a&gt; spec:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4.1. "alg" (Algorithm) Header Parameter Values for JWE&lt;/b&gt; &lt;br /&gt;
&lt;table border="1" cellpadding="3" cellspacing="0" class="tt full center"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class="left"&gt;alg Parameter Value&lt;/th&gt;
&lt;th class="left"&gt;Key Encryption or Agreement Algorithm&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="left"&gt;ECDH-ES&lt;/td&gt;
&lt;td class="left"&gt;Elliptic Curve Diffie-Hellman Ephemeral Static, as defined in &lt;a href="http://tools.ietf.org/html/rfc6090"&gt;RFC 6090&lt;/a&gt; , and using the Concat KDF, as defined in Section 5.8.1 of &lt;a href="http://csrc.nist.gov/publications/nistpubs/800-56A/SP800-56A_Revision1_Mar08-2007.pdf"&gt;NIST.800-56A&lt;/a&gt;, where the Digest Method is SHA-256 and all OtherInfo parameters are the empty bit string&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;b&gt;&lt;br /&gt;&lt;br /&gt;
4.6. Key Agreement with Elliptic Curve Diffie-Hellman Ephemeral Static (ECDH-ES)&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This section defines the specifics of agreeing upon a JWE CMK with Elliptic Curve Diffie-Hellman Ephemeral Static, as defined in &lt;a href="http://tools.ietf.org/html/rfc6090"&gt;RFC 6090&lt;/a&gt;, and using the Concat KDF, as defined in Section 5.8.1 of &lt;a href="http://csrc.nist.gov/publications/nistpubs/800-56A/SP800-56A_Revision1_Mar08-2007.pdf"&gt;NIST.800-56A&lt;/a&gt;, where the Digest Method is SHA-256 and all OtherInfo parameters are the empty bit string. The alg header parameter value ECDH-ES is used in this case.

A key of size 160 bits or larger MUST be used for the Elliptic Curve keys used with this algorithm. The output of the Concat KDF MUST be a key of the same length as that used by the enc algorithm.

An epk (ephemeral public key) value MUST only be used for a single key agreement transaction.
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt; Appendix B. Encryption Algorithm Identifier Cross-Reference &lt;/b&gt;
&lt;br /&gt;
&lt;table border="1" cellpadding="3" cellspacing="0" class="tt full center"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class="left"&gt;Algorithm&lt;/th&gt;
&lt;th class="left"&gt;JWE&lt;/th&gt;
&lt;th class="left"&gt;XML ENC&lt;/th&gt;
&lt;th class="left"&gt;JCA&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="left"&gt;Elliptic Curve Diffie-Hellman Ephemeral Static&lt;/td&gt;
&lt;td class="left"&gt;ECDH-ES&lt;/td&gt;
&lt;td class="left"&gt;http://www.w3.org/2009/xmlenc11#ECDH-ES&lt;/td&gt;
&lt;td class="left"&gt;TBD&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
I could not find a Java implementation in JavaSE and the &lt;a href="http://bouncycastle.org/java.html"&gt;Bouncycastle&lt;/a&gt; library does not seem to have one neither.
Bouncycastle does implement keyderivation functions but not the one from NIST.800-56A.
Valuable input came from this webpage "&lt;a href="http://www.di-mgt.com.au/cryptoKDFs.html"&gt;Key Derivation Functions: How many KDFs are there?&lt;/a&gt;".
Taking the Bouncycasle implementation and converting it into KDFconcat is easy and here it is:
&lt;a href="https://code.google.com/p/openinfocard/source/browse/trunk/src/org/xmldap/crypto/KDFConcatGenerator.java"&gt;https://code.google.com/p/openinfocard/source/browse/trunk/src/org/xmldap/crypto/KDFConcatGenerator.java&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
The next thing needed are some keypairs for the JUNIT test cases. I generated them using openssl.&lt;br&gt;
&lt;blockquote&gt;openssl ecparam -out key1.pem -name secp256r1 -genkey&lt;/blockquote&gt;
and displayed them using
&lt;pre&gt; openssl ec -in key1.pem -text
read EC key
Private-Key: (256 bit)
priv:
    07:2f:23:22:c0:e7:5e:0c:85:17:64:b4:21:81:99:
    67:78:fd:22:59:2f:87:e5:d4:38:36:09:74:29:a1:
    c3:fc
pub:
    04:ed:3c:83:1b:f3:e1:05:9f:12:07:7f:4b:e4:fd:
    fe:90:55:73:d1:c6:76:45:b4:7d:48:64:ea:17:9d:
    de:99:86:a9:a6:ad:34:27:4a:80:fc:94:b3:a5:ef:
    6c:6e:78:2c:22:7a:39:63:a6:a4:26:50:97:6d:a6:
    ad:e9:90:a1:61
ASN1 OID: prime256v1
writing EC key
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIAcvIyLA514MhRdktCGBmWd4/SJZL4fl1Dg2CXQpocP8oAoGCCqGSM49
AwEHoUQDQgAE7TyDG/PhBZ8SB39L5P3+kFVz0cZ2RbR9SGTqF53emYappq00J0qA
/JSzpe9sbngsIno5Y6akJlCXbaat6ZChYQ==
-----END EC PRIVATE KEY-----
&lt;/pre&gt;
Too bad that the man page does not go into detail in what format priv and pub are... Read the &lt;a href="http://www.openssl.org/source/openssl-1.0.1c.tar.gz"&gt;source&lt;/a&gt;, Luke!
It seems that the priv key D is just the bytes in hex of the private key BigInteger. The public key seems to be something else but this is no problem because in ECC the public key is G*D where G is a curve parameter.
&lt;br/&gt;
So the two private keys are now defined &lt;a href="https://code.google.com/p/openinfocard/source/browse/trunk/testsrc/org/xmldap/json/WebTokenTest.java#140"&gt;here&lt;/a&gt; in the JUNIT tests. One is for the sender of the JWE the other for the recipient.
&lt;pre&gt;
  static final String ec256_a_priv = "072f2322c0e75e0c851764b42181996778fd22592f87e5d43836097429a1c3fc";
  static final String ec256_b_priv = "1a3eda89dc067871530601f934c6428574f837507c578e45bd10a29b2e019bfb";
&lt;/pre&gt;
Now the public keys are computed like &lt;a href="https://code.google.com/p/openinfocard/source/browse/trunk/testsrc/org/xmldap/json/WebTokenTest.java#257"&gt;this&lt;/a&gt;:
&lt;pre&gt;
  ASN1ObjectIdentifier oid = ECUtil.getNamedCurveOid("secp256r1");
  X9ECParameters x9ECParameters = ECUtil.getNamedCurveByOid(oid);
  byte[] ec256_a_priv_bytes = Hex.decode(ec256_a_priv);
  ec256_a_D = new BigInteger(1, ec256_a_priv_bytes);
  ECPoint pub = x9ECParameters.getG().multiply(ec256_a_D);
  ec256_a_X = pub.getX().toBigInteger();
  ec256_a_Y = pub.getY().toBigInteger();
&lt;/pre&gt;
This gives the following jwtHeader for the first private key:
ECDH-ES jwtHeaderSegment: &lt;pre&gt;{"alg":"ECDH-ES",
"enc":"A256GCM",
"iv":"__79_Pv6-fg",
"crv":"secp256r1",
"x":"AO08gxvz4QWfEgd_S-T9_pBVc9HGdkW0fUhk6hed3pmG",
"y":"AKmmrTQnSoD8lLOl72xueCwiejljpqQmUJdtpq3pkKFh"}
&lt;/pre&gt;
The spec says that the senders key pair is ephemeral and the recipient's key pair is static. So code using &lt;a href="https://code.google.com/p/openinfocard/source/browse/trunk/src/org/xmldap/json/WebToken.java#696"&gt;this code&lt;/a&gt; should generate one ephemeral EC key pair. Stuff the private key  and the recipients public key into the encrypt function. These key parts are used for the key agreement. See the &lt;a href="http://en.wikipedia.org/wiki/Elliptic_curve_Diffie%E2%80%93Hellman"&gt;wikipedia page&lt;/a&gt; for a short explanation.
I will implement the "epk" header parameter at a later time. For now I use the X and Y format to transfer the ephemeral public key to the recipient.&lt;br/&gt;
Base64 encoding the header yields:
&lt;pre&gt;eyJhbGciOiJFQ0RILUVTIiwNCiJlbmMiOiJBMjU2R0NNIiwNCiJpdiI6Il9fNzlfUHY2LWZnIiwNCiJjcnYiOiJzZWNwMjU2cjEiLA0KIngiOiJBTzA4Z3h2ejRRV2ZFZ2RfUy1UOV9wQlZjOUhHZGtXMGZVaGs2aGVkM3BtRyIsDQoieSI6IkFLbW1yVFFuU29EOGxMT2w3Mnh1ZUN3aWVqbGpwcVFtVUpkdHBxM3BrS0ZoIn0&lt;/pre&gt;
&lt;br&gt;
&lt;br&gt;
The next step in my interpretation of the spec is to generate the content encryption key using the key derivation function defined in the NIST paper.
The content encryption is done using the method specified in the enc parameter of the header here: A256GCM&lt;br/&gt;
For this method I need a 256bit == 32byte key and a 12 byte IV. So the call to the KDF &lt;a href="https://code.google.com/p/openinfocard/source/browse/trunk/src/org/xmldap/json/WebToken.java#727"&gt;is&lt;/a&gt;:&lt;br/&gt;
&lt;pre&gt;
  ECDHBasicAgreement ecdhBasicAgreement = new ECDHBasicAgreement();
  ecdhBasicAgreement.init(ecPrivateKeyParameters);
  BigInteger z = ecdhBasicAgreement.calculateAgreement(ecPublicKeyParameters);
  byte[] zBytes = BigIntegers.asUnsignedByteArray(z);
  KDFConcatGenerator kdfConcatGenerator = new KDFConcatGenerator(kdfDigest);
  kdfConcatGenerator.init(new KDFParameters(zBytes, null));
  byte[] out = new byte[12 + (keylength / 8)];
  kdfConcatGenerator.generateBytes(out, 0, out.length);
  byte[] secretKeyBytes = new byte[keylength / 8];
  byte[] ivBytes = new byte[12];
  System.arraycopy(out, 0, ivBytes, 0, 12);
  System.arraycopy(out, 12, secretKeyBytes, 0, secretKeyBytes.length);
&lt;/pre&gt;&lt;br/&gt;
Now a random 256bit AES key is generated and encrypted using the secret key and IV generated by the KDF.&lt;br/&gt;
For this content encryption key (base64url) &lt;pre&gt;
ECDH-ES contentEncryptionKey=Y8-fcu11np1l3qlgpGq0XF58Cv2n4DOJ8lkdl2gRXgI&lt;/pre&gt;
the values of the key segment and the jwe crypto segment are this: &lt;pre&gt;
ECDH-ES jwtSymmetricKeySegment base64: _vZ-N5fs3_uJ9o-woDOzKZBQopZRi4EfZVNB4UWqdCjappfoOFCZPTUBDruWAtWY
ECDH-ES jwtCryptoSegment base64: psSi2xa7oY1pmK1m9GGXREr9YB6QUdOtK_Jl_nnKYpmKGHL577tUdadK8H_yacb78bBlyTnrTx51pmxyo6UJMM9c_P-lOfMiMslvS-3t1vD5HiOq0Rg
&lt;/pre&gt;
Please use the &lt;a href="http://www.ietf.org/mail-archive/web/jose/current/maillist.html"&gt;IETF JOSE mailing list&lt;/a&gt; for comments and suggestions.
&lt;br&gt;&lt;br&gt;
Special thanks to &lt;a href="http://self-issued.info/"&gt;Mike Jones&lt;/a&gt; for writing most of the JW* specs text and to &lt;a href="http://www.thread-safe.com/"&gt;John Bradley&lt;/a&gt; for being a fountain of knowledge in all things crypto and identity management protocols and formats. Not to forget &lt;a href="http://nat.sakimura.org/"&gt;Nat Sakimura&lt;/a&gt; for starting the &lt;a href="http://lists.openid.net/mailman/listinfo/openid-specs-ab"&gt;OpenID Artifact Binding WG&lt;/a&gt; which now does all the &lt;a href="http://openid.net/connect/"&gt;OpenID Connect&lt;/a&gt; work. Especially for mobile devices we need simple, light weight protocols and formats. JW* and especially ECDH-ES are important for mobile.&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/qT0bvwzfeeo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/1201012832778133063/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=1201012832778133063" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/1201012832778133063?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/1201012832778133063?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/qT0bvwzfeeo/ecdh-es-for-json-web-encryption.html" title="ECDH-ES for JSON Web Encryption" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2012/06/ecdh-es-for-json-web-encryption.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cHRHw9fyp7ImA9WhVUGEU.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-2944800329024979337</id><published>2012-05-24T21:50:00.000+02:00</published><updated>2012-05-24T21:50:35.267+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-24T21:50:35.267+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OpenId" /><category scheme="http://www.blogger.com/atom/ns#" term="accountchooser" /><category scheme="http://www.blogger.com/atom/ns#" term="oidf" /><title>Playing with Google's Identity Toolkit on openinfocard.org</title><content type="html">Today I retried Google's Identity Toolkit.
&lt;br /&gt;
&lt;a href="https://developers.google.com/identity-toolkit/v1/acguide"&gt;https://developers.google.com/identity-toolkit/v1/acguide&lt;/a&gt;&lt;br /&gt;
So I had to undust my rudimentary PHP knowledge and write some scripts and minimal html pages.
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-I4hjmpVDq5s/T76LXhK0QtI/AAAAAAAAC2U/6jMM7XvqEow/s1600/git-startpage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="222" src="http://1.bp.blogspot.com/-I4hjmpVDq5s/T76LXhK0QtI/AAAAAAAAC2U/6jMM7XvqEow/s320/git-startpage.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Clicking the key hole icon opens the account chooser.
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-FYIuMM2SqD4/T76LU1x6oQI/AAAAAAAAC2M/iYNNoom8sbM/s1600/git-signin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="222" src="http://3.bp.blogspot.com/-FYIuMM2SqD4/T76LU1x6oQI/AAAAAAAAC2M/iYNNoom8sbM/s320/git-signin.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
I choose GMail and login to Google.
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-OBYlv2ZX0I4/T76LbqqHXcI/AAAAAAAAC2g/R0dNt3J5Apc/s1600/idp-signin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-OBYlv2ZX0I4/T76LbqqHXcI/AAAAAAAAC2g/R0dNt3J5Apc/s320/idp-signin.png" width="276" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-P6LsazGZ_oI/T76Lcka4JVI/AAAAAAAAC2s/SgQw9lB51Dw/s1600/signingin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="222" src="http://2.bp.blogspot.com/-P6LsazGZ_oI/T76Lcka4JVI/AAAAAAAAC2s/SgQw9lB51Dw/s320/signingin.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
This is the result page. My site now knows some attributes about me like verifiedEmail, display name and imageUrl etc.
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-1aqyvKZ2-U8/T76La3BmF6I/AAAAAAAAC2c/OdRXDaMnkiI/s1600/home.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="222" src="http://3.bp.blogspot.com/-1aqyvKZ2-U8/T76La3BmF6I/AAAAAAAAC2c/OdRXDaMnkiI/s320/home.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Next task: Repeat and rinse with &lt;a href="http://accountchooser.net/"&gt;http://accountchooser.net/&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/pWozg6JLq5o" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/2944800329024979337?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/2944800329024979337?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/pWozg6JLq5o/playing-with-googles-identity-toolkit.html" title="Playing with Google's Identity Toolkit on openinfocard.org" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-I4hjmpVDq5s/T76LXhK0QtI/AAAAAAAAC2U/6jMM7XvqEow/s72-c/git-startpage.png" height="72" width="72" /><feedburner:origLink>http://ignisvulpis.blogspot.com/2012/05/playing-with-googles-identity-toolkit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YDQHoyfyp7ImA9WhVWGUo.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-1509701760820170814</id><published>2012-05-02T17:06:00.000+02:00</published><updated>2012-05-02T17:06:11.497+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-02T17:06:11.497+02:00</app:edited><title>Debugging OAuth2 SSL Connections</title><content type="html">&lt;div class="separator" style="clear: both;"&gt;
&lt;a href="http://hueniverse.com/wp-content/uploads/2010/05/OAuth2.png" imageanchor="1"&gt;&lt;img border="0" height="100" src="http://hueniverse.com/wp-content/uploads/2010/05/OAuth2.png" style="float: right;" width="100" /&gt;&lt;/a&gt;&lt;/div&gt;
Debugging SSL protected protocols like oauth2 can be a problem but it is not
entirely impossible nor hard to do.&lt;br /&gt;
&lt;br /&gt;
One way to do it is to spoof the certificates the protocol relies on to protect the communication. The certificates are used by the client
to verify that the server is the endpoint it is supposed to be talking to and to encrypt the communication. A
good description for the Android operating system is given in this blog post (&lt;a href="http://myhowto.org/java/81-intercepting-and-decrypting-ssl-communications-between-android-phone-and-3rd-party-server/" title="Permanent link to Intercepting and decrypting SSL communications between Android phone and 3rd party server"&gt;Intercepting
and decrypting SSL communications between Android phone and 3rd party server&lt;/a&gt;).
Nobody can blame Android for being picked here as an example and ways to do
this exist for all operating systems. Yes, to install the certs you need root
access; but it well may be that you have that and want to help a friend to
debug their installed application on your phone. Even if the client is running
on a server it may be worthwhile to debug the network traffic to find certain
errors in the client implementation. An error specific to an oauth
implementation might be that your friend has a typo in the cliend_id or
client_secret and the authorization server is rejecting requests because of
that.&lt;br /&gt;
It might be hard for you to verify client_id and client_secret by analyzing
the client. Maybe they are stored on a UICC or stored encrypted in the file system (and
the keystore password is not "changeit") and are only decrypted and
used when a resource owner uses the client.&lt;br /&gt;
By analyzing the SSL traffic you can help to find this kind of bug and all
other related to protocol issues.&lt;br /&gt;
&lt;br /&gt;
But maybe you don't have an SSL server to capture the plain text from an SSL
connection?! Then another path you might take is to swap the client's SSL
implementation with your own. You don't have to change the client's code or analyze
the client's memory. Building your own version of most operating systems with
your own SSL implementation is not that hard to do. Or maybe you can just
register your SSL implementation to be used with all client code? Or you can
swap a library?&lt;br /&gt;
There are more ways to achieve your goal.&lt;br /&gt;
&lt;br /&gt;
But make sure that you have your friend's permission first. Not everybody might be happy with the fact that you now know the client_id and client_secret.&lt;br /&gt;
&lt;br /&gt;
Have fun!&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/gXDUTDkB9Nc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/1509701760820170814/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=1509701760820170814" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/1509701760820170814?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/1509701760820170814?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/gXDUTDkB9Nc/debugging-oauth2-ssl-connections.html" title="Debugging OAuth2 SSL Connections" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2012/05/debugging-oauth2-ssl-connections.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EMSXw4eyp7ImA9WhVWFUU.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-7634803637888390980</id><published>2012-04-28T07:08:00.001+02:00</published><updated>2012-04-28T07:08:08.233+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-28T07:08:08.233+02:00</app:edited><title>Identity Management @ RSA 2012 Europe</title><content type="html">Sharpen your keyboard and &lt;a href="http://www.rsaconference.com/events/2012/europe/call-for-speakers.htm"&gt;submit&lt;/a&gt; a paper for the Identity Management track at RSA Conference Europe 2012. The leading conference on security and all things you need to know.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-H3oZuO74dVc/T5t51pTYCNI/AAAAAAAACHU/UZAU62niWDs/s1600/RSA-2012-europe.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="68" src="http://3.bp.blogspot.com/-H3oZuO74dVc/T5t51pTYCNI/AAAAAAAACHU/UZAU62niWDs/s320/RSA-2012-europe.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
From the&lt;a href="http://www.rsaconference.com/events/2012/europe/call-for-speakers/topic-descriptions.htm"&gt; topic description&lt;/a&gt;:
&lt;b&gt;Identity Management &lt;/b&gt;&lt;br /&gt;
Identity Management covers issues of access control,  
authentication, identification technologies &amp;amp; protocols. Sessions on
  Identity and Access Management (IAM) fit here, along with sessions on 
IAM  standards and architecture. This topic also covers issues such as 
credential  management, multifactor authentication and new methods of 
authentication.&lt;/blockquote&gt;
The Call for Speakers closes on &lt;strong&gt;Friday 18th May&lt;/strong&gt;&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/LT0n-Lt9ec4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/7634803637888390980/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=7634803637888390980" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/7634803637888390980?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/7634803637888390980?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/LT0n-Lt9ec4/identity-management-rsa-2012-europe.html" title="Identity Management @ RSA 2012 Europe" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-H3oZuO74dVc/T5t51pTYCNI/AAAAAAAACHU/UZAU62niWDs/s72-c/RSA-2012-europe.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2012/04/identity-management-rsa-2012-europe.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUBRH86fyp7ImA9WhVWFEs.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-8703846292802491469</id><published>2012-04-26T19:10:00.000+02:00</published><updated>2012-04-26T19:10:55.117+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-26T19:10:55.117+02:00</app:edited><title>Myhabit.com unconfused</title><content type="html">Here the unconfusing part with was censored in one &lt;a href="http://connectid.blogspot.ca/2012/04/taxonomy-of-confusion.html"&gt;other&lt;/a&gt; post about the same UI.
&lt;br /&gt;
&lt;div class="separator" style="clear: both; color: black; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-KByTFcWVdlw/T5mADrKaYFI/AAAAAAAACG0/BUmaLqnQ_sI/s1600/myhabit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href="http://4.bp.blogspot.com/-KByTFcWVdlw/T5mADrKaYFI/AAAAAAAACG0/BUmaLqnQ_sI/s1600/myhabit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-KByTFcWVdlw/T5mADrKaYFI/AAAAAAAACG0/BUmaLqnQ_sI/s1600/myhabit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href="http://4.bp.blogspot.com/-KByTFcWVdlw/T5mADrKaYFI/AAAAAAAACG0/BUmaLqnQ_sI/s1600/myhabit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;a href="http://4.bp.blogspot.com/-KByTFcWVdlw/T5mADrKaYFI/AAAAAAAACG0/BUmaLqnQ_sI/s1600/myhabit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-KByTFcWVdlw/T5mADrKaYFI/AAAAAAAACG0/BUmaLqnQ_sI/s1600/myhabit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-KByTFcWVdlw/T5mADrKaYFI/AAAAAAAACG0/BUmaLqnQ_sI/s320/myhabit.png" width="244" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href="http://4.bp.blogspot.com/-KByTFcWVdlw/T5mADrKaYFI/AAAAAAAACG0/BUmaLqnQ_sI/s1600/myhabit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;
&lt;/a&gt;
Note the Amazon favicon and URL.&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/mNOPaPOf-S4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/8703846292802491469/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=8703846292802491469" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/8703846292802491469?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/8703846292802491469?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/mNOPaPOf-S4/myhabitcom-unconfused.html" title="Myhabit.com unconfused" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-KByTFcWVdlw/T5mADrKaYFI/AAAAAAAACG0/BUmaLqnQ_sI/s72-c/myhabit.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2012/04/myhabitcom-unconfused.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8NSHw8fCp7ImA9WhRUEk8.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-7552545257765306536</id><published>2012-01-22T11:24:00.003+01:00</published><updated>2012-01-22T11:24:59.274+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-22T11:24:59.274+01:00</app:edited><title>OpenID Connect Test Servers</title><content type="html">&lt;br /&gt;Here are some experimental &lt;a href="http://openid.net/connect/"&gt;OpenID Connect&lt;/a&gt; server configurations:&lt;br /&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;b&gt;https://connect-op.heroku.com/.well-known/openid-configuration&lt;/b&gt;&lt;/pre&gt;
&lt;pre&gt; &lt;/pre&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;pre&gt;&lt;span class="sBrace structure-1" id="s-1"&gt;{&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-2"&gt;"version"&lt;/span&gt;&lt;span class="sColon" id="s-3"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-4"&gt;"3.0"&lt;/span&gt;&lt;span class="sComma" id="s-5"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-6"&gt;"issuer"&lt;/span&gt;&lt;span class="sColon" id="s-7"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-8"&gt;"&lt;a class="vglnk" href="https://connect-op.heroku.com/" rel="nofollow" title="Link added by VigLink"&gt;https://connect-op.heroku.com&lt;/a&gt;"&lt;/span&gt;&lt;span class="sComma" id="s-9"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-10"&gt;"authorization_endpoint"&lt;/span&gt;&lt;span class="sColon" id="s-11"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-12"&gt;"&lt;a class="vglnk" href="https://connect-op.heroku.com/authorizations/new" rel="nofollow" title="Link added by VigLink"&gt;https://connect-op.heroku.com/authorizations/new&lt;/a&gt;"&lt;/span&gt;&lt;span class="sComma" id="s-13"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-14"&gt;"token_endpoint"&lt;/span&gt;&lt;span class="sColon" id="s-15"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-16"&gt;"&lt;a class="vglnk" href="https://connect-op.heroku.com/access_tokens" rel="nofollow" title="Link added by VigLink"&gt;https://connect-op.heroku.com/access_tokens&lt;/a&gt;"&lt;/span&gt;&lt;span class="sComma" id="s-17"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-18"&gt;"userinfo_endpoint"&lt;/span&gt;&lt;span class="sColon" id="s-19"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-20"&gt;"&lt;a class="vglnk" href="https://connect-op.heroku.com/user_info" rel="nofollow" title="Link added by VigLink"&gt;https://connect-op.heroku.com/user_info&lt;/a&gt;"&lt;/span&gt;&lt;span class="sComma" id="s-21"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-22"&gt;"check_id_endpoint"&lt;/span&gt;&lt;span class="sColon" id="s-23"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-24"&gt;"&lt;a class="vglnk" href="https://connect-op.heroku.com/id_token" rel="nofollow" title="Link added by VigLink"&gt;https://connect-op.heroku.com/id_token&lt;/a&gt;"&lt;/span&gt;&lt;span class="sComma" id="s-25"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-26"&gt;"registration_endpoint"&lt;/span&gt;&lt;span class="sColon" id="s-27"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-28"&gt;"&lt;a class="vglnk" href="https://connect-op.heroku.com/connect/client" rel="nofollow" title="Link added by VigLink"&gt;https://connect-op.heroku.com/connect/client&lt;/a&gt;"&lt;/span&gt;&lt;span class="sComma" id="s-29"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-30"&gt;"scopes_supported"&lt;/span&gt;&lt;span class="sColon" id="s-31"&gt;:&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-32"&gt;[&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-33"&gt;"openid"&lt;/span&gt;&lt;span class="sComma" id="s-34"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-35"&gt;"profile"&lt;/span&gt;&lt;span class="sComma" id="s-36"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-37"&gt;"email"&lt;/span&gt;&lt;span class="sComma" id="s-38"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-39"&gt;"address"&lt;/span&gt;&lt;span class="sComma" id="s-40"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-41"&gt;"PPID"&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-42"&gt;]&lt;/span&gt;&lt;span class="sComma" id="s-43"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-44"&gt;"response_types_supported"&lt;/span&gt;&lt;span class="sColon" id="s-45"&gt;:&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-46"&gt;[&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-47"&gt;"code"&lt;/span&gt;&lt;span class="sComma" id="s-48"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-49"&gt;"token"&lt;/span&gt;&lt;span class="sComma" id="s-50"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-51"&gt;"id_token"&lt;/span&gt;&lt;span class="sComma" id="s-52"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-53"&gt;"code&amp;nbsp;token"&lt;/span&gt;&lt;span class="sComma" id="s-54"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-55"&gt;"code&amp;nbsp;id_token"&lt;/span&gt;&lt;span class="sComma" id="s-56"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-57"&gt;"id_token&amp;nbsp;token"&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-58"&gt;]&lt;/span&gt;&lt;span class="sComma" id="s-59"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-60"&gt;"user_id_types_supported"&lt;/span&gt;&lt;span class="sColon" id="s-61"&gt;:&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-62"&gt;[&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-63"&gt;"public"&lt;/span&gt;&lt;span class="sComma" id="s-64"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-65"&gt;"pairwise"&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-66"&gt;]&lt;/span&gt;&lt;span class="sComma" id="s-67"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-68"&gt;"x509_url"&lt;/span&gt;&lt;span class="sColon" id="s-69"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-70"&gt;"&lt;a class="vglnk" href="https://connect-op.heroku.com/cert.pem" rel="nofollow" title="Link added by VigLink"&gt;https://connect-op.heroku.com/cert.pem&lt;/a&gt;"&lt;/span&gt;
&lt;span class="sBrace structure-1" id="s-71"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;b&gt;&lt;span class="sBrace structure-1" id="s-71"&gt;https://openidconnect.info/.well-known/openid-configuration&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="sBrace structure-1" id="s-71"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;pre&gt;&lt;span class="sBrace structure-1" id="s-1"&gt;{&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-2"&gt;"version"&lt;/span&gt;&lt;span class="sColon" id="s-3"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-4"&gt;"3.0"&lt;/span&gt;&lt;span class="sComma" id="s-5"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-6"&gt;"issuer"&lt;/span&gt;&lt;span class="sColon" id="s-7"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-8"&gt;"&lt;a class="vglnk" href="https://openidconnect.info/" rel="nofollow" title="Link added by VigLink"&gt;https://openidconnect.info/&lt;/a&gt;"&lt;/span&gt;&lt;span class="sComma" id="s-9"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-10"&gt;"authorization_endpoint"&lt;/span&gt;&lt;span class="sColon" id="s-11"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-12"&gt;"&lt;a class="vglnk" href="https://openidconnect.info/connect/authorize" rel="nofollow" title="Link added by VigLink"&gt;https://openidconnect.info/connect/authorize&lt;/a&gt;"&lt;/span&gt;&lt;span class="sComma" id="s-13"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-14"&gt;"token_endpoint"&lt;/span&gt;&lt;span class="sColon" id="s-15"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-16"&gt;"&lt;a class="vglnk" href="https://openidconnect.info/connect/token" rel="nofollow" title="Link added by VigLink"&gt;https://openidconnect.info/connect/token&lt;/a&gt;"&lt;/span&gt;&lt;span class="sComma" id="s-17"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-18"&gt;"user_info_endpoint"&lt;/span&gt;&lt;span class="sColon" id="s-19"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-20"&gt;"&lt;a class="vglnk" href="https://openidconnect.info/connect/userinfo" rel="nofollow" title="Link added by VigLink"&gt;https://openidconnect.info/connect/userinfo&lt;/a&gt;"&lt;/span&gt;&lt;span class="sComma" id="s-21"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-22"&gt;"check_id_endpoint"&lt;/span&gt;&lt;span class="sColon" id="s-23"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-24"&gt;"&lt;a class="vglnk" href="https://openidconnect.info/connect/check_session" rel="nofollow" title="Link added by VigLink"&gt;https://openidconnect.info/connect/check_session&lt;/a&gt;"&lt;/span&gt;&lt;span class="sComma" id="s-25"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-26"&gt;"registration_endpoint"&lt;/span&gt;&lt;span class="sColon" id="s-27"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-28"&gt;"&lt;a class="vglnk" href="https://openidconnect.info/connect/register" rel="nofollow" title="Link added by VigLink"&gt;https://openidconnect.info/connect/register&lt;/a&gt;"&lt;/span&gt;&lt;span class="sComma" id="s-29"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-30"&gt;"scopes_supported"&lt;/span&gt;&lt;span class="sColon" id="s-31"&gt;:&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-32"&gt;[&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-33"&gt;"openid"&lt;/span&gt;&lt;span class="sComma" id="s-34"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-35"&gt;"profile"&lt;/span&gt;&lt;span class="sComma" id="s-36"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-37"&gt;"email"&lt;/span&gt;&lt;span class="sComma" id="s-38"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-39"&gt;"address"&lt;/span&gt;&lt;span class="sComma" id="s-40"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-41"&gt;"PPID"&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-42"&gt;]&lt;/span&gt;&lt;span class="sComma" id="s-43"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-44"&gt;"flows_supported"&lt;/span&gt;&lt;span class="sColon" id="s-45"&gt;:&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-46"&gt;[&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-47"&gt;"code"&lt;/span&gt;&lt;span class="sComma" id="s-48"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-49"&gt;"token"&lt;/span&gt;&lt;span class="sComma" id="s-50"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-51"&gt;"code&amp;nbsp;id_token"&lt;/span&gt;&lt;span class="sComma" id="s-52"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-53"&gt;"token&amp;nbsp;id_token"&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-54"&gt;]&lt;/span&gt;&lt;span class="sComma" id="s-55"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-56"&gt;"identifiers_supported"&lt;/span&gt;&lt;span class="sColon" id="s-57"&gt;:&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-58"&gt;[&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-59"&gt;"public"&lt;/span&gt;&lt;span class="sComma" id="s-60"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-61"&gt;"ppid"&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-62"&gt;]&lt;/span&gt;
&lt;span class="sBrace structure-1" id="s-63"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;span class="sBrace structure-1" id="s-71"&gt;&lt;b&gt;https://connect.openid4.us/.well-known/openid-configuration&lt;/b&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="sBrace structure-1" id="s-71"&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;pre&gt;&lt;span class="sBrace structure-1" id="s-1"&gt;{&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-2"&gt;"version"&lt;/span&gt;&lt;span class="sColon" id="s-3"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-4"&gt;"3.0"&lt;/span&gt;&lt;span class="sComma" id="s-5"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-6"&gt;"issuer"&lt;/span&gt;&lt;span class="sColon" id="s-7"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-8"&gt;"https:\/\/connect.openid4.us"&lt;/span&gt;&lt;span class="sComma" id="s-9"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-10"&gt;"authorization_endpoint"&lt;/span&gt;&lt;span class="sColon" id="s-11"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-12"&gt;"https:\/\/connect.openid4.us\/abop\/op.php\/auth"&lt;/span&gt;&lt;span class="sComma" id="s-13"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-14"&gt;"token_endpoint"&lt;/span&gt;&lt;span class="sColon" id="s-15"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-16"&gt;"https:\/\/connect.openid4.us\/abop\/op.php\/token"&lt;/span&gt;&lt;span class="sComma" id="s-17"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-18"&gt;"userinfo_endpoint"&lt;/span&gt;&lt;span class="sColon" id="s-19"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-20"&gt;"https:\/\/connect.openid4.us\/abop\/op.php\/userinfo"&lt;/span&gt;&lt;span class="sComma" id="s-21"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-22"&gt;"check_id_endpoint"&lt;/span&gt;&lt;span class="sColon" id="s-23"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-24"&gt;"https:\/\/connect.openid4.us\/abop\/op.php\/check_id"&lt;/span&gt;&lt;span class="sComma" id="s-25"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-26"&gt;"refresh_session_endpoint"&lt;/span&gt;&lt;span class="sColon" id="s-27"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-28"&gt;"https:\/\/connect.openid4.us\/abop\/op.php\/refreshsession"&lt;/span&gt;&lt;span class="sComma" id="s-29"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-30"&gt;"end_session_endpoint"&lt;/span&gt;&lt;span class="sColon" id="s-31"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-32"&gt;"https:\/\/connect.openid4.us\/abop\/op.php\/endsession"&lt;/span&gt;&lt;span class="sComma" id="s-33"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-34"&gt;"jwk_url"&lt;/span&gt;&lt;span class="sColon" id="s-35"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-36"&gt;"https:\/\/connect.openid4.us\/connect4us.jwk"&lt;/span&gt;&lt;span class="sComma" id="s-37"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-38"&gt;"jwk_encryption_url"&lt;/span&gt;&lt;span class="sColon" id="s-39"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-40"&gt;"https:\/\/connect.openid4.us\/connect4us.jwk"&lt;/span&gt;&lt;span class="sComma" id="s-41"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-42"&gt;"x509_url"&lt;/span&gt;&lt;span class="sColon" id="s-43"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-44"&gt;"https:\/\/connect.openid4.us\/connect4us.pem"&lt;/span&gt;&lt;span class="sComma" id="s-45"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-46"&gt;"x509_encryption_url"&lt;/span&gt;&lt;span class="sColon" id="s-47"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-48"&gt;"https:\/\/connect.openid4.us\/connect4us.pem"&lt;/span&gt;&lt;span class="sComma" id="s-49"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-50"&gt;"registration_endpoint"&lt;/span&gt;&lt;span class="sColon" id="s-51"&gt;:&lt;/span&gt;&lt;span class="sObjectV" id="s-52"&gt;"https:\/\/connect.openid4.us\/abop\/op.php\/registration"&lt;/span&gt;&lt;span class="sComma" id="s-53"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-54"&gt;"scopes_supported"&lt;/span&gt;&lt;span class="sColon" id="s-55"&gt;:&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-56"&gt;[&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-57"&gt;"openid"&lt;/span&gt;&lt;span class="sComma" id="s-58"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-59"&gt;"profile"&lt;/span&gt;&lt;span class="sComma" id="s-60"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-61"&gt;"email"&lt;/span&gt;&lt;span class="sComma" id="s-62"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-63"&gt;"address"&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-64"&gt;]&lt;/span&gt;&lt;span class="sComma" id="s-65"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-66"&gt;"response_types_supported"&lt;/span&gt;&lt;span class="sColon" id="s-67"&gt;:&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-68"&gt;[&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-69"&gt;"code"&lt;/span&gt;&lt;span class="sComma" id="s-70"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-71"&gt;"token"&lt;/span&gt;&lt;span class="sComma" id="s-72"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-73"&gt;"id_token"&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-74"&gt;]&lt;/span&gt;&lt;span class="sComma" id="s-75"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-76"&gt;"acrs_supported"&lt;/span&gt;&lt;span class="sColon" id="s-77"&gt;:&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-78"&gt;[&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-79"&gt;"http:\/\/www.idmanagement.gov\/schema\/2009\/05\/icam\/openid-trust-level1.pdf"&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-80"&gt;]&lt;/span&gt;&lt;span class="sComma" id="s-81"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-82"&gt;"user_id_types_supported"&lt;/span&gt;&lt;span class="sColon" id="s-83"&gt;:&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-84"&gt;[&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-85"&gt;"public"&lt;/span&gt;&lt;span class="sComma" id="s-86"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-87"&gt;"pairwise"&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-88"&gt;]&lt;/span&gt;&lt;span class="sComma" id="s-89"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-90"&gt;"userinfo_algs_supported"&lt;/span&gt;&lt;span class="sColon" id="s-91"&gt;:&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-92"&gt;[&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-93"&gt;"HS256"&lt;/span&gt;&lt;span class="sComma" id="s-94"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-95"&gt;"RS256"&lt;/span&gt;&lt;span class="sComma" id="s-96"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-97"&gt;"A128CBC"&lt;/span&gt;&lt;span class="sComma" id="s-98"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-99"&gt;"A256CBC"&lt;/span&gt;&lt;span class="sComma" id="s-100"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-101"&gt;"A128KW"&lt;/span&gt;&lt;span class="sComma" id="s-102"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-103"&gt;"RSA1_5"&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-104"&gt;]&lt;/span&gt;&lt;span class="sComma" id="s-105"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-106"&gt;"id_token_algs_supported"&lt;/span&gt;&lt;span class="sColon" id="s-107"&gt;:&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-108"&gt;[&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-109"&gt;"HS256"&lt;/span&gt;&lt;span class="sComma" id="s-110"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-111"&gt;"RS256"&lt;/span&gt;&lt;span class="sComma" id="s-112"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-113"&gt;"A128CBC"&lt;/span&gt;&lt;span class="sComma" id="s-114"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-115"&gt;"A256CBC"&lt;/span&gt;&lt;span class="sComma" id="s-116"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-117"&gt;"A128KW"&lt;/span&gt;&lt;span class="sComma" id="s-118"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-119"&gt;"RSA1_5"&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-120"&gt;]&lt;/span&gt;&lt;span class="sComma" id="s-121"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-122"&gt;"request_object_algs_supported"&lt;/span&gt;&lt;span class="sColon" id="s-123"&gt;:&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-124"&gt;[&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-125"&gt;"HS256"&lt;/span&gt;&lt;span class="sComma" id="s-126"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-127"&gt;"RS256"&lt;/span&gt;&lt;span class="sComma" id="s-128"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-129"&gt;"A128CBC"&lt;/span&gt;&lt;span class="sComma" id="s-130"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-131"&gt;"A256CBC"&lt;/span&gt;&lt;span class="sComma" id="s-132"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-133"&gt;"A128KW"&lt;/span&gt;&lt;span class="sComma" id="s-134"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-135"&gt;"RSA1_5"&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-136"&gt;]&lt;/span&gt;&lt;span class="sComma" id="s-137"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-138"&gt;"token_endpoint_auth_types_supported"&lt;/span&gt;&lt;span class="sColon" id="s-139"&gt;:&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-140"&gt;[&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-141"&gt;"client_secret_post"&lt;/span&gt;&lt;span class="sComma" id="s-142"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-143"&gt;"client_secret_basic"&lt;/span&gt;&lt;span class="sComma" id="s-144"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-145"&gt;"client_secret_jwt"&lt;/span&gt;&lt;span class="sComma" id="s-146"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-147"&gt;"private_key_jwt"&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-148"&gt;]&lt;/span&gt;&lt;span class="sComma" id="s-149"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sObjectK" id="s-150"&gt;"token_endpoint_auth_algs_supported"&lt;/span&gt;&lt;span class="sColon" id="s-151"&gt;:&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-152"&gt;[&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-153"&gt;"HS256"&lt;/span&gt;&lt;span class="sComma" id="s-154"&gt;,&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sArrayV" id="s-155"&gt;"RS256"&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="sBracket structure-2" id="s-156"&gt;]&lt;/span&gt;
&lt;span class="sBrace structure-1" id="s-157"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;b&gt;&lt;span class="sBrace structure-1" id="s-157"&gt;&amp;nbsp;Happy testing!&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="sBrace structure-1" id="s-157"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="sBrace structure-1" id="s-71"&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="sBrace structure-1" id="s-71"&gt;&amp;nbsp;&lt;/span&gt; &lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/7ISE9Z-6Kt8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/7552545257765306536/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=7552545257765306536" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/7552545257765306536?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/7552545257765306536?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/7ISE9Z-6Kt8/openid-connect-test-servers.html" title="OpenID Connect Test Servers" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2012/01/openid-connect-test-servers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcGSXc7cCp7ImA9WhdUEEk.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-8543711162243059104</id><published>2011-09-26T16:23:00.000+02:00</published><updated>2011-09-26T16:23:48.908+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-26T16:23:48.908+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pageaction" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenId" /><category scheme="http://www.blogger.com/atom/ns#" term="fennec" /><category scheme="http://www.blogger.com/atom/ns#" term="toolbar" /><category scheme="http://www.blogger.com/atom/ns#" term="firefox mobile" /><title>Stackoverflow.com OpenID for Firefox Mobile Login</title><content type="html">The version 1.2.1 of &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/openid-for-firefox/versions/"&gt;OpenID for Firefox Mobile&lt;/a&gt; works on more web pages .e.g. &lt;a href="http://stackoverflow.com/"&gt;stackoverflow.com&lt;/a&gt;&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-mR21GvXDyM4/ToCJE0uFBJI/AAAAAAAABYo/0N97ruVcHqQ/s1600/stackoverflow-login-page.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-mR21GvXDyM4/ToCJE0uFBJI/AAAAAAAABYo/0N97ruVcHqQ/s320/stackoverflow-login-page.png" width="192" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Stackoverflow.com login&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
You can either use the toolbar icon to start the OpenID flow
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-JfEY789ASfI/ToCJD8qXTmI/AAAAAAAABYg/k0dDccdJK3o/s1600/openid-toolbar.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-JfEY789ASfI/ToCJD8qXTmI/AAAAAAAABYg/k0dDccdJK3o/s320/openid-toolbar.png" width="192" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;OpenID for Firefox Mobile toolbar icon&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
or you can use the page action to start the OpenID flow.
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-9HQJgOmA6-A/ToCJEpHeK3I/AAAAAAAABYk/_vpOQaTwro0/s1600/pageaction.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-9HQJgOmA6-A/ToCJEpHeK3I/AAAAAAAABYk/_vpOQaTwro0/s320/pageaction.png" width="192" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;OpenID for Firefox Mobile page action&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-R-lswYl_1Bs/ToCJDYcePoI/AAAAAAAABYc/5-AVqDzvmiA/s1600/google-accounts.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-R-lswYl_1Bs/ToCJDYcePoI/AAAAAAAABYc/5-AVqDzvmiA/s320/google-accounts.png" width="192" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Google Accounts Authorization&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-5PuYKQxksDk/ToCJC49RgTI/AAAAAAAABYY/EiOVPK2I96A/s1600/confirm.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-5PuYKQxksDk/ToCJC49RgTI/AAAAAAAABYY/EiOVPK2I96A/s320/confirm.png" width="192" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Stackoverflow.com account creation&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/K0sfjngmkyY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/8543711162243059104/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=8543711162243059104" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/8543711162243059104?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/8543711162243059104?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/K0sfjngmkyY/stackoverflowcom-openid-for-firefox.html" title="Stackoverflow.com OpenID for Firefox Mobile Login" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-mR21GvXDyM4/ToCJE0uFBJI/AAAAAAAABYo/0N97ruVcHqQ/s72-c/stackoverflow-login-page.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2011/09/stackoverflowcom-openid-for-firefox.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIBQX4_eip7ImA9WhdVFE4.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-7725318782528500396</id><published>2011-09-19T13:59:00.000+02:00</published><updated>2011-09-19T13:59:10.042+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-19T13:59:10.042+02:00</app:edited><title>n dimensional Ping Space</title><content type="html">&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-WT4zkcnEVG4/TncuB2oKOlI/AAAAAAAABVg/ZjmF22enAWY/s1600/ping+space.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="276" src="http://1.bp.blogspot.com/-WT4zkcnEVG4/TncuB2oKOlI/AAAAAAAABVg/ZjmF22enAWY/s640/ping+space.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Ping Space&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
In response to &lt;a href="http://connectid.blogspot.com/2011/09/new-line-of-greeting-cards.html"&gt;http://connectid.blogspot.com/2011/09/new-line-of-greeting-cards.html&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/gEvTTKFrJOU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/7725318782528500396/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=7725318782528500396" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/7725318782528500396?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/7725318782528500396?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/gEvTTKFrJOU/n-dimensional-ping-space.html" title="n dimensional Ping Space" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-WT4zkcnEVG4/TncuB2oKOlI/AAAAAAAABVg/ZjmF22enAWY/s72-c/ping+space.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2011/09/n-dimensional-ping-space.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4GR3g6fCp7ImA9WhdWGUQ.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-7826748658257407501</id><published>2011-09-14T12:42:00.000+02:00</published><updated>2011-09-14T12:42:06.614+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-14T12:42:06.614+02:00</app:edited><title>OpenID for Firefox Mobile Android</title><content type="html">OpenID for Firefox is now available for&lt;a href="https://wiki.mozilla.org/Mobile/Platforms/Android"&gt; Firefox Mobile&lt;/a&gt; (Fennec) on Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This screenshot shows the OpenID icon in the toolbar. Tapping the icon inserts the preferred OpenID into the OpenID input field.
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/--hFmwTB_ryQ/TnB3F_2DF9I/AAAAAAAABSU/RWfPz8GkTBA/s1600/toolbar.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/--hFmwTB_ryQ/TnB3F_2DF9I/AAAAAAAABSU/RWfPz8GkTBA/s400/toolbar.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The OpenID icon in the toolbar&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;b&gt;Installation instructions:&lt;/b&gt;&lt;br /&gt;
Browse to Addons@Mozilla and install the version 1.2 or newer: &lt;br /&gt;
&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/openid-for-firefox/versions/"&gt;https://addons.mozilla.org/en-US/firefox/addon/openid-for-firefox/versions/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-XNu1psQLuSQ/TnB3GV7twAI/AAAAAAAABSc/w3fTwByw1io/s400/addons-mozilla.png" style="margin-left: auto; margin-right: auto;" width="400" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;"OpenID for Firefox" at mozilla&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-xDC8AxZ7DRw/TnB3HKYX9vI/AAAAAAAABS0/eWVpg5wqHYE/s400/add2firefox.png" style="margin-left: auto; margin-right: auto;" width="400" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Add to Firefox&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&amp;nbsp;&lt;a href="http://2.bp.blogspot.com/-xDC8AxZ7DRw/TnB3HKYX9vI/AAAAAAAABS0/eWVpg5wqHYE/s1600/add2firefox.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Confirm the installation.
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-QIesuhrXlU8/TnB3GjWHo4I/AAAAAAAABSk/5yHlSip63Ys/s1600/installieren.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-QIesuhrXlU8/TnB3GjWHo4I/AAAAAAAABSk/5yHlSip63Ys/s400/installieren.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Add-on installation dialog&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Restart the browser.
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-pF2FTGkNry0/TnB3GzDd5_I/AAAAAAAABSs/aVSgrGRS5ig/s1600/restart.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-pF2FTGkNry0/TnB3GzDd5_I/AAAAAAAABSs/aVSgrGRS5ig/s400/restart.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Configure Firefox Sync to sync your OpenIDs from your desktop machine to your Android device.
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-aDdIJKA5QJU/TnCBHacebDI/AAAAAAAABS8/9dTdOz_ckRU/s1600/sync.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-aDdIJKA5QJU/TnCBHacebDI/AAAAAAAABS8/9dTdOz_ckRU/s400/sync.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Browse to a site that supports OpenID. e.g.: http://wiki.idcommons.net/Special:OpenIDLogin
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-Q8u8gwRW1Cw/TnCBHunXYeI/AAAAAAAABTE/DY0vl6i1OEw/s1600/idcommens.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-Q8u8gwRW1Cw/TnCBHunXYeI/AAAAAAAABTE/DY0vl6i1OEw/s400/idcommens.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-1AjCu0RRUEg/TnCBH_RFffI/AAAAAAAABTM/TJx9n3K0rVI/s1600/loggedin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-1AjCu0RRUEg/TnCBH_RFffI/AAAAAAAABTM/TJx9n3K0rVI/s400/loggedin.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
The mobile version of OpenID for Firefox does not have all the nice features of the desktop version. You can not (yet) choose between OpenIDs when logging in. 
I needed a few evenings to adjust to the differences in addon development between the desktop and mobile versions of Firefox. But now I am confident that I can implement an account chooser for OpenIds on Firefox Mobile soon.

&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/4KmYtC_o_iM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/7826748658257407501/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=7826748658257407501" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/7826748658257407501?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/7826748658257407501?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/4KmYtC_o_iM/openid-for-firefox-mobile-android.html" title="OpenID for Firefox Mobile Android" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/--hFmwTB_ryQ/TnB3F_2DF9I/AAAAAAAABSU/RWfPz8GkTBA/s72-c/toolbar.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2011/09/openid-for-firefox-mobile-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUASXs4cSp7ImA9WhZSFUo.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-518221619766917314</id><published>2011-03-31T11:36:00.006+02:00</published><updated>2011-03-31T14:24:08.539+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-31T14:24:08.539+02:00</app:edited><title>All those NASCARs</title><content type="html">We did not really make a breakthrough in the last years on the questions of &lt;br /&gt;- Identity Provider Discovery&lt;br /&gt;- security and privacy UI&lt;br /&gt;- Identity in the Browser&lt;br /&gt;- intelligent agents or what ever you call them&lt;br /&gt;- openid UI&lt;br /&gt;- add your favorite here...&lt;br /&gt;&lt;br /&gt;Although we did not have a lack of efforts to solve some of these issues&lt;br /&gt;- cardspace&lt;br /&gt;- openinfocard&lt;br /&gt;- azigo's selector&lt;br /&gt;- Kantara login ULX&lt;br /&gt;- openidsamplestore.com&lt;br /&gt;- Janrain's Engage&lt;br /&gt;- ...&lt;br /&gt;&lt;br /&gt;We really need browser support. So lets start - again - with: Identity in the Browser.&lt;br /&gt;&lt;br /&gt;Requirements: &lt;br /&gt;- user centric&lt;br /&gt;- ask for user consent before leaking information.&lt;br /&gt;- help the users discover the reusable identities they already have.&lt;br /&gt;- don't favor any identity provider.&lt;br /&gt;- not to many user choices. Keep it simple.&lt;br /&gt;- allow the site to detect whether or not identity in the browser is supported or not.&lt;br /&gt;&lt;br /&gt;I created a Firefox addon that tries to achieve just that.&lt;br /&gt;http://ignisvulpis.blogspot.com/2011/03/openid-for-firefox4.html&lt;br /&gt;Or at least go in that direction. I concentrated on openid support but I think it is easy to generalize from there.&lt;br /&gt;&lt;br /&gt;The DOM level API that allows the site to query the preferred identity provider looks like this:&lt;br /&gt;&lt;pre&gt;window.openid.getPreferredOpenidProvider(callback);&lt;/pre&gt;&lt;br /&gt;The site can detect support by testing for the new child of the window object to be present:&lt;br /&gt;&lt;pre&gt;if (window.openid) { don't show the nascar }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Maybe I should not have named this "window.openid" but "window.identity"?!&lt;br /&gt;I guess that is for the W3C to decide. They just added another event to Identity-May:&lt;br /&gt;"&lt;a href="http://www.w3.org/2011/identity-ws/"&gt;W3C Workshop on Identity in the Browser&lt;/a&gt;"&lt;br /&gt;&lt;br /&gt;I really hope that we get W3C support for Identity. It is not important whether this is called window.openid or navigator.openid or whatever. We have a nice example for another W3C API: &lt;a href="http://dev.w3.org/geo/api/spec-source.html"&gt;Geolocation&lt;/a&gt; and I modelled my Identity API suggestion along those lines.&lt;br /&gt;&lt;br /&gt;What next?&lt;br /&gt;I) The UI of my addon is not that polished.&lt;br /&gt;&lt;img src="http://3.bp.blogspot.com/-X9AKHKZhnzI/TY0no58U-GI/AAAAAAAABN4/VIhtT9Zoxng/s1600/openidtest-wantstoknow.png" alt="addon asking for permission to store openid"/&gt;&lt;br /&gt;&lt;br /&gt;a) In this case the file-url is especially ugly and in this case there are not that many alternatives.&lt;br /&gt;In the website case the addon could&lt;br /&gt;- show the site's URL &lt;br /&gt;- show the site's favicon instead of URL&lt;br /&gt;- show the site's icon from the extended validation certificate&lt;br /&gt;- show the site's "other icon" which I don't know how to get in a standardized way&lt;br /&gt;- show the site's name / title from the webpage&lt;br /&gt;- show the site's name from the certificate&lt;br /&gt;&lt;br /&gt;b) Should I show which openid the addon is going to provide to the site?&lt;br /&gt;Actually the user does not really care whether this is an openid or whatever. &lt;br /&gt;Here the addon could&lt;br /&gt;- show the user's openid.claimed_id&lt;br /&gt;- show the user's openid.identity&lt;br /&gt;- show the OpenID Provider's (OP) favicon from the openid.op_endpoint&lt;br /&gt;- show the user's icon/image provided by the OP&lt;br /&gt;- let the user add an icon to that openid&lt;br /&gt;&lt;br /&gt;II) Should the addon use the Firefox notification-box or the newer notification popups?&lt;br /&gt;The notification box might be to easy to fake by a website but then there is no real point in faking it. Or is it?&lt;br /&gt;&lt;br /&gt;III) Learning new OpenIDs notification popup&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-FpMpSsPPg1A/TZRZsdtSaVI/AAAAAAAABOY/wmir-u43vD0/s1600/savethis.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 109px;" src="http://2.bp.blogspot.com/-FpMpSsPPg1A/TZRZsdtSaVI/AAAAAAAABOY/wmir-u43vD0/s400/savethis.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5590191657897322834" /&gt;&lt;/a&gt;&lt;br /&gt;Here the addon could&lt;br /&gt;- show the user's openid.claimed_id (as seen in the picture above)&lt;br /&gt;- show the user's openid.identity&lt;br /&gt;- show the OpenID Provider's (OP) favicon from the openid.op_endpoint&lt;br /&gt;- show the user's icon/image provided by the OP&lt;br /&gt;- let the user add an icon to that openid&lt;br /&gt;&lt;br /&gt;IV) Does the user already have reusable Identities?&lt;br /&gt;- The addon could just open a tab that shows the OpenID Foundation's "&lt;a href="https://openid.net/get-an-openid/"&gt;get an openid&lt;/a&gt;" page.&lt;br /&gt;- I implemented a feature where the browser helps the users find their reusable identities. The browser knows a lot about the sites the user visited and might have stored the user's credentials for some sites. My implementation iterates through all domains with stored credentials and requests the Yadis XRD. If the XRD contains openid information then the domain is shown as an potential "openid you might already have".&lt;br /&gt;This feature is not in the version I have uploaded to &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/openid-for-firefox/"&gt;Mozilla&lt;/a&gt;.&lt;br /&gt;- The addon could use Mozilla's Firefox Sync openid provider. Which would violate the rule not to prefer some identity providers...&lt;br /&gt;&lt;br /&gt;V) Mobile support&lt;br /&gt;&lt;a href="https://www.mozilla.com/en-US/mobile/"&gt;Firefox mobile&lt;/a&gt; is out. The addon currently does not support Firefox mobile. Which brings me to the next point.&lt;br /&gt;&lt;br /&gt;VI) The addon could add identities (openids) to form input fields from a context menu. Right click the page or input element and a choice is presented to the user to input the openid into that input field. But on the other hand this should be done better by the site's javascript code after it has detected support through the DOM API.&lt;br /&gt;&lt;br /&gt;VII) Support identities issued by mobile operators. &lt;br /&gt;Should be easy... Support mobile wallets.&lt;br /&gt;&lt;br /&gt;VII) The openid icon in the url-bar might be too much for other providers. I don't care for now.&lt;br /&gt;&lt;br /&gt;Please support Identity in the Browser!&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/2HKisS2km7Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/518221619766917314/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=518221619766917314" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/518221619766917314?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/518221619766917314?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/2HKisS2km7Q/all-those-nascars.html" title="All those NASCARs" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-X9AKHKZhnzI/TY0no58U-GI/AAAAAAAABN4/VIhtT9Zoxng/s72-c/openidtest-wantstoknow.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2011/03/all-those-nascars.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8FRHc5fCp7ImA9WhZSEU8.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-7647676793743939523</id><published>2011-03-26T00:37:00.008+01:00</published><updated>2011-03-26T08:16:55.924+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-26T08:16:55.924+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="firefox" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenId" /><category scheme="http://www.blogger.com/atom/ns#" term="firefox4" /><category scheme="http://www.blogger.com/atom/ns#" term="addon" /><title>OpenID for Firefox4</title><content type="html">I created an &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/openid-for-firefox/"&gt;addon&lt;/a&gt; for &lt;a href="https://www.mozilla.com/"&gt;Firefox4&lt;/a&gt; that learns your &lt;a href="https://openid.net/"&gt;OpenIDs&lt;/a&gt; when you use them.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The addon then asks you whether it may store the discovered openid (claimed_id) shown here at the &lt;a href="http://wiki.idcommons.net/Special:OpenIDLogin"&gt;identity commons&lt;/a&gt; site:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-7fyDGXd8CpQ/TY0noEQMk7I/AAAAAAAABNY/iy2rRKcfAxc/s1600/idcommons-save-openid.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 317px;" src="http://4.bp.blogspot.com/-7fyDGXd8CpQ/TY0noEQMk7I/AAAAAAAABNY/iy2rRKcfAxc/s400/idcommons-save-openid.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5588166281926579122" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="clear:both"&gt;Another thing the addon does is that it allows the site to query the DOM for your preferred openid:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-gcCccFuImSI/TY0nou26D0I/AAAAAAAABNw/8A23tsSfw0M/s1600/openidtest-start.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 95px;" src="http://4.bp.blogspot.com/-gcCccFuImSI/TY0nou26D0I/AAAAAAAABNw/8A23tsSfw0M/s400/openidtest-start.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5588166293363232578" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="clear:both"&gt;This is the source code of the last page:&lt;br /&gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;JavaScript-Test&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;script&amp;nbsp;type="application/javascript"&amp;gt;&lt;br /&gt;&amp;nbsp;function&amp;nbsp;start() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;window.openid.getPreferredOpenidProvider(function(preferredOpenidProvider)&amp;nbsp;{&lt;br /&gt; &amp;nbsp;&amp;nbsp;var&amp;nbsp;p&amp;nbsp;=&amp;nbsp;document.getElementById("id");&lt;br /&gt; &amp;nbsp;&amp;nbsp;p.textContent&amp;nbsp;=&amp;nbsp;preferredOpenidProvider;&lt;br /&gt; });&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;catch(e) {alert("exception="+e);}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;form&amp;gt;&amp;lt;input&amp;nbsp;type=button&amp;nbsp;value="Start"&amp;nbsp;onClick="start()"&amp;gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;p&amp;nbsp;id="id"&amp;gt;openid&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="clear:both"&gt;The addon then asks the user for her consent to provide the openid to the site:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-X9AKHKZhnzI/TY0no58U-GI/AAAAAAAABN4/VIhtT9Zoxng/s1600/openidtest-wantstoknow.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 95px;" src="http://3.bp.blogspot.com/-X9AKHKZhnzI/TY0no58U-GI/AAAAAAAABN4/VIhtT9Zoxng/s400/openidtest-wantstoknow.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5588166296338757730" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p style="clear:both"&gt;Clicking the openid urlbar icon inserts the openid to an appropriate input field on the page. If the addon did not learn an OpenID in the past it opens the OpenID Foundation's "Get An OpenID" page"&lt;/p&gt;&lt;p&gt;Google's &lt;a href="http://www.openidsamplestore.com/index.php?route=account/login#signup"&gt;openidsamplestore&lt;/a&gt; does NOT put an id or name on the input fields making it impossible for the addon to determine the correct input field. Shame on you Google! You can drag the OpenID urlbar icon to the correct field to insert your OpenID into the field.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-lO2dGN0oKNo/TY0nodINt9I/AAAAAAAABNo/VG4bJCNQGz8/s1600/openidsamplestore-signup.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 295px;" src="http://2.bp.blogspot.com/-lO2dGN0oKNo/TY0nodINt9I/AAAAAAAABNo/VG4bJCNQGz8/s400/openidsamplestore-signup.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5588166288603985874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p style="clear:both"&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-IRleJG07AUU/TY0noec2e6I/AAAAAAAABNg/uDgzBjTm1e4/s1600/openidsamplestore-registration-create-account.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 322px; height: 400px;" src="http://3.bp.blogspot.com/-IRleJG07AUU/TY0noec2e6I/AAAAAAAABNg/uDgzBjTm1e4/s400/openidsamplestore-registration-create-account.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5588166288958978978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p style="clear:both"&gt;The addon works on &lt;a href="http://stackoverflow.com/users/login"&gt;Stackoverflow&lt;/a&gt; too:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-PMcrM2SGBiI/TY0tENqIUYI/AAAAAAAABOA/BN9084olFBA/s1600/stackoverflow.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 344px;" src="http://4.bp.blogspot.com/-PMcrM2SGBiI/TY0tENqIUYI/AAAAAAAABOA/BN9084olFBA/s400/stackoverflow.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5588172263045747074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p style="clear:both"&gt;Get &lt;a href="https://www.mozilla.com/"&gt;Firefox4&lt;/a&gt; now and please try out this new &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/openid-for-firefox/"&gt;addon&lt;/a&gt;!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/RAbG6KURdrs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/7647676793743939523/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=7647676793743939523" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/7647676793743939523?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/7647676793743939523?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/RAbG6KURdrs/openid-for-firefox4.html" title="OpenID for Firefox4" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-7fyDGXd8CpQ/TY0noEQMk7I/AAAAAAAABNY/iy2rRKcfAxc/s72-c/idcommons-save-openid.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2011/03/openid-for-firefox4.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYDQ3gyfip7ImA9Wx9aEUs.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-8648085716974410432</id><published>2011-03-03T15:26:00.005+01:00</published><updated>2011-03-03T15:56:12.696+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-03T15:56:12.696+01:00</app:edited><title>AES + Password Based Encryption for JSON Web Tokens</title><content type="html">I just committed some new code to the &lt;a href="https://code.google.com/p/openinfocard/"&gt;xmldap&lt;/a&gt; code repository. &lt;a href="https://code.google.com/p/openinfocard/source/browse/trunk/src/org/xmldap/json/WebToken.java"&gt;WebToken.java&lt;/a&gt; signs and encrypts JSON Web Tokens and &lt;a href="https://code.google.com/p/openinfocard/source/browse/trunk/testsrc/org/xmldap/json/WebTokenTest.java"&gt;WebTokenTest.java&lt;/a&gt; contains the JUNIT tests. These tests also show how WebToken.java is used.&lt;br /&gt;&lt;br /&gt;Today I added Password Based Encryption (PBE) and AES encryption.&lt;br /&gt;&lt;br /&gt;PBE uses PBEWithMD5AndDES with DESede.&lt;br /&gt;AES is used in CBC mode.&lt;br /&gt;&lt;br /&gt;PBE and RSA encryption yield in a three segment token:&lt;br /&gt; &lt;span style="font-weight:bold;"&gt;jwtHeaderSegment.jwtKeySegment.jwtCryptoSegment&lt;/span&gt;&lt;br /&gt;where &lt;br /&gt;- the header segment describes the algorithm and key used,&lt;br /&gt;- the key segment contains the encrypted key that is actually used to encrypt the payload&lt;br /&gt;- the crypto segment contains the encrypted content.&lt;br /&gt;As always each segment is base64 url encoded.&lt;br /&gt;&lt;br /&gt;AES encryption yields in a two segment token:&lt;br /&gt; &lt;span style="font-weight:bold;"&gt;jwtHeaderSegment.jwtCryptoSegment&lt;/span&gt;&lt;br /&gt;The jwtKeySegment is not needed because AES uses a shared secret to encrypt the payload. It makes no sense to put this secret key into the token.&lt;br /&gt;&lt;br /&gt;PBE and RSA encryption generate the encryption key and therefore this key is encrypted and send as the jwtKeySegment. JSON WebToken encryption with RSA was explained in &lt;a href="http://ignisvulpis.blogspot.com/2011/03/rsa-encrypting-json_02.html"&gt;yesterdays blog post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here are some example tokens (without lengthy explanation):&lt;br /&gt;PBE jwtHeaderSegment: {"alg":"EPBE",&lt;br /&gt; "kid":"iauxBG&lt;9"}&lt;br /&gt;PBE password: password&lt;br /&gt;PBE jwtHeaderSegment base64: eyJhbGciOiJFUEJFIiwNCiAia2lkIjoiaWF1eEJHPDkifQ&lt;br /&gt;PBE jwtKeySegment: {"slt":"PS023Hz4xuI","wrp":"o50kyveiYHrqg6sIPldlU4Fbi4QEnGY99FhpU_G1-zk"}&lt;br /&gt;PBE jwtKeySegment base64: eyJzbHQiOiJQUzAyM0h6NHh1SSIsIndycCI6Im81MGt5dmVpWUhycWc2c0lQbGRsVTRGYmk0UUVuR1k5OUZocFVfRzEtemsifQ&lt;br /&gt;PBE jwtCryptoSegment base64: CZCiieIHmirOHW17xXECoPmvIaT1de8DF5Czw0Uv1ktJ7uDAEaPj7fHM3__vnqtNLD86u2HeR7yV-UnhHn-3wF0tppv1_EJ7&lt;br /&gt;&lt;br /&gt;fixed AES192 keybytes&lt;br /&gt;[126, -34, -48, -34, 61, 72, -63, -36, 14, 53, -27, -7, -35, -57, 59, -89, 51, 84, 115, -119, -1, -125, -115, 108]&lt;br /&gt;AES192 jwtCryptoSegment base64: K2xsdGRCb0tzcVdEMk1NNWdmeFlLYzdkY0V3Ry95cU5PclZZYkE0V25XMFZocW5sMVhjeDFzQWhIN2kvMVZGYms2emdHNFVrQXVSNmJjVzNaWmNBbUxtZ08xcEFybnpwYkdSWldJRlpleTRxMGI2KzVQV1hiV2JIUGh2d1kxeEM&lt;br /&gt;&lt;br /&gt;The payload is the same as in Mike Jones' &lt;a href="http://self-issued.info/docs/draft-jones-json-web-token-01.html"&gt;draft&lt;/a&gt;:&lt;br /&gt;{"iss":"joe",&lt;br /&gt; "exp":1300819380,&lt;br /&gt; "http://example.com/is_root":true}&lt;br /&gt;&lt;br /&gt;Enjoy.&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/2BJTE5lbQxo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/8648085716974410432/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=8648085716974410432" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/8648085716974410432?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/8648085716974410432?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/2BJTE5lbQxo/aes-password-based-encryption-for-json.html" title="AES + Password Based Encryption for JSON Web Tokens" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2011/03/aes-password-based-encryption-for-json.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYHR3o9fyp7ImA9Wx9aEUg.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-621603915447861188</id><published>2011-03-02T14:49:00.001+01:00</published><updated>2011-03-03T14:15:36.467+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-03T14:15:36.467+01:00</app:edited><title>RSA Encrypting JSON</title><content type="html">&lt;style type='text/css'&gt;&lt;!--&lt;br /&gt;        table.all, table.full, table.headers, table.none {&lt;br /&gt;                font-size: small; text-align: center; border-width: 2px;&lt;br /&gt;                vertical-align: top; border-collapse: collapse;&lt;br /&gt;        }&lt;br /&gt;        table.all, table.full { border-style: solid; border-color: black; }&lt;br /&gt;        table.headers, table.none { border-style: none; }&lt;br /&gt;        th {&lt;br /&gt;                font-weight: bold; border-color: black;&lt;br /&gt;                border-width: 2px 2px 3px 2px;&lt;br /&gt;        }&lt;br /&gt;        table.all th, table.full th { border-style: solid; }&lt;br /&gt;        table.headers th { border-style: none none solid none; }&lt;br /&gt;        table.none th { border-style: none; }&lt;br /&gt;        table.all td {&lt;br /&gt;                border-style: solid; border-color: #333;&lt;br /&gt;                border-width: 1px 2px;&lt;br /&gt;        }&lt;br /&gt;        table.full td, table.headers td, table.none td { border-style: none; }&lt;br /&gt;--&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;After I &lt;a href="https://code.google.com/p/openinfocard/source/browse/trunk/src/org/xmldap/json/WebToken.java"&gt;implemented&lt;/a&gt; the current draft to sign JSON: "&lt;a href="http://self-issued.info/docs/draft-jones-json-web-token-01.html"&gt;JSON Web Token (JWT) - Claims and Signing&lt;/a&gt;" I implemented some simple JSON encryption.&lt;br /&gt;&lt;br /&gt;This works by generating a ephemeral symmetric key with a specified keylength (128, 192, 256 bits) that is encrypted using the recipient's public RSA key. The ephemeral symmetric key is used to encrypt the payload using AES in CBC-mode &lt;update&gt;with PKCS7 padding&lt;/update&gt;.&lt;br /&gt;Depending on the key length the algorithms are called RE128, RE192 and RE256.&lt;br /&gt;&lt;br /&gt;The following is an example of a JSON object that can be encoded to produce a JWT Claims Object: &lt;br /&gt;&lt;div style='display: table; width: 0; margin-left: 3em; margin-right: auto'&gt;&lt;pre&gt;{"iss":"joe",&lt;br /&gt; "exp":1300819380,&lt;br /&gt; "http://example.com/is_root":true}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The following example JSON header object declares that the encoded object is a JSON Web Token (JWT) and that the JWT Payload Segment is encrypted using the RE256 algorithm and that the RSA public key has the thumbprint of b9E8JDWjYefFiM0X9V9a098Bd6ZsFyemogCEX016uIw: &lt;br /&gt;&lt;br /&gt;&lt;div style='display: table; width: 0; margin-left: 3em; margin-right: auto'&gt;&lt;pre&gt;{"typ":"JWT",&lt;br /&gt; "alg":"RE256",&lt;br /&gt; "x5t":"b9E8JDWjYefFiM0X9V9a098Bd6ZsFyemogCEX016uIw"}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Base64url encoding the JSON header yields the following &lt;span style="font-weight:bold;"&gt;JWT header segment&lt;/span&gt;:&lt;br /&gt;eyJhbGciOiJSRTI1NiIsDQogIng1dCI6ImI5RThKRFdqWWVmRmlNMFg5VjlhMDk4QmQ2WnNGeWVtb2dDRVgwMTZ1SXcifQ&lt;br /&gt;&lt;br /&gt;The following byte array contains the UTF-8 characters for an example ephemeral key:&lt;br /&gt;[27, 24, 24, 78, 51, -38, -111, -13, -53, -4, -13, -84, 34, -59, 96, 20, -23, 87, -26, -56, -116, -35, 127, -21, -97, -26, -71, 74, -36, -67, -124, -45]&lt;br /&gt;&lt;br /&gt;The RSA key consists of a public part (n, e), and a private exponent d.  The values of the RSA key used in this example, presented as the byte arrays representing big endian integers are:&lt;br /&gt;&lt;table class="full" border="0" cellpadding="2" cellspacing="2"&gt;&lt;col width="0*" align="left"&gt;&lt;col align="left"&gt;&lt;tr&gt;&lt;th width="0*" align="left"&gt;Parameter Name&lt;/th&gt;&lt;th align="left"&gt;Value&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left"&gt;n&lt;/td&gt;&lt;td align="left"&gt;[161, 248, 22, 10, 226, 227, 201, 180, 101, 206, 141, 45, 101, 98, 99, 54, 43, 146, 125, 190, 41, 225, 240, 36, 119, 252, 22, 37, 204, 144, 161, 54, 227, 139, 217, 52, 151, 197, 182, 234, 99, 221, 119, 17, 230, 124, 116, 41, 249, 86, 176, 251, 138, 143, 8, 154, 220, 75, 105, 137, 60, 193, 51, 63, 83, 237, 208, 25, 184, 119, 132, 37, 47, 236, 145, 79, 228, 133, 119, 105, 89, 75, 234, 66, 128, 211, 44, 15, 85, 191, 98, 148, 79, 19, 3, 150, 188, 110, 155, 223, 110, 189, 210, 189, 163, 103, 142, 236, 160, 198, 104, 247, 1, 179, 141, 191, 251, 56, 200, 52, 44, 226, 254, 109, 39, 250, 222, 74, 90, 72, 116, 151, 157, 212, 185, 207, 154, 222, 196, 199, 91, 5, 133, 44, 44, 15, 94, 248, 165, 193, 117, 3, 146, 249, 68, 232, 237, 100, 193, 16, 198, 182, 71, 96, 154, 164, 120, 58, 235, 156, 108, 154, 215, 85, 49, 48, 80, 99, 139, 131, 102, 92, 111, 111, 122, 130, 163, 150, 112, 42, 31, 100, 27, 130, 211, 235, 242, 57, 34, 25, 73, 31, 182, 134, 135, 44, 87, 22, 245, 10, 248, 53, 141, 154, 139, 157, 23, 195, 64, 114, 143, 127, 135, 216, 154, 24, 216, 252, 171, 103, 173, 132, 89, 12, 46, 207, 117, 147, 57, 54, 60, 7, 3, 77, 111, 96, 111, 158, 33, 224, 84, 86, 202, 229, 233, 161]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left"&gt;e&lt;/td&gt;&lt;td align="left"&gt;[1, 0, 1]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left"&gt;d&lt;/td&gt;&lt;td align="left"&gt;[18, 174, 113, 164, 105, 205, 10, 43, 195, 126, 82, 108, 69, 0, 87, 31, 29, 97, 117, 29, 100, 233, 73, 112, 123, 98, 89, 15, 157, 11, 165, 124, 150, 60, 64, 30, 63, 207, 47, 44, 211, 189, 236, 136, 229, 3, 191, 198, 67, 155, 11, 40, 200, 47, 125, 55, 151, 103, 31, 82, 19, 238, 216, 193, 90, 37, 216, 213, 206, 160, 2, 94, 227, 171, 46, 139, 127, 121, 33, 111, 198, 59, 234, 86, 39, 83, 180, 6, 68, 198, 161, 81, 39, 217, 178, 149, 69, 64, 160, 187, 225, 163, 5, 86, 152, 45, 78, 159, 222, 95, 100, 37, 241, 77, 75, 113, 52, 65, 181, 93, 199, 59, 155, 74, 237, 204, 146, 172, 227, 146, 126, 55, 245, 125, 12, 253, 94, 117, 129, 250, 81, 44, 143, 73, 97, 169, 235, 11, 128, 248, 168, 7, 70, 114, 138, 85, 255, 70, 71, 31, 52, 37, 6, 59, 157, 83, 100, 47, 94, 222, 30, 132, 214, 19, 8, 26, 250, 92, 34, 208, 81, 40, 91, 214, 59, 148, 59, 86, 93, 137, 138, 5, 104, 84, 19, 229, 60, 60, 108, 101, 37, 255, 31, 227, 78, 61, 220, 112, 240, 213, 100, 80, 253, 164, 139, 161, 46, 16, 78, 157, 235, 159, 184, 24, 129, 225, 196, 189, 242, 93, 146, 71, 244, 80, 200, 101, 146, 121, 104, 231, 115, 52, 244, 65, 79, 117, 167, 80, 225, 57, 84, 110, 58, 138, 115, 157]&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;The RSA public (n,e) key and the ephemeral symmetric key are then passed to the RSA OAEP encryption function. &lt;br /&gt;The following byte array contains the UTF-8 characters for the encrypted ephemeral key:&lt;br /&gt;[-106, 115, -121, -62, -123, 54, -119, 65, -90, 8, 65, 115, 53, 22, 74, -88, 27, 29, -120, -76, 122, -113, 69, -63, 90, -22, -29, 78, 1, 66, -59, 62]&lt;br /&gt;&lt;br /&gt;Base64url encoding this byte array produces this value for the &lt;b&gt;JWT Key Segment&lt;/b&gt;:&lt;br /&gt;lnOHwoU2iUGmCEFzNRZKqBsdiLR6j0XBWurjTgFCxT7eSfGNpni01a3TzuaeZjVc_f3jEiuvJFYFanizkpyk9BGqCNs5LhX2m1h2Qc_llKt3TgGRi67e9p36vX81G8-QccnNQ321vutKYe2jlEvcg0hhWhejhbtK2XjsKkMaJDzEDuULbJmnAFgchSdbcYgz0JK6onX_1tO2FWed0r-EK0v9v7Y65pwz_nrYf2u8f5-j5aX2RUEYVx0sq2oaJZbbp26QmUGVPdnnEgOVI6vpL5-M6Gl1q9j645Ag94Sx9HpQcg8KEUVLfK3BfbLYGnIf-kFP8fROHuIHAMdiPD4ong&lt;br /&gt;&lt;br /&gt;Using the symmetric key to AES256 encrypt the payload bytes and base64url-encoding the resulting bytes yields the &lt;b&gt;JWT Crypto Segment&lt;/b&gt;:&lt;br /&gt;L2ZFNFVQcCtjdWw1QTVZSGw0bUhGRDZ6NDlkNFFtRWQ1a0VBSGUzNzN3V0txY29MZmRHWkhrRUtYMUJNRWl4dzQ0RHlZcmN6TWg4WWEvN04wdUYrc01UeWlYUXBYdmV6a2JvWWd2aFQzeS9OZkpoZ2doSTN6bmViTnVwZHNZZFI&lt;br /&gt;&lt;br /&gt;Combining these segments in the order Header.Key.Crypt with period characters between the segments yields this complete JWT using the JWT Compact Serialization (with line breaks for display purposes only):&lt;br /&gt;&lt;br /&gt;eyJhbGciOiJSRTI1NiIsDQogIng1dCI6ImI5RThKRFdqWWVmRmlNMFg5VjlhMDk4QmQ2WnNGeWVtb2dDRVgwMTZ1SXcifQ&lt;br /&gt;.&lt;br /&gt;lnOHwoU2iUGmCEFzNRZKqBsdiLR6j0XBWurjTgFCxT7eSfGNpni01a3TzuaeZjVc_f3jEiuvJFYFanizkpyk9BGqCNs5LhX2m1h2Qc_llKt3TgGRi67e9p36vX81G8-QccnNQ321vutKYe2jlEvcg0hhWhejhbtK2XjsKkMaJDzEDuULbJmnAFgchSdbcYgz0JK6onX_1tO2FWed0r-EK0v9v7Y65pwz_nrYf2u8f5-j5aX2RUEYVx0sq2oaJZbbp26QmUGVPdnnEgOVI6vpL5-M6Gl1q9j645Ag94Sx9HpQcg8KEUVLfK3BfbLYGnIf-kFP8fROHuIHAMdiPD4ong&lt;br /&gt;.&lt;br /&gt;L2ZFNFVQcCtjdWw1QTVZSGw0bUhGRDZ6NDlkNFFtRWQ1a0VBSGUzNzN3V0txY29MZmRHWkhrRUtYMUJNRWl4dzQ0RHlZcmN6TWg4WWEvN04wdUYrc01UeWlYUXBYdmV6a2JvWWd2aFQzeS9OZkpoZ2doSTN6bmViTnVwZHNZZFI&lt;br /&gt;&lt;br /&gt;Decoding the JWT from this example requires processing the JWT Header Segment, finding the private key to decrypt the symmetric key and using that symmetric key to decrypt the encrypted payload.&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/KG6t9CE0onA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/621603915447861188/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=621603915447861188" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/621603915447861188?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/621603915447861188?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/KG6t9CE0onA/rsa-encrypting-json_02.html" title="RSA Encrypting JSON" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2011/03/rsa-encrypting-json_02.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQGQ3Y7eSp7ImA9Wx9QFEs.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-3908973626538814239</id><published>2010-12-27T12:13:00.006+01:00</published><updated>2010-12-27T15:32:02.801+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-27T15:32:02.801+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openinfocard drag'n'drop user-centric" /><title>openinfocard drag and drop</title><content type="html">I used the holidays to reintegrate drag and drop into openinfocard.&lt;br /&gt;&lt;br /&gt;After installing the &lt;a href="https://code.google.com/p/openinfocard/downloads/list"&gt;openinfocard Firefox addon&lt;/a&gt; (xmldap-0.9.9.201012271501.xpi) and surfing to a relyingparty e.g. &lt;a href="https://xmldap.org/relyingparty/"&gt;https://xmldap.org/relyingparty/&lt;/a&gt; you can now open the Firefox sidebar (using Ctrl-Alt-Shift I).&lt;br /&gt;The sidebar shows the list of Information Card you have. &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_63KXhUQPgSE/TRh6F0OwJNI/AAAAAAAABMw/iM0NPwQ3EHM/s1600/xmldap_relyingparty_sidebar_open.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 242px;" src="http://2.bp.blogspot.com/_63KXhUQPgSE/TRh6F0OwJNI/AAAAAAAABMw/iM0NPwQ3EHM/s400/xmldap_relyingparty_sidebar_open.png" border="0" alt="XMLDAP Relyingparty" id="BLOGGER_PHOTO_ID_5555324380699960530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can now drag one card to the form that contains the object element. The object element is not visible but the drag and drop handler is registered to the object element and the enclosing form. In the case of the xmldap relyingparty you can drag a card to the image and the drop event will bubble up to the form.&lt;br /&gt;&lt;br /&gt;Dragging an Information Card to the main page&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_63KXhUQPgSE/TRh6R2o52WI/AAAAAAAABM4/P1zAgo6t0Ko/s1600/xmldap_relyingparty_dragging_card.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 242px;" src="http://3.bp.blogspot.com/_63KXhUQPgSE/TRh6R2o52WI/AAAAAAAABM4/P1zAgo6t0Ko/s400/xmldap_relyingparty_dragging_card.png" border="0" alt="Dragging an Information Card to the main page" id="BLOGGER_PHOTO_ID_5555324587504949602" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Selector open with dragged card selected&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_63KXhUQPgSE/TRh6bDmsqbI/AAAAAAAABNA/hJJtQH1aKZc/s1600/selector_open_with_dragged_card_selected.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 330px;" src="http://3.bp.blogspot.com/_63KXhUQPgSE/TRh6bDmsqbI/AAAAAAAABNA/hJJtQH1aKZc/s400/selector_open_with_dragged_card_selected.png" border="0" alt="Selector open with dragged card selected" id="BLOGGER_PHOTO_ID_5555324745604180402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;xmldap relyingparty with claims from dragged card&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_63KXhUQPgSE/TRh6hgkUX4I/AAAAAAAABNI/dYiF_kSg-hQ/s1600/xmldap_relyingparty_with_claims.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 242px;" src="http://1.bp.blogspot.com/_63KXhUQPgSE/TRh6hgkUX4I/AAAAAAAABNI/dYiF_kSg-hQ/s400/xmldap_relyingparty_with_claims.png" border="0" alt="xmldap relyingparty with claims from dragged card" id="BLOGGER_PHOTO_ID_5555324856458043266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Should I auto-submit the card because the dragging expresses the user consent already?&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/3c2UgoCHfUE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/3908973626538814239/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=3908973626538814239" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/3908973626538814239?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/3908973626538814239?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/3c2UgoCHfUE/openinfocard-drag-and-drop.html" title="openinfocard drag and drop" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_63KXhUQPgSE/TRh6F0OwJNI/AAAAAAAABMw/iM0NPwQ3EHM/s72-c/xmldap_relyingparty_sidebar_open.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2010/12/openinfocard-drag-and-drop.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMERn0-cCp7ImA9Wx5aF0k.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-4859222357584672759</id><published>2010-11-05T02:11:00.009+01:00</published><updated>2010-11-14T15:20:07.358+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-14T15:20:07.358+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SAML" /><category scheme="http://www.blogger.com/atom/ns#" term="WS-Trust" /><category scheme="http://www.blogger.com/atom/ns#" term="Salesforce" /><category scheme="http://www.blogger.com/atom/ns#" term="oauth" /><category scheme="http://www.blogger.com/atom/ns#" term="Information Cards" /><title>Information Cards, WS-Trust and SAML and OAuth, oh my!</title><content type="html">While reading Pat Patterson's blog post "&lt;a href="http://blog.sforce.com/sforce/2010/11/ws-trust-and-saml-and-oauth-oh-my.html"&gt;WS-Trust and SAML and OAuth, oh my!&lt;/a&gt;" I noticed that this fits into the Information Card flow.&lt;br /&gt;&lt;br /&gt;Pat describes Ping's &lt;a href="http://www.salesforce.com/"&gt;Salesforce&lt;/a&gt; mobile flow:&lt;ol&gt;&lt;li&gt;Mobile app accepts the username and password, and submits them to PingFederate in a WS-Trust request.&lt;/li&gt;&lt;li&gt;PingFederate validates the user credentials, creates a SAML assertion and submits that to Salesforce.com in an OAuth 2.0 request.&lt;/li&gt;&lt;li&gt;Salesforce.com validates the SAML assertion and responds to PingFederate with an OAuth access token.&lt;/li&gt;&lt;li&gt;PingFederate in turn replies to the Android app with a WS-Trust response containing the access token.&lt;/li&gt;&lt;li&gt;The Android app uses the access token to invoke the Salesforce.com REST API.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_63KXhUQPgSE/TNNbL9tBUMI/AAAAAAAABMU/GP9jFyt0pwo/s1600/Ping-Salesforce-Mobile-Flow.png"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_63KXhUQPgSE/TNNbL9tBUMI/AAAAAAAABMU/GP9jFyt0pwo/s400/Ping-Salesforce-Mobile-Flow.png" com="" img="" gif="" alt="" id="BLOGGER_PHOTO_ID_5535868628068552898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now let's Information-Card-ify this:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The user visits the mobile version of his company's application page at Salesforce. (No extra App just HTML5 and CSS3. Which is probably easier to implement than an App for Android and Blackberry and iPhone! The web app is available anyway.)&lt;/li&gt;&lt;li&gt;The site offers to use Information Cards to authenticate and the user clicks the purple-i icon to do so.&lt;br /&gt;This click requests the browser to follow a link with an &lt;a href="http://wiki.eclipse.org/IPhone_Selector#Relying_Parties"&gt;icard-https&lt;/a&gt; scheme.&lt;br /&gt;The browser/OS notices that this scheme is handled by &lt;a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=380668873&amp;amp;cc=us&amp;amp;mt=8&amp;amp;alreadyRedirected=1"&gt;Azigo's card selector for the iPhone&lt;/a&gt;. We, &lt;a href="http://www.laboratories.telekom.com/ipws/english/Pages/Willkommen.aspx"&gt;Deutsche Telekom Laboratories&lt;/a&gt;, have prototype selectors for iPhone and Android too.&lt;br /&gt;As it happens the card store contains an Information Card issued by the company and this card is the default card for this site. The selector contacts the card issuer (&lt;a href="http://www.pingidentity.com/our-solutions/pingfederate.cfm"&gt;PingFederate&lt;/a&gt;) like in the other flow using WS-Trust.&lt;/li&gt;&lt;li&gt;PingFederate validates the user credentials, creates a SAML assertion and submits that to Salesforce.com in an OAuth 2.0 request.&lt;/li&gt;&lt;li&gt;Salesforce.com validates the SAML assertion and responds to PingFederate with a session token.&lt;/li&gt;&lt;li&gt;PingFederate in turn replies to Azigo's selector with a WS-Trust response containing the session token.&lt;/li&gt;&lt;li&gt;The selector tells the browser to post the session token the Salesforce application and the user is "in session".&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;So, what is different for the user and his company:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No App for each mobile platform!&lt;/li&gt;&lt;li&gt;The user's credentials are entered at the company site (implemented by PingFederate)!&lt;/li&gt;&lt;li&gt;If the card were backed by a self-issued card or by a certificate then we even get rid of username/password!&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Using oauth to obtain a session token may sound unusual but then oauth is token agnostic... Or Salesforce would provide the oauth token and that would then be used by the webapp to authenticate it's calls to Salesforce's REST API... Life's good.&lt;br /&gt;&lt;br /&gt;Thoughts?&lt;br /&gt;&lt;br /&gt;Learn more about Information Cards at the Information Card Foundation!&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://informationcard.net/"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 193px; height: 40px;" src="http://informationcard.net/sites/default/files/icf-logos/icf-logo-193x40.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/tKLM6e1JmvQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/4859222357584672759/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=4859222357584672759" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/4859222357584672759?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/4859222357584672759?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/tKLM6e1JmvQ/information-cards-ws-trust-and-saml-and.html" title="Information Cards, WS-Trust and SAML and OAuth, oh my!" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_63KXhUQPgSE/TNNbL9tBUMI/AAAAAAAABMU/GP9jFyt0pwo/s72-c/Ping-Salesforce-Mobile-Flow.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2010/11/information-cards-ws-trust-and-saml-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QGSX48cCp7ImA9Wx5bGUw.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-5610081544930434459</id><published>2010-11-05T01:54:00.000+01:00</published><updated>2010-11-05T02:08:48.078+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-05T02:08:48.078+01:00</app:edited><title>blogger.com refuses to obey to HTTPS Everywhere</title><content type="html">While starting to write a new blog post here at blogger.com I noticed that the site does not use SSL. As I have &lt;a href="https://www.eff.org/https-everywhere"&gt;HTTPS Everywhere&lt;/a&gt; installed I added *.blogger.com and *.blogspot.com to the list of domains were I want to use SSL the whole time.&lt;br /&gt;But... my browser is always redirected to http://www.blogger.com/. &lt;br /&gt;This is not what I want...&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/Z5qS2Q9pNvM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/5610081544930434459/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=5610081544930434459" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/5610081544930434459?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/5610081544930434459?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/Z5qS2Q9pNvM/bloggercom-refuses-to-obey-to-https.html" title="blogger.com refuses to obey to HTTPS Everywhere" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2010/11/bloggercom-refuses-to-obey-to-https.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYGQn0-cSp7ImA9WxFbEE0.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-3005176423140399447</id><published>2010-07-01T16:28:00.006+02:00</published><updated>2010-07-01T18:02:03.359+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-01T18:02:03.359+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="information card" /><category scheme="http://www.blogger.com/atom/ns#" term="OASIS" /><category scheme="http://www.blogger.com/atom/ns#" term="xmldap" /><category scheme="http://www.blogger.com/atom/ns#" term="xml" /><category scheme="http://www.blogger.com/atom/ns#" term="json" /><title>Information Cards in JSON</title><content type="html">I added some code to &lt;a href="http://code.google.com/p/openinfocard/source/browse/#svn/trunk/src/org/xmldap"&gt;xmldap&lt;/a&gt; to serialize &lt;a href="http://www.oasis-open.org/committees/download.php/37489/identity-1.0-errata-cd-01.xsd"&gt;Information Cards&lt;/a&gt; to JSON.&lt;br /&gt;The rationale is that XML and especially XML Signature are a mess on mobile devices. J2ME is java1.3 and thus from the stoneage. But Android (java 6) is not better because javax.xml.transform is missing. Arghh!&lt;br /&gt;&lt;br /&gt;- I am throwing away namespaces&lt;br /&gt;- No deaply nested XML structures.&lt;br /&gt;- No signature (yet?)!&lt;br /&gt;&lt;br /&gt;I would like to standardize this or something similar. &lt;br /&gt;&lt;br /&gt;This is a &lt;a href="http://informationcard.net/blog/bc-gov-interview"&gt;Britisch Columbia Card&lt;/a&gt; from the &lt;a href="http://informationcard.net/blog/icf-at-rsa-2010"&gt;RSA interop&lt;/a&gt; in JSON:&lt;pre&gt;&lt;br /&gt;{&lt;br /&gt;  "CardId": "urn:GUID:6d6693c1-6b1a-df11-b009-00143851d232",&lt;br /&gt;  "IssuerName": "stsip.systestv2.bceid.ca",&lt;br /&gt;  "MimeType": "image/jpeg",&lt;br /&gt;  "lang": "en-us",&lt;br /&gt;  "TokenServiceList": [&lt;br /&gt;    {&lt;br /&gt;      "UserCredential": {&lt;br /&gt;        "Type": "UserNamePasswordAuthenticate",&lt;br /&gt;        "Username": "SBCEID\\pwiebe10i"&lt;br /&gt;      },&lt;br /&gt;      "Address": "https://stsip.systestv2.bceid.ca/adfs/services/trust/mex"&lt;br /&gt;    },&lt;br /&gt;    {&lt;br /&gt;      "UserCredential": {&lt;br /&gt;        "Type": "UserNamePasswordAuthenticate",&lt;br /&gt;        "Username": "SBCEID\\pwiebe10i"&lt;br /&gt;      },&lt;br /&gt;      "Address": "https://stsip.systestv2.bceid.ca/adfs/services/trust/mex"&lt;br /&gt;    }&lt;br /&gt;  ],&lt;br /&gt;  "SupportedTokenTypeList": ["http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0"],&lt;br /&gt;  "Issuer": "http://stsip.systestv2.bceid.ca/adfs/services/trust",&lt;br /&gt;  "CardVersion": 4,&lt;br /&gt;  "SupportedClaimTypeList": [&lt;br /&gt;    {&lt;br /&gt;      "Description": "Level of Assurance achieved according to the rules of the ICAM IMI 1.0 profile located at http://www.idmanagement.gov/",&lt;br /&gt;      "Uri": "http://idmanagement.gov/icam/2009/09/imi_1.0_profile#assurancelevel1",&lt;br /&gt;      "DisplayTag": "ICAM Assurance Level 1"&lt;br /&gt;    },&lt;br /&gt;    {&lt;br /&gt;      "Uri": "http://www.cio.gov.bc.ca/standards/claims/2009/11/useridentifier",&lt;br /&gt;      "DisplayTag": "User Identifier"&lt;br /&gt;    },&lt;br /&gt;    {&lt;br /&gt;      "Uri": "http://www.ocio.gov.bc.ca/standards/claims/2009/06/userdisplayname",&lt;br /&gt;      "DisplayTag": "User Display Name"&lt;br /&gt;    },&lt;br /&gt;    {&lt;br /&gt;      "Uri": "http://www.ocio.gov.bc.ca/standards/claims/2009/09/identityassurancelevel",&lt;br /&gt;      "DisplayTag": "Identity Assurance Level"&lt;br /&gt;    },&lt;br /&gt;    {&lt;br /&gt;      "Uri": "http://www.ocio.gov.bc.ca/standards/claims/2009/09/authoritativepartyidentifier",&lt;br /&gt;      "DisplayTag": "AP Identifier"&lt;br /&gt;    },&lt;br /&gt;    {&lt;br /&gt;      "Uri": "http://www.ocio.gov.bc.ca/standards/claims/2009/09/authoritativepartyname",&lt;br /&gt;      "DisplayTag": "AP Name"&lt;br /&gt;    },&lt;br /&gt;    {&lt;br /&gt;      "Uri": "http://www.cio.gov.bc.ca/standards/claims/2009/09/identityassurancelevel1",&lt;br /&gt;      "DisplayTag": "Identity Assurance Level 1"&lt;br /&gt;    },&lt;br /&gt;    {&lt;br /&gt;      "Description": "The e-mail address of the user",&lt;br /&gt;      "Uri": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress",&lt;br /&gt;      "DisplayTag": "E-Mail Address"&lt;br /&gt;    },&lt;br /&gt;    {&lt;br /&gt;      "Description": "The given name of the user",&lt;br /&gt;      "Uri": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname",&lt;br /&gt;      "DisplayTag": "Given Name"&lt;br /&gt;    },&lt;br /&gt;    {&lt;br /&gt;      "Description": "The unique name of the user",&lt;br /&gt;      "Uri": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name",&lt;br /&gt;      "DisplayTag": "Name"&lt;br /&gt;    },&lt;br /&gt;    {&lt;br /&gt;      "Description": "The user principal name (UPN) of the user",&lt;br /&gt;      "Uri": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn",&lt;br /&gt;      "DisplayTag": "UPN"&lt;br /&gt;    },&lt;br /&gt;    {&lt;br /&gt;      "Description": "The surname of the user",&lt;br /&gt;      "Uri": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname",&lt;br /&gt;      "DisplayTag": "Surname"&lt;br /&gt;    },&lt;br /&gt;    {&lt;br /&gt;      "Description": "The private identifier of the user",&lt;br /&gt;      "Uri": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier",&lt;br /&gt;      "DisplayTag": "PPID"&lt;br /&gt;    },&lt;br /&gt;    {&lt;br /&gt;      "Description": "The SAML name identifier of the user",&lt;br /&gt;      "Uri": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier",&lt;br /&gt;      "DisplayTag": "Name ID"&lt;br /&gt;    },&lt;br /&gt;    {&lt;br /&gt;      "Description": "Used to display the time and date that the user was authenticated",&lt;br /&gt;      "Uri": "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationinstant",&lt;br /&gt;      "DisplayTag": "Authentication time stamp"&lt;br /&gt;    },&lt;br /&gt;    {&lt;br /&gt;      "Description": "The method used to authenticate the user",&lt;br /&gt;      "Uri": "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod",&lt;br /&gt;      "DisplayTag": "Authentication method"&lt;br /&gt;    }&lt;br /&gt;  ],&lt;br /&gt;  "CardName": "BCeID Information Card",&lt;br /&gt;  "TimeIssued": "2010-04-15T17:52:07.341Z",&lt;br /&gt;  "RequireAppliesTo": false,&lt;br /&gt;  "CardType": "urn:GUID:6d6693c1-6b1a-df11-b009-00143851d232",&lt;br /&gt;  "CardImage": "/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABQAHgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD340ZNBrg/FXxAGi301lbwGR4xhmCbhn9Py9qyrVoUo80jCviKdCPNUZr6l470TSbyO3u7pU3MFLZ+7k8Ej05/LtXS5NfJevXkuu+IYYVLLNczqiBjlRuIA+vNfV0TCOOOKSRTKFAPbJx6V6eNo0aMKc6cr8yv+VgoVXVTfQmzzS00dadXCbhRRRQAUUUUAFFFFABRRRQAUUUUAIa8M+KETWfiK6dJAY5grt3KsVHavUPGt5qNpoyf2asxkklCO0Kksq4PTHI7c15Le6ZqF4GMunXjseu6Fjn615ePqybVJU2+t+x4ebVZyaoxpuWzvY4a9037T5FyksiyqAYmVsFT1GD14Ne0atf3cNtAoupWEYWNsvlnKjBJPUnIJz6159ZeBL3U9UWNoZtPjQeYZ5YyNuCMbR3OSK7PUtGkWKNGv5ZCjeY5cAGRvUgdMnsK4uIs0hiaVCglyOG617K35M+m4YgneVSLW1rnqWmztc6ZaTuctJErMfUkc1brmvB+sRX1gLHyWims0VSC24MPUH+ldLXt4erGrSjOLumZ4ilKlVlCSsFFFFbGIUUUUAFFFFABRRRQAUUUUAIaMGlooAq3lhbX8apdRCRVOQCSMH8Konwvox62EZ/4E3+NTeIbuaw8NareW7BZ7ezlljYjOGVCQcH3Fckb3xJD4Eh8SQ6yJ5ltRdS29xbx+WwxkgFQCOPc0KipatIOdx2OxsNHsNMd3s7WOFnGGK55FXq5mbxlaWfgm38R3cbIs0SssCn5mdhwo/H9OaksbLXtStkutT1J7F5BuFpZon7oHszsCSfXGBTUOVdhOV2dFRXO2tvruneI4YpdQkv9JnifJliUPDIMEZZQMgjNblzdQ2kXmTyBF6c9z7UpNRV2xq7JqKy21RLiYWQFxazTITHIVXI9wDn9RXO+DtR1nVNc1uG/1RpYNNujBHGsMa+YPm5Yhc+nTFKnKNRNxewSTi0mdtRXBrea9cfEW60D+3JIrOO0F0rJbRb+SBtyVIxyea1NUj8T6Rave2F/HqixDc9rcwqjuo67WQAZ+orTk1tcnmOoorJ8N+ILTxNo0WpWmVVsq8bdY3HVTWtUtNOzKTuFFFFIAooooAxPGL+X4K1w4zmxmH5oR/WuQt/Dmr6x8OdNjttZYobSN/sckSiOUAZCFlw2O3Wu18S6dc6v4cv9OtHiSa5iMQaXO0A8Hp7ZrH0nSvFGm+HYNIE+lqYYvKW6BdmA6A7MAEj61rCVo/MiSuzgte8QLrnhPwvqL2q21raamsN1Cg+RCoGMe23P8q9pBBAIOQa5uy8EaVbeEW8OzK09vJlpZG4ZnPO/2PTH0pmlaf4k0G3SxSa01SziG2F53aGZV7AkBg2PXinNxkrLoKKa3OnZgqkngCuXtGutY1GW+SONo4iUh8xvlT3wOpqePTdZ1DWYrzVJbaG0gRxFaWzM5LsNu5mIGcAnAA707TtM1XTlkt4prfyWbIdgSw/CvMxcJOcFq49bdzqoySjJ9S/aaUIrs3lxKZ7kjAYjAUegFct4B/5GHxh/2Ej/AFrshHNBZlIWE0wBKmZiAze5AOB9BXMeFvD2taJrGq3V3JYSw6lcGdxE7hozzwMrz1HpXZQhGFNpaXMZtykmVLT/AJLVf/8AYJX/ANDWu5JAUk8Ada4dvDviaPxvJ4kgfS/ngFu1s0kmCnB+9t65HpWvf2Gv6zbNZz3Fpp1tKNsrWrNLKynqAzBQufXBraVnbUhXVznPhKh+x67PGCLSXUHMPoQPT9K9FqnpemWmjabDYWMQit4Vwqj+Z9SauVE5c0myoqysFFFFSMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Z"&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Minor nit: lang="en-us". Might be better to use "en-ca"?&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/bYsZ33EII1w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/3005176423140399447/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=3005176423140399447" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/3005176423140399447?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/3005176423140399447?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/bYsZ33EII1w/information-cards-in-json.html" title="Information Cards in JSON" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2010/07/information-cards-in-json.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QER3Y6eyp7ImA9WxFVEEo.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-6126159279866594878</id><published>2010-06-09T10:20:00.004+02:00</published><updated>2010-06-09T11:21:46.813+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-09T11:21:46.813+02:00</app:edited><title>URL as ID</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_63KXhUQPgSE/TA9dH0LpWNI/AAAAAAAAA_c/NTI25tVI9oE/s1600/IMG_20100609_111515.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_63KXhUQPgSE/TA9dH0LpWNI/AAAAAAAAA_c/NTI25tVI9oE/s400/IMG_20100609_111515.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5480701660381141202" /&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/0zifXmQOjRo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/6126159279866594878/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=6126159279866594878" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/6126159279866594878?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/6126159279866594878?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/0zifXmQOjRo/url-as-id.html" title="URL as ID" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_63KXhUQPgSE/TA9dH0LpWNI/AAAAAAAAA_c/NTI25tVI9oE/s72-c/IMG_20100609_111515.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2010/06/url-as-id.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4NSX84eyp7ImA9WxFVEEo.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-6582339268512958107</id><published>2010-06-09T09:43:00.003+02:00</published><updated>2010-06-09T10:09:58.133+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-09T10:09:58.133+02:00</app:edited><title>HTML5 vs Flash</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_63KXhUQPgSE/TA9GcdrMz4I/AAAAAAAAA_E/L-Vca1RdsQk/s1600/IMG_20100609_093720.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_63KXhUQPgSE/TA9GcdrMz4I/AAAAAAAAA_E/L-Vca1RdsQk/s400/IMG_20100609_093720.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5480676726349287298" /&gt;&lt;/a&gt;&lt;br /&gt;http://www.youtube.com/html5&lt;br /&gt;http://nightly.mozilla.org/webm/&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/hOLlIShAYlg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/6582339268512958107/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=6582339268512958107" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/6582339268512958107?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/6582339268512958107?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/hOLlIShAYlg/html5-vs-flash.html" title="HTML5 vs Flash" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_63KXhUQPgSE/TA9GcdrMz4I/AAAAAAAAA_E/L-Vca1RdsQk/s72-c/IMG_20100609_093720.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2010/06/html5-vs-flash.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4FRHY9eSp7ImA9WxFXE0w.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-4091943921765807487</id><published>2010-05-20T03:04:00.002+02:00</published><updated>2010-05-20T03:28:35.861+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-20T03:28:35.861+02:00</app:edited><title>Application Secrets vs. Key Pairs</title><content type="html">I was just reading about the new &lt;a href="http://code.google.com/apis/storage/docs/getting-started.html"&gt;Google Storage API&lt;/a&gt; for US developers and I am wondering why we see application secrets so often?&lt;br /&gt;&lt;br /&gt;Google is generating an application-id / "access key" and up to five application secrets for different projects a developer is working on. Fine. The developer has to sign each request to the storage API.&lt;br /&gt;http://code.google.com/apis/storage/docs/getting-started.html#keys&lt;br /&gt;&lt;br /&gt;I assume that Google might even generate code snippets for a given pair of access key and application secret to sign requests to make things really easy for the developer.&lt;br /&gt;&lt;br /&gt;Does nobody fear that Google admins might misuse the developer credentials?&lt;br /&gt;Does nobody fear that Google's database of developer credentials might be breached one day?&lt;br /&gt;&lt;br /&gt;What is so hard in using key pairs for developers? I know that some people faint when you use the three letter word "RSA" or "DSA" or whatever smells like asymmetric crypto. But if I have to sign a request anyway then where is the difference between symmetric and asymmetric? Is performance really still an issue? gmail is now SSL which is good. So here security finally won.&lt;br /&gt;&lt;br /&gt;Generating a keypair is really simple and using it to sign bytes is as simple as using a symmetric key. Yes you have to protect the private key but not more than you have to protect the symmetric key.&lt;br /&gt;&lt;br /&gt;It is harder to autogenerate code snippets because the generator does not know the private key or how to access it. But is this the point?&lt;br /&gt;&lt;br /&gt;With asymmetric crypto there is no database of keys that can be stolen because the private key is not on a central system. And the developer credentials can not abused by Google operators which is good for audits and Google's liability. &lt;br /&gt;&lt;br /&gt;So why are symmetric keys so ubiquitous? They are nothing than passwords and share some of the problems passwords have.&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/Z_RNl29x68M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/4091943921765807487/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=4091943921765807487" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/4091943921765807487?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/4091943921765807487?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/Z_RNl29x68M/application-secrets-vs-key-pairs.html" title="Application Secrets vs. Key Pairs" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2010/05/application-secrets-vs-key-pairs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08FSXk9fip7ImA9WxFXEUQ.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-4588471697820888892</id><published>2010-05-18T15:42:00.006+02:00</published><updated>2010-05-18T16:10:18.766+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-18T16:10:18.766+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="iiw2010a" /><category scheme="http://www.blogger.com/atom/ns#" term="openinfocard" /><category scheme="http://www.blogger.com/atom/ns#" term="Information Card Foundation" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenId" /><category scheme="http://www.blogger.com/atom/ns#" term="iiw" /><category scheme="http://www.blogger.com/atom/ns#" term="openid connect" /><category scheme="http://www.blogger.com/atom/ns#" term="oauth" /><title>oauth 2.0 scope is the new black</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm3.static.flickr.com/2074/1529124811_67fcabab2d_s_d.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 75px; height: 75px;" src="http://farm3.static.flickr.com/2074/1529124811_67fcabab2d_s_d.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://daveman692.livejournal.com/"&gt;David&lt;/a&gt;'s &lt;a href="http://openidconnect.com/"&gt;openid connect&lt;/a&gt; proposal uses &lt;a href="http://www.ietf.org/id/draft-ietf-oauth-v2-05.txt"&gt;oauth2.0&lt;/a&gt; to get an access token to access the user's info API.&lt;br /&gt;Openid connect does not define a new flow for oauth but uses a scope with value "openid" to signify that this kind of access token is requested.&lt;br /&gt;&lt;br /&gt;What I am missing here is that there is no way for the client to specify which of the user's information it wants to access. The users might choose to release only a subset of their information at oauth-approval-time but they have no way to know what the client is requesting. I fear that the authorization server suggests to give away all user data and that the user will grant that access.&lt;br /&gt;&lt;br /&gt;A quote from the openid connect proposal: &lt;span style="font-family:monospace; font-size:small"&gt;&amp;quot;The (user info) server is free to add additional data to this response (such as Portable Contacts) so long as they do not change the reserved OpenID Connect keys.&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is the Facebook notion of privacy to give everything away by default.&lt;br /&gt;I don't like that.&lt;br /&gt;&lt;br /&gt;Even if the client does not want the data it now has access to it.&lt;br /&gt;&lt;br /&gt;I am intentionally not suggesting a different proposal or new values for scope. But what I am thinking about here is probably obvious given the background I am coming &lt;a href="http://informationcard.net/"&gt;from&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/OA4UP2p6FLg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/4588471697820888892/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=4588471697820888892" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/4588471697820888892?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/4588471697820888892?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/OA4UP2p6FLg/oauth-20-scope-is-new-black.html" title="oauth 2.0 scope is the new black" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2010/05/oauth-20-scope-is-new-black.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UGQng4cCp7ImA9WxFSGUk.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-785455219712220979</id><published>2010-04-19T11:36:00.006+02:00</published><updated>2010-04-22T15:00:23.638+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-22T15:00:23.638+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openinfocard" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="xauth" /><category scheme="http://www.blogger.com/atom/ns#" term="mozilla" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Chrome" /><title>XAuth is Evil</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_63KXhUQPgSE/S8wqOMWNASI/AAAAAAAAA-w/dfQ3b-nCyWk/s1600/satan.gif"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 120px; height: 145px;" src="http://4.bp.blogspot.com/_63KXhUQPgSE/S8wqOMWNASI/AAAAAAAAA-w/dfQ3b-nCyWk/s400/satan.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5461786871414456610" /&gt;&lt;/a&gt;&lt;br /&gt;Google and &lt;a href="http://www.meebo.com/"&gt;Meebo&lt;/a&gt; got it so wrong! Meebo with support by Google published a javascript &lt;a href="http://xauth.org/spec/"&gt;xauth.js&lt;/a&gt; that tells a website which social networks the user is a member of. Information is stored on xauth.org and in local storage what my social networks are.&lt;br /&gt;&lt;br /&gt;This is so wrong that it hurts. Sites should publish which social networks they support and the user should then choose which ONE they would like to use at THIS site at THIS time.&lt;br /&gt;The xauth scheme just transports too much data to a central site too often.&lt;br /&gt;&lt;br /&gt;Google should use its money and power to put this ability into the browser! &lt;br /&gt;Start with Chrome and Mozilla (https://mozillalabs.com/conceptseries/identity/social-agent/). Yes, Google already supports Mozilla in this project but xauth is evil. &lt;br /&gt;&lt;br /&gt;XAuth is not even acceptable as an intermediate "solution" before Identity in the browser is ready. Wrong, wrong, wrong.&lt;br /&gt;&lt;br /&gt;I admit that website operators prefer it this way round and the collected data at the central server is definitely interesting and valuable. I think Google with good reason does not store that data on a Google server or do they? Who has access to that data? XAuth is not as bad as Microsoft Passport but not much better.&lt;br /&gt;I fear that the user and privacy advocates are not strong enough to create "Identity in the browser"...&lt;br /&gt;&lt;br /&gt;Don't do evil.&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/5AtQ2cvPO30" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/785455219712220979/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=785455219712220979" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/785455219712220979?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/785455219712220979?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/5AtQ2cvPO30/xauth-is-evil.html" title="XAuth is Evil" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_63KXhUQPgSE/S8wqOMWNASI/AAAAAAAAA-w/dfQ3b-nCyWk/s72-c/satan.gif" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2010/04/xauth-is-evil.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQDQ3k4fCp7ImA9WxFSE0s.&quot;"><id>tag:blogger.com,1999:blog-37220752.post-5450377896112563293</id><published>2010-04-15T23:09:00.004+02:00</published><updated>2010-04-15T23:19:32.734+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-15T23:19:32.734+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OASIS" /><category scheme="http://www.blogger.com/atom/ns#" term="openinfocard" /><category scheme="http://www.blogger.com/atom/ns#" term="ADFS" /><category scheme="http://www.blogger.com/atom/ns#" term="rsac2010US" /><category scheme="http://www.blogger.com/atom/ns#" term="rsac" /><category scheme="http://www.blogger.com/atom/ns#" term="IMI" /><title>SHA256 et al in openinfocard</title><content type="html">I just added support for RSA-SHA256 etc to openinfocard's signature validation. &lt;br /&gt;This came up during the RSA conference' OASIS IMI interop. The cards issued by ADFS2 are signed using RSA-SHA256. The team from the Government of British Columbia suggested to configure ADFS2 to use SHA1 for card signing but this way is better. Openinfocard is now more flexible in regard to signing algorithms. I added all DSA and RSA algorithms from http://www.w3.org/TR/2010/WD-xmlsec-algorithms-20100316/ &lt;br /&gt;&lt;br /&gt;Enjoy.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_63KXhUQPgSE/S8eCrbSiWtI/AAAAAAAAA-o/6JgRT7FR7uQ/s1600/BCeID-card-openinfocard.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 330px;" src="http://1.bp.blogspot.com/_63KXhUQPgSE/S8eCrbSiWtI/AAAAAAAAA-o/6JgRT7FR7uQ/s400/BCeID-card-openinfocard.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5460476755781507794" /&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/Ignisvulpis/~4/2kOxSPRcOxk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ignisvulpis.blogspot.com/feeds/5450377896112563293/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37220752&amp;postID=5450377896112563293" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/5450377896112563293?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37220752/posts/default/5450377896112563293?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Ignisvulpis/~3/2kOxSPRcOxk/sha256-et-al-in-openinfocard.html" title="SHA256 et al in openinfocard" /><author><name>Axel Nennker</name><uri>https://plus.google.com/111887082778273605100</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Y-lgQH_nEOU/AAAAAAAAAAI/AAAAAAAAIqg/7Dqxu2uJTmY/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_63KXhUQPgSE/S8eCrbSiWtI/AAAAAAAAA-o/6JgRT7FR7uQ/s72-c/BCeID-card-openinfocard.png" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://ignisvulpis.blogspot.com/2010/04/sha256-et-al-in-openinfocard.html</feedburner:origLink></entry></feed>
