<?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:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DkAFRno8fip7ImA9WhRaFUQ.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604</id><updated>2012-02-18T16:51:57.476-03:00</updated><category term="domain names" /><category term="oauth" /><category term="openid" /><category term="dns" /><category term="LOA" /><category term="FICAM" /><category term="SAML" /><category term="identity" /><category term="godaddy" /><category term="ebay" /><category term="openid connect" /><title>Thread Safe</title><subtitle type="html">Posts about Identity and Federated Identity issues.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.thread-safe.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.thread-safe.com/" /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>24</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/Thread-Safe" /><feedburner:info uri="thread-safe" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>49.2795665321</geo:lat><geo:long>-123.125601348</geo:long><logo>http://feeds.feedburner.com/~fc/Thread-Safe?bg=99CCFF&amp;amp;fg=444444&amp;amp;anim=1" height="26" width="88" style="border:0" alt=""</logo><entry gd:etag="W/&quot;DkAFRno8cSp7ImA9WhRaFUQ.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-4795997782671833494</id><published>2012-02-18T16:50:00.001-03:00</published><updated>2012-02-18T16:51:57.479-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-18T16:51:57.479-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dns" /><category scheme="http://www.blogger.com/atom/ns#" term="godaddy" /><category scheme="http://www.blogger.com/atom/ns#" term="domain names" /><title>GoAway GoDaddy</title><content type="html">I have been annoyed by GoDaddy for a while, but they are cheep for registering Domain Names.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
However there recent positions on &lt;a href="http://godaddyboycott.org/"&gt;SOPA and PIPA&lt;/a&gt;&amp;nbsp;finally pushed me over the edge to moving all of my services from them.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I also had some domains other places. &amp;nbsp; Looking at the situation I decided to do something I have thought about a number of times in the past.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I am now a Domain Reseller. &amp;nbsp; Using the back end software from tucows in Toronto, I have set up a &lt;a href="http://wingaa.com/"&gt;site&lt;/a&gt; and moved my own domains to it.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I know there are other people who probably want to move as well, but find the idea of becoming a registrar a bit more than they want to do for a couple of names.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Others are welcome to use my site &lt;a href="http://wingaa.com/"&gt;wingaa.com&lt;/a&gt;&amp;nbsp;if they are OK with having only a moderately evil Registrar.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
My volume is low so I don't have the lowest prices, &amp;nbsp;but I do provide a full DNS service that is extra many places. &amp;nbsp; No I will not put advertising on your squatted web pages for you. &amp;nbsp;Go someplace else for that.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
If nothing else I feel better having more direct control over my own names.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
At some point I may do some experimentation with adding other hosted identity services for domains. &amp;nbsp;That was our plan at&amp;nbsp;&lt;a href="http://drstarcat.com/archives/19"&gt;ooTao&lt;/a&gt;&amp;nbsp;when I first looks at doing this years ago.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
For the curious&amp;nbsp;Wingaa means 'My name is...' in the &lt;a href="http://en.wikipedia.org/wiki/Central_Alaskan_Yup%27ik_language"&gt;Central Alaskan Yup'ik language&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
It is a recycled name that Andy Dale and I had as a part of &lt;a href="http://drstarcat.com/archives/19"&gt;ooTao&lt;/a&gt; back in the day.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
John B.&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px;"&gt;&lt;a href="https://twitter.com/#!/ve7jtb" style="-webkit-transition-delay: initial; -webkit-transition-duration: 0.3s; -webkit-transition-property: color; -webkit-transition-timing-function: initial; color: #4ba976; display: inline; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; outline-color: initial; outline-style: none; outline-width: initial; text-decoration: none;" target="_blank"&gt;@ve7jtb&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-4795997782671833494?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=9O1jxatojUg:Y7j5C9L8txg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=9O1jxatojUg:Y7j5C9L8txg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=9O1jxatojUg:Y7j5C9L8txg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=9O1jxatojUg:Y7j5C9L8txg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=9O1jxatojUg:Y7j5C9L8txg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=9O1jxatojUg:Y7j5C9L8txg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/4795997782671833494/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2012/02/goaway-godaddy.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/4795997782671833494?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/4795997782671833494?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/9O1jxatojUg/goaway-godaddy.html" title="GoAway GoDaddy" /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Isla de Maipo, Santiago Metropolitan Region, Chile</georss:featurename><georss:point>-33.746456 -70.9</georss:point><georss:box>-33.8520825 -71.0579285 -33.6408295 -70.74207150000001</georss:box><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2012/02/goaway-godaddy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMFSHg9eCp7ImA9WhRaFUU.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-8529032693009245429</id><published>2012-02-18T13:45:00.000-03:00</published><updated>2012-02-18T14:00:19.660-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-18T14:00:19.660-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid" /><category scheme="http://www.blogger.com/atom/ns#" term="identity" /><category scheme="http://www.blogger.com/atom/ns#" term="openid connect" /><title>OpenID Connect Interop in Progress</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://self-issued.info/images/osis-logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img align="right" alt="OSIS logo" border="0" src="http://self-issued.info/images/osis-logo.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;img alt="OpenID logo" src="http://self-issued.info/images/openid-logo.png" style="text-align: right;" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #555555; font-family: 'Trebuchet MS', Arial, Verdana, serif; font-size: 13px; line-height: 1.75em; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
The&amp;nbsp;&lt;a href="http://osis.idcommons.net/wiki/OC3:OpenID_Connect_Interop_3" style="color: #104893; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;Third OpenID Connect Interop&lt;/a&gt;&amp;nbsp;is currently under way – this time based upon&amp;nbsp;&lt;a href="http://www.thread-safe.com/2012/02/openid-connect-approved-as-implementers.html" style="color: #104893; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;approved Implementer’s Drafts&lt;/a&gt;. Currently 7&amp;nbsp;&lt;a href="http://osis.idcommons.net/wiki/Category:OC3_Solution" style="color: #104893; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;implementations&lt;/a&gt;&amp;nbsp;are being tested, with I believe more to be added. The interop is designed to enable people to test the implementations they’ve built against other implementations and verify that specific features that they’ve built are working correctly. This has several benefits: it helps debug implementations, it helps debug the specifications, and it results in greater interoperability among&amp;nbsp;&lt;a href="http://openid.net/connect/" style="color: #104893; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;OpenID Connect&lt;/a&gt;&amp;nbsp;implementations.&lt;/div&gt;
&lt;div style="color: #555555; font-family: 'Trebuchet MS', Arial, Verdana, serif; font-size: 13px; line-height: 1.75em; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
As background, like the other&amp;nbsp;&lt;a href="http://osis.idcommons.net/" style="color: #104893; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;OSIS interops&lt;/a&gt;, the OpenID Connect interop is an opportunity for implementers to try their code against one another’s in a systematic way. It is not a conformance test; participants do not “pass” or “fail”. There is no requirement that you must support particular features to participate or that you must participate in all aspects of the interop.&lt;/div&gt;
&lt;div style="color: #555555; font-family: 'Trebuchet MS', Arial, Verdana, serif; font-size: 13px; line-height: 1.75em; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
If you’d like to participate in the interop, join the&amp;nbsp;&lt;a href="http://groups.google.com/group/openid-connect-interop?hl=en&amp;amp;pli=1" style="color: #104893; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;OpenID Connect Interop mailing list&lt;/a&gt;&amp;nbsp;and send us a note there saying who your interop contact person will be, the name of your organization (can be an individual), the name of your implementation (can be your name), and a list of the online testing endpoints for your implementation. Testing is performed online on your schedule, with results recorded on the interop wiki. That being said, an&amp;nbsp;&lt;a href="http://openid-rsa-interop.eventbrite.com/" style="color: #104893; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;in-person meeting of interop participants&lt;/a&gt;&amp;nbsp;will also be held on Friday, March 2 in San Francisco (the week of&amp;nbsp;&lt;a href="http://rsaconference.com/events/2012/usa/" style="color: #104893; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;RSA&lt;/a&gt;) for those who are able to attend.&lt;/div&gt;
&lt;div style="color: #555555; font-family: 'Trebuchet MS', Arial, Verdana, serif; font-size: 13px; line-height: 1.75em; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
John B.&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px;"&gt;&lt;a href="https://twitter.com/#!/ve7jtb" style="-webkit-transition-delay: initial; -webkit-transition-duration: 0.3s; -webkit-transition-property: color; -webkit-transition-timing-function: initial; color: #4ba976; display: inline; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; outline-color: initial; outline-style: none; outline-width: initial; text-decoration: none;" target="_blank"&gt;@ve7jtb&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-8529032693009245429?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=Oot1BfEFDeg:bRa57UcLFVo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=Oot1BfEFDeg:bRa57UcLFVo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=Oot1BfEFDeg:bRa57UcLFVo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=Oot1BfEFDeg:bRa57UcLFVo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=Oot1BfEFDeg:bRa57UcLFVo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=Oot1BfEFDeg:bRa57UcLFVo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/8529032693009245429/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2012/02/openid-connect-interop-in-progress.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/8529032693009245429?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/8529032693009245429?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/Oot1BfEFDeg/openid-connect-interop-in-progress.html" title="OpenID Connect Interop in Progress" /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Isla de Maipo, Santiago Metropolitan Region, Chile</georss:featurename><georss:point>-33.746456 -70.9</georss:point><georss:box>-33.8520825 -71.0579285 -33.6408295 -70.74207150000001</georss:box><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2012/02/openid-connect-interop-in-progress.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQAR348cSp7ImA9WhRaFUU.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-7053431909687622461</id><published>2012-02-16T11:33:00.000-03:00</published><updated>2012-02-18T13:59:06.079-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-18T13:59:06.079-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid" /><category scheme="http://www.blogger.com/atom/ns#" term="identity" /><category scheme="http://www.blogger.com/atom/ns#" term="openid connect" /><category scheme="http://www.blogger.com/atom/ns#" term="oauth" /><title>OpenID Connect Approved as Implementers Draft</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://self-issued.info/images/openid-logo.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img alt="OpenID logo" border="0" src="http://self-issued.info/images/openid-logo.png" style="text-align: right;" /&gt;&lt;/a&gt;&lt;/div&gt;
Thank you to everyone who voted.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;
&lt;br /&gt;&lt;/div&gt;
The approval of the specifications as an implementers draft is an important step on the road to a final specification.&lt;br /&gt;
&lt;br /&gt;
This serves to lock in the current IPR contributions by all the contributors. &amp;nbsp;This gives initial implementers confidence to start developing code without worrying about IPR issues.&lt;br /&gt;
&lt;br /&gt;
The Vote results were:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Approve (86 votes)&lt;/li&gt;
&lt;li&gt;Disapprove (1 vote)&lt;/li&gt;
&lt;li&gt;Abstain (2 votes)&lt;/li&gt;
&lt;/ul&gt;
Total Votes:&amp;nbsp;91&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
We are now entering a phase of development and &lt;a href="http://osis.idcommons.net/wiki/OC3_OpenID_Connect_Interop_3" target="_blank"&gt;interop testing&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There are currently 7 &lt;a href="http://osis.idcommons.net/wiki/Category:OC3_Participant" target="_blank"&gt;participants&lt;/a&gt; testing code and deployments.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
John B.&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px;"&gt;&lt;a href="https://twitter.com/#!/ve7jtb" style="-webkit-transition-delay: initial; -webkit-transition-duration: 0.3s; -webkit-transition-property: color; -webkit-transition-timing-function: initial; color: #4ba976; display: inline; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; outline-color: initial; outline-style: none; outline-width: initial; text-decoration: none;" target="_blank"&gt;@ve7jtb&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-7053431909687622461?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=1XLeGfAXbwo:aL3gnBLpwJ8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=1XLeGfAXbwo:aL3gnBLpwJ8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=1XLeGfAXbwo:aL3gnBLpwJ8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=1XLeGfAXbwo:aL3gnBLpwJ8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=1XLeGfAXbwo:aL3gnBLpwJ8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=1XLeGfAXbwo:aL3gnBLpwJ8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/7053431909687622461/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2012/02/openid-connect-approved-as-implementers.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/7053431909687622461?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/7053431909687622461?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/1XLeGfAXbwo/openid-connect-approved-as-implementers.html" title="OpenID Connect Approved as Implementers Draft" /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Isla de Maipo, Santiago Metropolitan Region, Chile</georss:featurename><georss:point>-33.746456 -70.9</georss:point><georss:box>-33.8520825 -71.0579285 -33.6408295 -70.74207150000001</georss:box><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2012/02/openid-connect-approved-as-implementers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQDSXszeip7ImA9WhRaFUU.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-8587072881770865971</id><published>2012-02-10T18:01:00.000-03:00</published><updated>2012-02-18T13:59:38.582-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-18T13:59:38.582-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid" /><category scheme="http://www.blogger.com/atom/ns#" term="identity" /><category scheme="http://www.blogger.com/atom/ns#" term="openid connect" /><category scheme="http://www.blogger.com/atom/ns#" term="oauth" /><title>More on OAuth implicit flow application vulnerabilities.</title><content type="html">My blogpost last week&amp;nbsp;&lt;a href="http://www.thread-safe.com/2012/01/problem-with-oauth-for-authentication.html" target="_blank"&gt;The problem with OAuth for Authentication&lt;/a&gt;&amp;nbsp;has gotten the attention of some of the apps developers.&lt;br /&gt;
&lt;br /&gt;
Nov Matake &lt;a href="https://twitter.com/#!/nov" target="_blank"&gt;@nov&lt;/a&gt; has filed &lt;a href="https://gist.github.com/1787579" target="_blank"&gt;this issue&lt;/a&gt; with the Apple Security Team regarding iOS applications.&lt;br /&gt;
&lt;br /&gt;
There is a good articles in Japanese at OAuth.jp &amp;nbsp;&lt;a href="http://oauth.jp/oauth-20-implicit-flow" target="_blank"&gt;Damage caused by the Implicit flow login&lt;/a&gt;, and &lt;a href="http://oauth.jp/-ios-sdk" target="_blank"&gt;The problem with the iOS SDK&lt;/a&gt;. &amp;nbsp;Both posts look&amp;nbsp;at current deployed applications and SDK vulnerability to the sort of attack I described.&lt;br /&gt;
&lt;br /&gt;
I will attempt a rough translation for those of you who don't read Japanese.&lt;br /&gt;
&lt;br /&gt;
Premise:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;There is a gaming platform that supports OAuth 2 for authentication.&lt;/li&gt;
&lt;li&gt;There is an attacker who runs a fortune-telling game on a mobile platform.&lt;/li&gt;
&lt;li&gt;Legitimate games are operated on the same platform.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Assumption:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;The game application is not otherwise vulnerable to XSS, CSRF, or session &amp;nbsp;hijacking.&lt;/li&gt;
&lt;li&gt;Both applications are using Oauth 2.0 implicit flow for authentication.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;br /&gt;
Scenario:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;The attacker running the fortune-telling game gets the user to login.&lt;/li&gt;
&lt;li&gt;Attacker gets access token for Social Network Graph API&lt;/li&gt;
&lt;li&gt;The attacker then uses that access_token to log into the legitimate game by modifying the URI fragment to insert the stolen access_token into the response. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;The attacker now has complete access to the users account on the legitimate game.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
This scenario is not limited to gains but applies to many mobile applications using OAuth for authentication.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The reason this works is that the OAuth client has no way in OAuth to tell what client the token was issued to. &amp;nbsp;(In openID connect we use a structured id_token with an audience to protect against this)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
If the OAuth platform is Facebook there is a way developers can protect themselves. &amp;nbsp;They have a token introspection &amp;nbsp;API that returns your application's client ID.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
End attempt at translation:)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Sone comments by me.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This is a example Facebook token introspection request.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Example:&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;https://graph.facebook.com/app?access_token=[The Access Token]&lt;/span&gt;&lt;/blockquote&gt;
&lt;div&gt;
Response:&lt;/div&gt;
&lt;div&gt;
&lt;blockquote&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;br /&gt;   "id": "314251861954810",&lt;br /&gt;   "name": "jbradley",&lt;br /&gt;   "link": "https://www.facebook.com/apps/application.php?id=314251861954810",&lt;br /&gt;   "canvas_name": "thread-safe",&lt;br /&gt;   "namespace": "thread-safe",&lt;br /&gt;   "icon_url": "https://s-static.ak.facebook.com/rsrc.php/v1/yT/r/4QVMqOjUhcd.gif",&lt;br /&gt;   "logo_url": "https://s-static.ak.facebook.com/rsrc.php/v1/y_/r/9myDd8iyu0B.gif",&lt;br /&gt;   "daily_active_users": "1",&lt;br /&gt;   "weekly_active_users": "1",&lt;br /&gt;   "monthly_active_users": "1"&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
The client checks that the value of id is it's client id and you know the token was intended for you.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The connect &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;id_token&lt;/span&gt; puts the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;client_id&lt;/span&gt; in the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;aud &lt;/span&gt;claim so that the client has it without doing an extra round trip. &amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Example decoded id_token.&lt;/div&gt;
&lt;div&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;TTP/1.1 200 OK&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Content-Type: application/json&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;"iss": "http://server.example.com",&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;"user_id": "248289761001",&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;"aud": "&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;314251861954810&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;",&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;"nonce": "n-0S6_WzA2Mj",&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;"exp": 1311281970,&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;"iat": 1311280970&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
Facebook also has signed_request that can also protect agains this.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
My point is that OAuth 2.0 can be used safely, &amp;nbsp;but it is designed as an authorization protocol. &amp;nbsp;It needs some extension to be used for authentication. &amp;nbsp; &amp;nbsp;The problem is that explaining things like id_tokens or the Facebook token introspection endpoint makes it look more complicated, so people have not been doing it and it seems to have caused some vulnerabilities in applications and frameworks.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
John Bradley&lt;/div&gt;
&lt;div&gt;
&lt;a href="https://twitter.com/#!/ve7jtb" target="_blank"&gt;@ve7jtb&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-8587072881770865971?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=q3_An38E4ow:VZMfMJ40h-4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=q3_An38E4ow:VZMfMJ40h-4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=q3_An38E4ow:VZMfMJ40h-4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=q3_An38E4ow:VZMfMJ40h-4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=q3_An38E4ow:VZMfMJ40h-4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=q3_An38E4ow:VZMfMJ40h-4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/8587072881770865971/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2012/02/more-on-oauth-implicit-flow-application.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/8587072881770865971?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/8587072881770865971?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/q3_An38E4ow/more-on-oauth-implicit-flow-application.html" title="More on OAuth implicit flow application vulnerabilities." /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Isla de Maipo, Santiago Metropolitan Region, Chile</georss:featurename><georss:point>-33.746456 -70.9</georss:point><georss:box>-33.8520825 -71.0579285 -33.6408295 -70.74207150000001</georss:box><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2012/02/more-on-oauth-implicit-flow-application.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYDQX8_cSp7ImA9WhRbF04.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-6877357263761469941</id><published>2012-02-08T16:42:00.003-03:00</published><updated>2012-02-08T16:42:50.149-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-08T16:42:50.149-03:00</app:edited><title>Voting open for openID Connect Implementers Draft</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;span&gt;After a 45 Review period, v&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;span&gt;oting is now open for the&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;a href="https://openid.net/connect/" target="_blank"&gt;OpenID Connect Implementer's Draft&lt;/a&gt;&amp;nbsp;.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;span&gt;Voting is open to all openID Foundation Members.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;span&gt;Please register your vote before 2012-02-15.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="font-family: Helvetica;"&gt;
&lt;br /&gt;&lt;span&gt;Link:&lt;/span&gt;&lt;br /&gt;&lt;a href="https://openid.net/foundation/members/polls/62" target="_blank"&gt;https://openid.net/foundation/members/polls/62&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Title:&lt;/span&gt;&lt;br /&gt;&lt;span&gt;OpenID Connect Implementer's Draft&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Description:&lt;/span&gt;&lt;br /&gt;&lt;span&gt;The OpenID AB+Connect Working Group recommends approval of the following specifications as OpenID Implementer’s Drafts:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://openid.net/specs/openid-connect-basic-1_0-15.html" target="_blank"&gt;Basic Client Profile&lt;/a&gt; – Simple self-contained specification for a web-based Relying Party. &amp;nbsp;(This spec contains a subset of the information in Messages and Standard.)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://openid.net/specs/openid-connect-discovery-1_0-07.html" target="_blank"&gt;Discovery&lt;/a&gt; – Defines how user and provider endpoints can be dynamically discovered.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://openid.net/specs/openid-connect-registration-1_0-08.html" target="_blank"&gt;Dynamic Registration&lt;/a&gt; – Defines how clients can dynamically register with OpenID Providers.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://openid.net/specs/openid-connect-messages-1_0-07.html" target="_blank"&gt;Messages&lt;/a&gt; – Defines all the messages that are used in OpenID Connect. &amp;nbsp;(These messages are used by the Standard binding.)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://openid.net/specs/openid-connect-standard-1_0-07.html" target="_blank"&gt;Standard&lt;/a&gt; – Complete HTTP binding of the Messages, for both Relying Parties and OpenID Providers.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://openid.net/specs/oauth-v2-multiple-response-types-1_0-03.html" target="_blank"&gt;Multiple Response Type Encoding&lt;/a&gt; – Registers OAuth 2.0 response_type values used by OpenID Connect.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;span&gt;An Implementer’s Draft is a stable version of a specification providing intellectual property protections to implementers of the specification.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;A description of OpenID Connect can be found at&amp;nbsp;&lt;/span&gt;&lt;a href="http://openid.net/connect/" target="_blank"&gt;http://openid.net/connect/&lt;/a&gt;&lt;span&gt;. The working group page is&lt;/span&gt;&lt;a href="http://openid.net/wg/connect/" target="_blank"&gt;http://openid.net/wg/connect/&lt;/a&gt;&lt;span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Available Choices:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Approve&lt;/li&gt;
&lt;li&gt;Disapprove&lt;/li&gt;
&lt;li&gt;Abstain&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;span&gt;Thank you for your participation!&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: Helvetica;"&gt;
John Bradley&lt;/div&gt;
&lt;div style="font-family: Helvetica;"&gt;
@VE7JTB&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-6877357263761469941?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=3tEdEeKcPaA:Mg1Y4Jwh-I0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=3tEdEeKcPaA:Mg1Y4Jwh-I0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=3tEdEeKcPaA:Mg1Y4Jwh-I0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=3tEdEeKcPaA:Mg1Y4Jwh-I0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=3tEdEeKcPaA:Mg1Y4Jwh-I0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=3tEdEeKcPaA:Mg1Y4Jwh-I0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/6877357263761469941/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2012/02/voting-open-for-openid-connect.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/6877357263761469941?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/6877357263761469941?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/3tEdEeKcPaA/voting-open-for-openid-connect.html" title="Voting open for openID Connect Implementers Draft" /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2012/02/voting-open-for-openid-connect.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QFR34zfSp7ImA9WhRbFEg.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-3802766725246178581</id><published>2012-02-04T20:52:00.001-03:00</published><updated>2012-02-05T11:15:16.085-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-05T11:15:16.085-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid" /><category scheme="http://www.blogger.com/atom/ns#" term="identity" /><category scheme="http://www.blogger.com/atom/ns#" term="openid connect" /><category scheme="http://www.blogger.com/atom/ns#" term="oauth" /><title>Designing a Single Sign-on system using OAuth 2.0</title><content type="html">Lets first consider what a &lt;a href="http://en.wikipedia.org/wiki/Single_sign-on" target="_blank"&gt;Single Sign-on System&lt;/a&gt; is.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
A SSO system provides access control for multiple independent systems based on a single login.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This is typically what &lt;a href="http://openid.net/specs/openid-authentication-2_0.html" target="_blank"&gt;openID 2.0&lt;/a&gt; is used for and in many cases &lt;a href="https://developers.facebook.com/docs/guides/web/" target="_blank"&gt;Facebook Connect&lt;/a&gt; or &lt;a href="https://dev.twitter.com/docs/auth/sign-twitter" target="_blank"&gt;Twitter&lt;/a&gt; on the social web.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Lets use a real example, one site I use a lot is &lt;a href="http://tripit.com/" target="_blank"&gt;tripit.com&lt;/a&gt;. &amp;nbsp; They are a excellent example of how a website can take advantage of both web and mobile apps using single sign on and OAuth.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I login at tripit on the web by clicking a google button to login using openID 2.0 with OAuth 1.1 or a Facebook button to Login with &lt;a href="http://tools.ietf.org/html/ietf-oauth-v2" target="_blank"&gt;OAuth 2.0&lt;/a&gt; and Facebook's &lt;a href="https://developers.facebook.com/docs/reference/api/" target="_blank"&gt;Graph API&lt;/a&gt; extensions.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I never provide a username and password to &lt;a href="http://www.tripit.com/" target="_blank"&gt;tripit&lt;/a&gt; they let me in based on a statement from a third party that I am logged in to that third party as some particular user.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This saves me from having to remember yet another username and password. &amp;nbsp;However if that was all there was too it probably they would just ask for a username (email) and password like most other sites.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
However they are taking advantage of the fact that if I use a credential from Facebook or Google they have additional API&amp;nbsp;(&lt;a href="http://en.wikipedia.org/wiki/Application_programming_interface" target="_blank"&gt;Application Programming Interface&lt;/a&gt;) and information that can be linked to my tripit account to make there web site better integrated into my social web activity.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
At Facebook I can grant tripit access to push trip information into my activity stream, &amp;nbsp;and look at my friends list, so that they can notify me when one of my friends joins &lt;a href="http://www.tripit.com/" target="_blank"&gt;tripit&lt;/a&gt;,&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
At Google I can grant tripit access to scan my incoming email for travel itineraries emailed to me when I make a reservation. &amp;nbsp;They can also get access to my portable contacts endpoint and other information if I grant them access.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
All of this additional information &amp;nbsp;that I may grant them access to is what OAuth is used for.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Having worked on protocols like &lt;a href="http://en.wikipedia.org/wiki/Information_Card" target="_blank"&gt;Info Card&lt;/a&gt;&amp;nbsp;for Authentication (Not SSO) to websites is that the lack of access to rich API is what stopped Websites like Tripit from being interested in them. &amp;nbsp; As an aside I think &lt;a href="https://browserid.org/" target="_blank"&gt;Mozilla's &amp;nbsp;Browser-ID&lt;/a&gt;&amp;nbsp; has the same flaw of focusing only on Authentication. &amp;nbsp;It just is not enough any more.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So for the SSO system I want to design it needs to enable &lt;a href="http://tools.ietf.org/html/ietf-oauth-v2" target="_blank"&gt;OAuth 2.0&lt;/a&gt; access to arbitrary API. &amp;nbsp;I don't want to stifle innovation by presupposing that I know every possible API that is ever going to be invented on the Internet for the rest of time. &amp;nbsp; The API I may want to give a RP access to might be just a stream of my favourite songs, or photos etc.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The API like&amp;nbsp;&lt;a href="http://SalesForce.com/" target="_blank"&gt;SalesForce.com&lt;/a&gt;&amp;nbsp;and most others already have access tokens that they use. &amp;nbsp; I don't want to start imposing a particular format for access tokens if I am going to be a good citizen and design something that works with existing OAuth protected API.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The API will have permissions not related to my interactive session with the web site. &amp;nbsp;In the case of tripit when I use my iPhone app to update something in my account, &amp;nbsp;I expect them to be able to push that to my Facebook activity stream without me logging in again with a traditional web browser session for them to get access. (This was referred to as &lt;a href="http://www.thread-safe.com/2012/01/facebook-diverges-from-oauth-20.html" target="_blank"&gt;offline access permission&lt;/a&gt; by Facebook, it is now the default.) &amp;nbsp;While a login session requires the users presence in some way the OAuth activity the user authorizes may be longer lived than the session and require the use of OAuth refresh tokens to control access.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So as a core design principal I am going to create a SSO profile that works with OAuth 2.0 and interferes as little as possible with access tokens and existing endpoints. &amp;nbsp;I hope that sounds reasonable.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Next we need to consider what we need for the SSO portion of the protocol.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
We defiantly need to know some things (at least in my opinion):&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Who is doing the Authentication of the user and making the assertion about the user.&lt;/li&gt;
&lt;li&gt;Who is the user, some sort of persistent over time user identifier.&lt;/li&gt;
&lt;li&gt;Who is the assertion being made to. &amp;nbsp;This prevents &lt;a href="http://www.thread-safe.com/2012/01/problem-with-oauth-for-authentication.html" target="_blank"&gt;replay of assertions&lt;/a&gt; intended for other clients.&lt;/li&gt;
&lt;li&gt;How long is this assertion good for before the client needs to check if the user is still authenticated.&lt;/li&gt;
&lt;li&gt;A method to link the browser session to the assertion and detect replay attempts.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Without those things the Relying Party (RP) or client in OAuth speak can't do a proper job of determining if they can trust the assertion to let the user in.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There are some optional things that not every RP is going to want, but some RP are going to really need if they are going to protect themselves and you from hacking.&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Indication of the Authentication context or circumstances. (Were they identity proofed, and did they login with a second factor like a SMS message to there registered phone)&lt;/li&gt;
&lt;li&gt;When did they last do an interactive login(not cookie) if it was 6 days ago the site may elect to have the user go back to there Single Sign-on Provider and re-authenticate in some way to show that they are still the one using the computer.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
If the RP can get that information we are doing quite well.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The next thing we need to figure out is how to ask the SSO/Authorization Provider for the SSO things. &amp;nbsp; For Authorization we have scopes, &amp;nbsp;though not super sophisticated they provide a way to say give me authorization to access some stuff at some endpoint.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So lets make a scope called &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;authentication-information&lt;/span&gt;&amp;nbsp;(I know it is a bit long, this is an example lighten up) , we define it to be a request to make available a set of claims about the authentication event at a new OAuth protected endpoint we create. &amp;nbsp;Call the new endpoint &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;auth_info_endpoint.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This keeps us from stepping on other OAuth protected resources. &amp;nbsp;We can pass multiple scopes to the Authorization endpoint in our authorization request so whatever our original scopes were for our protected resource will still work.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
To make this work we need to get two access tokens back from the Authorization endpoint. &amp;nbsp;One that is for our original protected resource that we are not interfering with, and one for the&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;auth_info_endpoint.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
Fortunately OAuth allows us to define new &lt;a href="http://tools.ietf.org/html/draft-ietf-oauth-v2-23#page-59" target="_blank"&gt;response_type&lt;/a&gt;&amp;nbsp;that can return multiple tokens. &amp;nbsp; Currently in preparation for the completion of OAuth and the opening of the response_type registry Facebook and Google authors put together a &lt;a href="http://openid.bitbucket.org/oauth-v2-multiple-response-types-1_0.html" target="_blank"&gt;Multiple Response Type Encoding Practices&lt;/a&gt; registration proposal that we can use.&amp;nbsp; &amp;nbsp;Facebook and Google have already implemented versions of it as part of there OAuth 2 deployments.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
That document defines an additional token that is returned in a parameter called id_token. &amp;nbsp;The requirement is that token provides an assertion about the identity of the resource owner. &amp;nbsp; Remember there is nothing in the actual OAuth 2.0 spec that requires the access_token to in any way identify the resource owner, the resource owner might be someone entirely different than the one granting the client access.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The nice thing about the new endpoint and token is that we can restrict it so that the resource owner of the endpoint is the person who is being authenticated.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So lets go through this flow I am proposing.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The RP(client) makes a request via redirect through the users browser and sets a session cookie in the browser to track the authentication/authorization request.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
They calculate a hash of a session cookie to use in the request.&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Example SSO/Authorization request.&lt;br /&gt;https://server.example.com/authorize?&lt;br /&gt;response_type=code%20id_token&lt;br /&gt;&amp;amp;client_id=s6BhdRkqt3&lt;br /&gt;&amp;amp;redirect_uri=https%3A%2F%2Fclient.example.com%2Fcb&lt;br /&gt;&amp;amp;scope=&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;authentication-information&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;%20&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse;"&gt;http://www-opensocial.&lt;wbr&gt;&lt;/wbr&gt;googleusercontent.com/api/&lt;wbr&gt;&lt;/wbr&gt;people&lt;/span&gt;&lt;br /&gt;&amp;amp;state=af0ifjsldkj&lt;br /&gt;&amp;amp;nonce=&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;af0ifjsldkj&lt;/span&gt;&lt;/blockquote&gt;
&lt;div&gt;
&amp;nbsp;I am sending the scope for the authentication information and one for Google's portable contacts endpoint as an example. &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The hash we calculated is being sent in both state and nonce that is because some clients are already putting other information in the OAuth state parameter. &amp;nbsp;It may be duplication but I am trying to avoid stepping on existing OAuth elements.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Lets look at the response:&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;HTTP/1.1 302 Found&lt;br /&gt;Location: https://client.example.com/cb#&lt;br /&gt;code=Qcb0Orv1zh30vL1MPRsbm-diHiMwcLyZvn1arpZv-Jxf_11jnpEX3Tgfvk&lt;br /&gt;&amp;amp;id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9zZ&lt;br /&gt;XJ2ZXIuZXhhbXBsZS5jb20iLCJ1c2VyX2lkIjoiMjQ4Mjg5NzYxMDAxIiwiYXVkIjoiaHR0c&lt;br /&gt;DpcL1wvY2xpZW50LmV4YW1wbGUuY29tIiwiZXhwIjoxMzExMjgxOTcwfQ.eDesUD0vzDH3T1&lt;br /&gt;G3liaTNOrfaeWYjuRCEPNXVtaazNQ&lt;br /&gt;&amp;amp;state=af0ifjsldkj&lt;/span&gt;&lt;/blockquote&gt;
&lt;div&gt;
We get back three fragment encoded parameters:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;code, &amp;nbsp;for use at the token endpoint to get access and refresh tokens for the portable contacts API.&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;id_token,&lt;/span&gt;an access token for the&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;auth_info_endpoint.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;state&lt;/span&gt;, the value we sent in our request to look up who this response is coming from.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
By looking up state we can find the for the SSO/Authorization server(this could be configured out of band as part of &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;client_id&lt;/span&gt; and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;client_secret&lt;/span&gt; provisioning).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
We make a Bearer token request to the&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;auth_info_endpoint&lt;/span&gt;.&amp;nbsp;&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;POST /auth_info_endpoint HTTP/1.1&lt;br /&gt;Host: server.example.com&lt;br /&gt;Content-Type: application/x-www-form-urlencoded&lt;br /&gt;&lt;br /&gt;access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9zZX&lt;br /&gt;J2ZXIuZXhhbXBsZS5jb20iLCJ1c2VyX2lkIjoiMjQ4Mjg5NzYxMDAxIiwiYXVkIjoiaHR0cD&lt;br /&gt;pcL1wvY2xpZW50LmV4YW1wbGUuY29tIiwiZXhwIjoxMzExMjgxOTcwfQ.eDesUD0vzDH3T1G&lt;br /&gt;3liaTNOrfaeWYjuRCEPNXVtaazNQ&lt;/span&gt;&lt;/blockquote&gt;
&lt;div&gt;
The response would be a JSON object for simplicity:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;HTTP/1.1 200 OK&lt;br /&gt;Content-Type: application/json&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt; "iss": "https://server.example.com",&lt;br /&gt; "user_id": "248289761001",&lt;br /&gt; "aud": "&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;s6BhdRkqt3&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;",&lt;br /&gt; "nonce": "&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;af0ifjsldkj&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;",&lt;br /&gt; "exp": 1311281970&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
We know have an assertion tied to the browser session via nonce, from a endpoint known to be under the control of the resource owner. &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
It contains:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;iss&lt;/span&gt;, The identifier for the SSO/Authorization service.&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;user_id&lt;/span&gt;, An identifier that is unique for that user in the scope of the SSO/Authorization service.&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;aud&lt;/span&gt;, The &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;client_id&lt;/span&gt; from the authentication request. (if it doesn't match the client's &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;client_id&lt;/span&gt;, the token is being replayed.)&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;nonce&lt;/span&gt;, To bind the assertion to the browser session and prevent replay.&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;exp&lt;/span&gt;, &amp;nbsp;The expired time of the assertion. &amp;nbsp;The RP should request a new id_token from the&amp;nbsp;SSO/Authorization service before this expires.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
You may ask how the&amp;nbsp;SSO/Authorization service knows the correct RP/Client is getting the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;id_token&lt;/span&gt;.&lt;/div&gt;
&lt;div&gt;
The RP/Client registers it's &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;redirect_uri&lt;/span&gt; as part of getting it's &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;client_id&lt;/span&gt;. &amp;nbsp;If both endpoints are TLS protected then this is no less secure than the SAML post binding &lt;a href="http://www.thread-safe.com/2012/01/ficam-saml-20-web-sso-profile-updated.html" target="_blank"&gt;FICAM has approved at LoA 3&lt;/a&gt; without encrypting the token end to end.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
The client has the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;code&lt;/span&gt; that it can use at the&amp;nbsp;SSO/Authorization service's &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;token_endpoint&lt;/span&gt;.&lt;/div&gt;
&lt;div&gt;
All of the regular API activity at the portable contacts endpoint can occur with OAuth 2.0 exactly the way it would have before we introduced the SSO elements.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I should point out that Facebook is using a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;response_type&lt;/span&gt; called &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;a href="http://developers.facebook.com/docs/authentication/signed_request/" target="_blank"&gt;signed_request&lt;/a&gt;&lt;/span&gt; rather than &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;a href="http://tools.ietf.org/html/draft-jones-json-web-token" target="_blank"&gt;id_token&lt;/a&gt;&lt;/span&gt;, &amp;nbsp;they also include &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;code&lt;/span&gt; inside the token, so that you don't need to ask for it separately. &amp;nbsp;If you do ask for &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;code&lt;/span&gt; they do send it back as a parameter.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
As an optimization the client can directly decode and verify both &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;a href="http://tools.ietf.org/html/draft-jones-json-web-token" target="_blank"&gt;id_token&lt;/a&gt;&lt;/span&gt; and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;signed_request&lt;/span&gt; directly without making a second https request to the SSO/Authorization service.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
If this sounds like a reasonable proposal for a OAuth extension then please have a look at &lt;a href="http://openid.net/specs/openid-connect-basic-1_0.html" target="_blank"&gt;OpenID Connect Basic Client&lt;/a&gt;, it is almost the same as what I have discussed here but adds a user-info endpoint to get additional user profile information.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
OpenID Connect has a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;check_id&lt;/span&gt; endpoint that works as I have decried taking the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;id_token&lt;/span&gt; for access. &amp;nbsp;Facebook doesn't currently have a introspection endpoint for &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;signed_request&lt;/span&gt; though it has been talked about. &amp;nbsp;There argument is that the client should just validate the signature and use the token.&lt;/div&gt;
&lt;div&gt;
Both &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;id_token&lt;/span&gt; and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;signed_request&lt;/span&gt; have a HMAC-SHA256 integrity check generated with the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;client_password&lt;/span&gt; as the secret by default. &amp;nbsp; That makes it easy for the RP/client to verify. &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
However as the client can also create tokens with an equivalent HMAC that prevents them from being trustable by anything other than a token introspection endpoint like the openID Connect &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;check_id&lt;/span&gt; endpoint. &amp;nbsp;In openID 2.0 the association endpoint provided the same introspection for clients unable to verify assertions themselves.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I hope this gives you another perspective on how openID Connect and other OAuth based SSO protocols can work.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
John B.&lt;br /&gt;
&lt;a href="https://twitter.com/#!/ve7jtb/" target="_blank"&gt;@ve7jtb&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-3802766725246178581?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=a8wCIbLDH-s:9v9IFZS9j40:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=a8wCIbLDH-s:9v9IFZS9j40:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=a8wCIbLDH-s:9v9IFZS9j40:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=a8wCIbLDH-s:9v9IFZS9j40:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=a8wCIbLDH-s:9v9IFZS9j40:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=a8wCIbLDH-s:9v9IFZS9j40:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/3802766725246178581/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2012/02/designing-single-sign-on-system-using.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/3802766725246178581?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/3802766725246178581?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/a8wCIbLDH-s/designing-single-sign-on-system-using.html" title="Designing a Single Sign-on system using OAuth 2.0" /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Isla de Maipo, Santiago Metropolitan Region, Chile</georss:featurename><georss:point>-33.746456 -70.9</georss:point><georss:box>-33.8520825 -71.0579285 -33.6408295 -70.74207150000001</georss:box><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2012/02/designing-single-sign-on-system-using.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EBSXc6fip7ImA9WhRbFEg.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-6891545280158695766</id><published>2012-02-02T17:25:00.000-03:00</published><updated>2012-02-05T11:20:58.916-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-05T11:20:58.916-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid" /><category scheme="http://www.blogger.com/atom/ns#" term="ebay" /><category scheme="http://www.blogger.com/atom/ns#" term="identity" /><category scheme="http://www.blogger.com/atom/ns#" term="openid connect" /><category scheme="http://www.blogger.com/atom/ns#" term="oauth" /><title>eBay's project Oreo, would you like milk with your openID?</title><content type="html">eBay has made available a technology preview of their&amp;nbsp;&lt;a href="https://openidconnect.ebay.com/" target="_blank"&gt;Project Oreo&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
OREO is eBay's implementation of the&amp;nbsp;&lt;a href="http://openid.net/connect/"&gt;OpenID Connect Standard&lt;/a&gt;. OREO will become open source in the near future and developers can use it to implement their own OpenID Compliant service.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
They also have a demo RP setup to use there test IdP at:&lt;/div&gt;
&lt;div&gt;
&lt;a href="https://openidconnect.ebay.com/oreo/start.jsp"&gt;https://openidconnect.ebay.com/oreo/start.jsp&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This is just one of the &lt;a href="http://osis.idcommons.net/wiki/Category:OC3_Solution" target="_blank"&gt;test systems&lt;/a&gt; people are getting ready to test at the upcoming openID Connect &lt;a href="http://osis.idcommons.net/wiki/OC3_OpenID_Connect_Interop_3" target="_blank"&gt;interop on March 3rd&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
John B.&lt;br /&gt;
&lt;a href="https://twitter.com/#!/ve7jtb/" target="_blank"&gt;@ve7jtb&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-6891545280158695766?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=7EFE__9XYzM:CIIU3abjC18:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=7EFE__9XYzM:CIIU3abjC18:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=7EFE__9XYzM:CIIU3abjC18:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=7EFE__9XYzM:CIIU3abjC18:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=7EFE__9XYzM:CIIU3abjC18:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=7EFE__9XYzM:CIIU3abjC18:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/6891545280158695766/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2012/02/ebays-project-oreo-would-you-like-milk.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/6891545280158695766?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/6891545280158695766?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/7EFE__9XYzM/ebays-project-oreo-would-you-like-milk.html" title="eBay's project Oreo, would you like milk with your openID?" /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Lo Herrera 387-605, Isla de Maipo, Santiago Metropolitan Region, Chile</georss:featurename><georss:point>-33.746456 -70.9</georss:point><georss:box>-33.852129000000005 -71.0579285 -33.640783 -70.74207150000001</georss:box><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2012/02/ebays-project-oreo-would-you-like-milk.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QBQH47eSp7ImA9WhRbFEg.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-2994320855893884296</id><published>2012-02-01T20:19:00.003-03:00</published><updated>2012-02-05T11:15:51.001-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-05T11:15:51.001-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="identity" /><category scheme="http://www.blogger.com/atom/ns#" term="openid connect" /><category scheme="http://www.blogger.com/atom/ns#" term="oauth" /><title>Why we need a id_token in openID Connect &amp; Facebook Connect</title><content type="html">Early in the requirements phase of &lt;a href="http://openid.net/connect/" target="_blank"&gt;openID Connect&lt;/a&gt; design one of the inputs was that websites need fast login. &amp;nbsp;Users apparently abandon the login process if it looks like there browser redirect is taking too long.&lt;br /&gt;
&lt;br /&gt;
Facebook presented timing information that to be widely accepted openID connect would need to deliver a verifiable &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;user_id&lt;/span&gt; as part of the initial response. &amp;nbsp;That way the web site can verify the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;user_id&lt;/span&gt; and present a welcome screen while it is pulling other information in the back channel.&lt;br /&gt;
&lt;br /&gt;
In order to do the same thing it turned out that Facebook is doing some undocumented things in the client code it delivers to web sites. &lt;br /&gt;
&lt;br /&gt;
They are using a OAuth 2.0 response_type called signed_request. &amp;nbsp;This returns a signed JSON object in the URI fragment.&lt;br /&gt;
&lt;br /&gt;
An example OAuth request:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;https://www.facebook.com/dialog/oauth?&lt;br /&gt;client_id=314251861954810&lt;br /&gt;&amp;amp;redirect_uri=http%3A%2F%2Ftest-id.org/&lt;br /&gt;&amp;amp;response_type=signed-request&lt;/span&gt;&lt;/blockquote&gt;
The Response:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://test-id.org/#signed_request=tr0ZF2hnsqGuL3pKxUTZZYL6pCK4VKplKhop7BnIup0.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImNvZGUiOiJBUURzSFBLcEVwRmpWb0pnbFZqcS00dWk5MThwUWRRVTdPRjZZMTFXajZxOUFnWUdhYUhxU1VlcWNpX0VyZHRTakJramNzc2VjcnRvQzRyU3l2TVdVR0NidXpXV2dLeFNCSkJSeHBRbmxrMTB5Ty1TN3hWc2Z0MUwtVEFxNWplbThiOWlKRW1RaFhsVW1OM0hTNWR4TFJLc3hrajJCT3ZDa1YyQ1ZsYkpwOGRMU1V2TWtLb1ZnbGtZRnQ1N0k5eE5kZnciLCJpc3N1ZWRfYXQiOjEzMjgxMjc4NzAsInVzZXJfaWQiOiI2MTQzNDU0NDkifQ&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
The base64 decoded &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;signed_request&lt;/span&gt;:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;br /&gt;"algorithm":"HMAC-SHA256","code":"AQDsHPKpEpFjVoJglVjq-4ui918pQdQU7OF6Y11Wj6q9AgYGaaHqSUeqci_ErdtSjBkjcssecrtoC4rSyvMWUGCbuzWWgKxSBJBRxpQnlk10yO-S7xVsft1L[...]",&lt;br /&gt; "issued_at":1328127870,&lt;br /&gt;"user_id":"614345449"&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;
&lt;div&gt;
&lt;div&gt;
Everything after the period in the token is base64 decoded then you perform a HMAC of the base64 encoded &amp;nbsp;version using &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;algorithm&lt;/span&gt;&amp;nbsp;and your client password. &amp;nbsp;The result is the value encoded before the period. &lt;br /&gt;
&lt;br /&gt;
The Facebook Java Script verifies the token and sets the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;user_id&lt;/span&gt; as a cookie in the users browser. &amp;nbsp;It also extracts the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;code&lt;/span&gt;&amp;nbsp;and gives it to the Web server to exchange at the token endpoint for a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;access_token&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Token Endpoint Request:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;https://graph.facebook.com/oauth/access_token?client_id=314251861954810&amp;amp;redirect_uri=http%3A%2F%2Ftest-id.org/&amp;amp;client_secret=b80c53ef7fcb1363a3ba9a&amp;amp;code=AQDfxYh0xSroZZgpk23rYsCOSrCQV7B3M7ABNHw[...]&lt;/span&gt;&lt;/blockquote&gt;
Token Endpoint Response:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;access_token=AAEdz3aaEPoBALt9n4sDni6inzlZzVFlfleyFtloUJKVC2fdLlO0xvdeG9&lt;br /&gt;&amp;amp;expires=5178704&lt;/span&gt;&lt;/blockquote&gt;
&lt;br /&gt;
Facebook is also supporting multiple response types such as:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;https://www.facebook.com/dialog/oauth?&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;client_id=314251861954810&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;amp;redirect_uri=http%3A%2F%2Ftest-id.org/&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;amp;response_type=signed_request%20token&lt;/span&gt;&lt;/blockquote&gt;
Return both the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;access_token&lt;/span&gt; and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;signed_request&lt;/span&gt; in the URI fragment.&lt;br /&gt;
&lt;br /&gt;
We looked at Facebook's solution, but felt it had a number pluses and minuses.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The Good.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
It meets the design goal of quick &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;user_id&lt;/span&gt; credential delivery to the web client without a extra round trip.&lt;br /&gt;
&lt;br /&gt;
The &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;signed_request&lt;/span&gt; provides a form of implicit audience restriction based on the symmetric signature to prevent replay of tokens at different endpoints. I discuss this attack in&amp;nbsp;&lt;a href="http://www.thread-safe.com/2012/01/problem-with-oauth-for-authentication.html"&gt;The problem with OAuth for Authentication&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The Bad.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The client needs to implement crypto support to use the&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;signed_request&lt;/span&gt;&amp;nbsp;token.&lt;br /&gt;
&lt;br /&gt;
The client requires two additional network round trips to get the profile information.   The reason for that is the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;signed_request&lt;/span&gt;&amp;nbsp;contains &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;code&lt;/span&gt; and not &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;token&lt;/span&gt;. &amp;nbsp;This is because the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;signed_request&lt;/span&gt; token is normally stored in the browser as a cookie.  If the access token were in it there would be a possibility of it leaking.  Leaking a long term access token is much worse than a short term session identifier. &amp;nbsp;This necessitates exchanging &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;code&lt;/span&gt; for the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;access_token&lt;/span&gt;, and then the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;access_token&lt;/span&gt; for the user information.&lt;br /&gt;
&lt;br /&gt;
With &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;code&lt;/span&gt; inside &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;signed_request&lt;/span&gt; you wind up storing a much larger cookie than required, &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;code&lt;/span&gt; is very short lived keeping it around in the cookie is not useful.&lt;br /&gt;
&lt;br /&gt;
The format Facebook is using for signing is not a standard it doesn't support signing generic JSON, and it has no support for encryption.  We thought using a IETF standard would be good practice and help with library support.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;b&gt;The solution.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
We decided to modify signed request token by:&lt;br /&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Removing the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;code&lt;/span&gt; claim from inside the token.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Add a Audience claim &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;aud&amp;nbsp;&lt;/span&gt;that has the client id the token was issued for. (needed for asymmetric signatures)&lt;/li&gt;
&lt;li&gt;Add a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;nonce&lt;/span&gt; to prevent replay attacks.&lt;/li&gt;
&lt;li&gt;Add a Issuer &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;iss&amp;nbsp;&lt;/span&gt;claim, this is important once you have more than one provider.&lt;/li&gt;
&lt;li&gt;Use the multi token response type to allow the client to ask for any combination of tokens.&lt;/li&gt;
&lt;li&gt;Provide a convenience endpoint to validate the signed token.&lt;/li&gt;
&lt;li&gt;Use a standards based JSON crypto library &lt;a href="http://tools.ietf.org/wg/jose/" target="_blank"&gt;JOSE&lt;/a&gt; and token format &lt;a href="http://tools.ietf.org/html/draft-jones-json-web-token" target="_blank"&gt;JWT&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Rename the token to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;id_token&lt;/span&gt; to be clearer on it's purpose.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 class="title entry-title" style="display: table-cell; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 40px; padding-top: 0px; vertical-align: middle; width: 670px;"&gt;







&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;We think this is a cleaner design. The&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;id_token&lt;/span&gt; is now small and can be used by a session management extension or as a cookie. It can also be asymmetrically signed and encrypted to to the client if required for higher security and confidentiality, without forcing changes to OAuth.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;In reality they are very similar solutions to the same problem.   Assuming that Facebook adopts the final version of OAuth at some point the only real difference will be the token format,  and they are using separate names so could be implemented in parallel by a provider that wanted to.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;The other option.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;We considered was using the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;id_token&lt;/span&gt; as the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;access_token&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;We rejected that option because: &lt;br /&gt;&lt;ol&gt;
&lt;li&gt;Many providers have existing OAuth token formats for there endpoints that would be difficult to change.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;We don't want long term access tokens being stored in the browser as cookies.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;There are clearly separate recipients of the two tokens overloading the semantics of the two tokens would reduce flexibility and increase complexity in the long term.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
Perhaps not everyone agrees with our choices, however as I pointed out previously you can use openID Connect with only the code flow and it will still work without a is_token. &lt;br /&gt;&lt;br /&gt; &lt;a href="http://openid.net/connect/"&gt;OpenID Connect&lt;/a&gt; is a large spec that may be intimidating to some.  I hope these blog posts help implementors already familiar with Facebook Connect get comfortable with the ideas we are introducing. &lt;br /&gt; &lt;br /&gt;John B.&lt;br /&gt;&lt;a href="https://twitter.com/#!/ve7jtb/" target="_blank"&gt;@ve7jtb&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif; font-size: small;"&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-2994320855893884296?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=0oC5VgaZhr4:eh_kyIaRbMU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=0oC5VgaZhr4:eh_kyIaRbMU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=0oC5VgaZhr4:eh_kyIaRbMU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=0oC5VgaZhr4:eh_kyIaRbMU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=0oC5VgaZhr4:eh_kyIaRbMU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=0oC5VgaZhr4:eh_kyIaRbMU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/2994320855893884296/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2012/02/why-we-need-idtoken-in-openid-connect.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/2994320855893884296?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/2994320855893884296?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/0oC5VgaZhr4/why-we-need-idtoken-in-openid-connect.html" title="Why we need a id_token in openID Connect &amp; Facebook Connect" /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Isla de Maipo, Santiago Metropolitan Region, Chile</georss:featurename><georss:point>-33.746456 -70.9</georss:point><georss:box>-33.8520825 -71.0579285 -33.6408295 -70.74207150000001</georss:box><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2012/02/why-we-need-idtoken-in-openid-connect.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YHRnwycCp7ImA9WhRbFk4.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-437778161152425309</id><published>2012-01-31T16:33:00.000-03:00</published><updated>2012-02-07T13:12:17.298-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-07T13:12:17.298-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="identity" /><category scheme="http://www.blogger.com/atom/ns#" term="openid connect" /><category scheme="http://www.blogger.com/atom/ns#" term="oauth" /><title>Solutions for using OAuth 2.0 for Authentication</title><content type="html">In my previous post, I pointed out that OAuth 2.0 alone is an authorization protocol and can't be safely used on its own without adding additional protocol elements.&lt;br /&gt;
&lt;br /&gt;
Some people might cal it a profile of OAuth, &amp;nbsp;however we generally think of a profile in spec terms as a set of restrictions on a specification. &amp;nbsp;As we need to add things to OAuth we are creating a new protocol using a profile of OAuth 2.0.&lt;br /&gt;
&lt;br /&gt;
In fact if we look at the &lt;a href="http://tools.ietf.org/html/draft-ietf-oauth-v2-23#page-11" target="_blank"&gt;OAuth 2.0 specification&lt;/a&gt; itself we see.&lt;br /&gt;
&lt;blockquote&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;OAuth 2.0 provides a rich authorization framework with well-defined&amp;nbsp;security properties.  However, as a rich and highly extensible&amp;nbsp;framework with many optional components, this specification is likely&amp;nbsp;to produce a wide range of non-interoperable implementations.  In&amp;nbsp;addition, this specification leaves a few required components&amp;nbsp;partially or fully undefined (e.g. client registration, authorization&amp;nbsp;server capabilities, endpoint discovery).&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;   This protocol was design with the clear expectation that future work&amp;nbsp;will define prescriptive profiles and extensions necessary to achieve&amp;nbsp;full web-scale interoperability.&lt;/span&gt;&lt;/blockquote&gt;
&lt;div&gt;
It also has two incompatible token formats &lt;a href="http://tools.ietf.org/html/draft-ietf-oauth-v2-bearer" target="_blank"&gt;Bearer&lt;/a&gt; and &lt;a href="http://tools.ietf.org/html/draft-hammer-oauth-v2-mac-token" target="_blank"&gt;MAC&lt;/a&gt; that you need to choose between before doing anything useful.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
OAuth 2.0 is at the end of the day a toolkit for an authorization protocol designed to be used by many restful protocols. &amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So lets consider what the minimum amount we would need to specify to make a secure authentication protocol out of OAuth 2.0.&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;You need is a protected resource that the Authorization server is protecting.&lt;/li&gt;
&lt;li&gt;The protected resource needs to make a user identifier available to the client.&lt;/li&gt;
&lt;li&gt;To be interoperable with more than one Identity provider you need some concept of a issuer, &amp;nbsp;the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;user_id&lt;/span&gt; needs to be scoped to the issuer by the client.&lt;/li&gt;
&lt;li&gt;You need to define some authorization rules to say that only the resource owner can grant access to this endpoint.&lt;/li&gt;
&lt;li&gt;You need some way to prevent clients from replying access tokens at other clients to impersonate the user.&lt;/li&gt;
&lt;li&gt;If the protected resource, or resources have other information you need to define a OAuth &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;scope&lt;/span&gt;&amp;nbsp;to separate out the request to login vs other information or API the endpoints may be able to provide.&lt;/li&gt;
&lt;li&gt;Client must provide replay protection of &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;code&lt;/span&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
For OAuth 2.0 you need to profile some things for interoperability and security.&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Use bearer tokens (this presents &lt;a href="http://hueniverse.com/2010/09/oauth-bearer-tokens-are-a-terrible-idea/" target="_blank"&gt;opportunities for token theft&lt;/a&gt; that need mitigation)&lt;/li&gt;
&lt;li&gt;Require TLS for all IdP endpoints.&lt;/li&gt;
&lt;li&gt;Require client to track audience of access token, &amp;nbsp;e.g. just because bad.com asks for a access token from google that you already have for the user, don't just give it to them.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Require preregistration of all clients, so that they have a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;client_id&lt;/span&gt; and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;client_secret&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Only use the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;code&lt;/span&gt; (formerly known as client-side) flow.&lt;/li&gt;
&lt;li&gt;Make Cross Site Scripting (XSRF) protection a MUST.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
This is the bear minimum that you need to do. &amp;nbsp;This is not sufficient for many important use cases like Ajax clients.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
To make a real protocol rather than what is effectively a authentication API for a single provider you need discovery of IdP and user identifiers like email addresses and URI. &amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So if that were the requirement lets consider if &lt;a href="http://openid.net/connect/" target="_blank"&gt;OpenID Connect 1.0&lt;/a&gt; can be used in this simplest of ways.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Connect has a user-info endpoint returning a JSON object.&lt;/li&gt;
&lt;li&gt;The &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;user_id&lt;/span&gt; element is always provided by the user-info endpoint.&lt;/li&gt;
&lt;li&gt;There is a Issuer that can be configured manually for every Oauth Authorization server and user-info endpoint. &amp;nbsp;Connect uses a abstract URI identifier to allow IdP to reconfigure there endpoints without breaking clients.&lt;/li&gt;
&lt;li&gt;Connect only provides authorization tokens for the user-info endpoint if approved by the user, and not by a 3rd party like a friend as in some social graphs.&lt;/li&gt;
&lt;li&gt;If the Connect client can elect to only use the OAuth&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;code&lt;/span&gt; flow.&lt;/li&gt;
&lt;li&gt;Connect defines a scope of openid for authentication, other scopes like &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;profile&lt;/span&gt; provide additional claims about the user.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Connect uses &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;nonce&lt;/span&gt; to provide replay protection of &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;id_tokens&lt;/span&gt;, because it supports multiple flows.  A client just using &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;code&lt;/span&gt; could use that to protect itself from replay.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
The Connect specification profiles OAuth 2.0 using Bearer Tokens in the way described,  but allows for flows other than code via additional mitigation's that I will discuss in a later post.&lt;br /&gt;
&lt;br /&gt;
Connect has dynamic Discovery and Registration, but Clients are not required to support that if they have a set of well known IdP that they are willing to restrict themselves to.&lt;br /&gt;
&lt;br /&gt;
So to use Connect like this you would perform a out of band configuration for each of the IdP that the client intends to use.  Preconfigured buttons for each IdP would be provided for each IDP.&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/-Jx2hfNCn5Nk/TzFMx2CuyhI/AAAAAAAAACg/0hL5k6N57kQ/s1600/connect+code+flow.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="451" src="http://3.bp.blogspot.com/-Jx2hfNCn5Nk/TzFMx2CuyhI/AAAAAAAAACg/0hL5k6N57kQ/s640/connect+code+flow.jpg" 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;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Diagram by Amanda Anganes (mitre.org)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Once the user clicks on a button the client stores some state in the users browser and creates a handle for it(regular OAuth 2.0).&lt;/div&gt;
&lt;br /&gt;
It formulates a 302 redirect request to the known Authorization server endpoint of the issuer with it's client_id, and other OAuth 2.0 parameters.&lt;/div&gt;
&lt;div&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;HTTP/1.1 302 Found&lt;br /&gt;Location: https://server.example.com/op/authorize?&lt;br /&gt;response_type=code&lt;br /&gt;&amp;amp;scope=openid&lt;br /&gt;&amp;amp;nonce=&lt;br /&gt;&amp;amp;state=af0ifjsldkj&lt;br /&gt;&amp;amp;client_id=s6BhdRkqt3&lt;br /&gt;&amp;amp;redirect_uri=https%3A%2F%2Fclient.example.com%2Fcb&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
This is just Oauth 2.0 with the addition of a defined scope and nonce parameter. &amp;nbsp;(nonce is used to provide replay protection for &amp;nbsp;id_tokens, &amp;nbsp;we are not using that in this simple example so the value can be empty)&lt;br /&gt;
&lt;br /&gt;
If the user authorizes the openid grant request the client gets back a standard OAuth 2.0 response:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;HTTP/1.1 302 Found&lt;br /&gt;Location: https://client.example.com/cb?&lt;br /&gt;code=Qcb0Orv1zh30vL1MPRsbm-diHiMwcLyZvn1arpZv-Jxf_11jnpEX3Tgfvk&lt;br /&gt;&amp;amp;state=af0ifjsldkj&lt;/span&gt;&lt;/blockquote&gt;
In OAuth 2.0 the reply doesn't contain any identifying information about who sent it.&lt;br /&gt;
The client needs to lookup the information for state that it stored in a cookie or someplace else to know who the issuer is and verify that the request to the Authorization server came from it and not via XSRF, logging the user in via a iframe in the background.&lt;br /&gt;
&lt;br /&gt;
Once the client knows who the issuer is they send the code and there client secret to the issuer's Token Endpoint via a direct request from the server.&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;POST /token HTTP/1.1&lt;br /&gt;Host: server.example.com&lt;br /&gt;Content-Type: application/x-www-form-urlencoded&lt;br /&gt;Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW&lt;br /&gt;grant_type=authorization_code&amp;amp;code=SplxlOBeZQQYbYS6WxSbIA&lt;br /&gt;&amp;amp;redirect_uri=https%3A%2F%2Fclient.example.com%2Fcb&lt;/span&gt;&lt;/blockquote&gt;
This is standard OAuth 2.0 nothing custom.&lt;br /&gt;
&lt;br /&gt;
The response if the http basic authentication of the client_id and client_password are correct is:&lt;br /&gt;
&lt;blockquote&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;HTTP/1.1 200 OK&lt;br /&gt;Content-Type: application/json&lt;br /&gt;Cache-Control: no-store&lt;br /&gt;Pragma: no-cache&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;"access_token": "SlAV32hkKG",&lt;br /&gt;&amp;nbsp;"token_type": "Bearer",&lt;br /&gt;&amp;nbsp;"refresh_token": "8xLOxBtZp8",&lt;br /&gt;&amp;nbsp;"expires_in": 3600,&lt;br /&gt;&amp;nbsp;"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOl&lt;br /&gt;wvXC9zZXJ2ZXIuZXhhbXBsZS5jb20iLCJ1c2VyX2lkIjoiMjQ4Mjg5NzYxMDAxIiwiYXVkIj&lt;br /&gt;oiaHR0cDpcL1wvY2xpZW50LmV4YW1wbGUuY29tIiwiZXhwIjoxMzExMjgxOTcwfQ.eDesUD0&lt;br /&gt;vzDH3T1G3liaTNOrfaeWYjuRCEPNXVtaazNQ"&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;
This is a standard OAuth response with the addition of a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;id_token&lt;/span&gt; that we are going to ignore for our simple example. (The id_token is a signed token containing the user_id and other authentication information)&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/-G6bVKIuPCWA/TzFNMLq2SzI/AAAAAAAAACo/Gvqjc-a77hk/s1600/connect+user-info+request.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="452" src="http://3.bp.blogspot.com/-G6bVKIuPCWA/TzFNMLq2SzI/AAAAAAAAACo/Gvqjc-a77hk/s640/connect+user-info+request.jpg" 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;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Diagram by Amanda Anganes (mitre.org)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Once I get my access token I can make a API request to the User Info Endpoint.&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;GET /userinfo?schema=openid HTTP/1.1&lt;br /&gt;Host: server.example.com&lt;br /&gt;Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJ ... fQ.8Gj_-sj ... _X&lt;/span&gt;&lt;/blockquote&gt;
The &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;schema=openid&lt;/span&gt; parameter allows this to be added to existing endpoints that may use different schema by default. &amp;nbsp;It is a fixed parameter that can be hard coded.&lt;br /&gt;
&lt;br /&gt;
The response is going to be:&lt;br /&gt;
&lt;blockquote&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;HTTP/1.1 200 OK&lt;br /&gt;Content-Type: application/json&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;"user_id": "248289761001",&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;
You now have the &amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;user_id&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;and know the issuer so can look the user up and long them in.&lt;br /&gt;
&lt;br /&gt;
If I had also asked for the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;profile&lt;/span&gt;&amp;nbsp;and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;email&lt;/span&gt; scopes and the user had granted access my response would look like:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;HTTP/1.1 200 OK&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Content-Type: application/json&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; "user_id": "248289761001",&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; "name": "Jane Doe"&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; "given_name": "Jane",&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; "family_name": "Doe",&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; "email": "janedoe@example.com",&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; "picture": "http://example.com/janedoe/me.jpg"&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/blockquote&gt;
So would this work with Facebook? &lt;br /&gt;
&lt;br /&gt;
No but mostly because Facebook is not supporting the current draft of &lt;a href="http://tools.ietf.org/html/draft-ietf-oauth-v2" target="_blank"&gt;OAuth 2.0&lt;/a&gt; and &lt;a href="http://tools.ietf.org/html/draft-ietf-oauth-v2-bearer" target="_blank"&gt;OAuth Bearer Token&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
However if they updated there version of OAuth it would work with only changes to the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;scope&lt;/span&gt; asked for and substituting the appropriate endpoint URI.&lt;br /&gt;
&lt;br /&gt;
If we do the same example with the Facebook version of OAuth it would look like:&lt;br /&gt;
&lt;br /&gt;
Authorization Request:&lt;br /&gt;
&lt;div&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;HTTP/1.1 302 Found&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Location: https://www.facebook.com/dialog/oauth?&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;response_type=code&lt;br /&gt;&amp;amp;client_id=s6BhdRkqt3&lt;br /&gt;&amp;amp;redirect_uri=https%3A%2F%2Fclient.example.com%2Fcb&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Difference from Connect - Facebook is not supporting state, so lack XSRF protection and force clients to have a different redirect_uri for each provider. &amp;nbsp;It is not a problem for them as they assume only one identity provider. &amp;nbsp;Sending no &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;scope&lt;/span&gt;&amp;nbsp;asks for a basket of default public claims including &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;user_id&lt;/span&gt;. &amp;nbsp; If you want email or address you need to include a request for those &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;scope&lt;/span&gt; in the same way as Connect.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Authorization Response:&lt;/div&gt;
&lt;div&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;HTTP/1.1 302 Found&lt;br /&gt;Location: https://client.example.com/cb?&lt;br /&gt;code=Qcb0Orv1zh30vL1MPRsbm-diHiMwcLyZvn1arpZv-Jxf_11jnpEX3Tgfvk&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Difference from Connect - Facebook is not supporting state.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Access Token Request:&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;https://graph.facebook.com/oauth/access_token?&lt;br /&gt; client_id=s6BhdRkqt3&lt;br /&gt;&amp;amp;redirect_uri=https%3A%2F%2Fclient.example.com%2Fcb&lt;br /&gt;&amp;amp;client_secret=YOUR_APP_SECRET&lt;br /&gt; &amp;amp;code=Qcb0Orv1zh30vL1MPRsbm-diHiMwcLyZvn1arpZv-Jxf_11jnpEX3Tgfvk&lt;/span&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Difference from Connect - Facebook is passing the client secret as a query parameter in a GET, This is not allowed in OAuth 2.0 it MUST be sent as HTTP Basic authentication or in the form body of a post to keep it from leaking. &amp;nbsp;Other than the OAuth difference the request is exactly the same.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Access Token Response:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;HTTP/1.1 200 OK&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Cache-Control: no-store&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Pragma: no-cache&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;access_token=SlAV32hkKG&amp;amp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;expires_in=5108&lt;/span&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Difference from Connect - Honestly I don't know where they came up with URL encoding the response in the body. &amp;nbsp; It has never been in OAuth 2.0 as far as I can tell. &amp;nbsp;They are not returning the token type, it is just so wrong. &amp;nbsp; It is the same info just in a wacky format missing some required parameters.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Graph API/Protected resource Request:&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; https://graph.facebook.com/me?access_token=ACCESS_TOKEN&lt;/span&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Difference from Connect - Facebook is passing the access token as a query parameter in a GET. &amp;nbsp;Another security no-no highly discouraged by OAuth &lt;a href="http://tools.ietf.org/html/draft-ietf-oauth-v2-bearer-15#page-7" target="_blank"&gt;(See sec 2.3)&lt;/a&gt;. &amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Graph API/Protected Resource Response:&lt;/div&gt;
&lt;blockquote&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;HTTP/1.1 200 OK&lt;br /&gt;Content-Type: application/json&lt;br /&gt;{&lt;br /&gt; "id": "614345449",&lt;br /&gt; "name": "John Bradley",&lt;br /&gt; "first_name": "John",&lt;br /&gt; "last_name": "Bradley",&lt;br /&gt; "link": "https://www.facebook.com/ve7jtb",&lt;br /&gt; "username": "ve7jtb",&lt;br /&gt; "gender": "male",&lt;br /&gt; "locale": "en_GB"&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Difference from Connect - Facebook is returning more info by default, though it is all public by there definition. &amp;nbsp;Small difference in schema. &amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
The Differences are not that large and mostly related to OAuth itself.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This is a very limited set of features. &amp;nbsp; For a real protocol we need to support Java Script clients in the browser, session management, fast login without a second network call.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I will put together another post on how Connect builds on top of OAuth to securely add these missing features.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
John B.&lt;br /&gt;
&lt;a href="https://twitter.com/#!/ve7jtb/" target="_blank"&gt;@ve7jtb&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-437778161152425309?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=9SkJ6D70GZo:1LB9bFfdWwY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=9SkJ6D70GZo:1LB9bFfdWwY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=9SkJ6D70GZo:1LB9bFfdWwY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=9SkJ6D70GZo:1LB9bFfdWwY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=9SkJ6D70GZo:1LB9bFfdWwY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=9SkJ6D70GZo:1LB9bFfdWwY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/437778161152425309/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2012/01/solutions-for-using-oauth-20-for.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/437778161152425309?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/437778161152425309?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/9SkJ6D70GZo/solutions-for-using-oauth-20-for.html" title="Solutions for using OAuth 2.0 for Authentication" /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-Jx2hfNCn5Nk/TzFMx2CuyhI/AAAAAAAAACg/0hL5k6N57kQ/s72-c/connect+code+flow.jpg" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Isla de Maipo, Santiago Metropolitan Region, Chile</georss:featurename><georss:point>-33.746456 -70.9</georss:point><georss:box>-33.8520825 -71.0579285 -33.6408295 -70.74207150000001</georss:box><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2012/01/solutions-for-using-oauth-20-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcFRXc_fSp7ImA9WhRbFk4.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-6382247507094074451</id><published>2012-01-28T17:53:00.000-03:00</published><updated>2012-02-07T13:26:54.945-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-07T13:26:54.945-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid" /><category scheme="http://www.blogger.com/atom/ns#" term="identity" /><category scheme="http://www.blogger.com/atom/ns#" term="openid connect" /><category scheme="http://www.blogger.com/atom/ns#" term="oauth" /><title>The problem with OAuth for Authentication.</title><content type="html">I want to thank Nat Sakimura for doing a &lt;a href="http://www.sakimura.org/2012/02/1487/" target="_blank"&gt;version of this post in Japanese&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
In some of the feedback I have gotten on the openID Connect spec, the statement is made that Connect is too complicated. &amp;nbsp; That OAuth 2.0 is all you need to do authentication.&lt;br /&gt;
&lt;br /&gt;
Many point to Identity Providers like Facebook to prove there point. &lt;br /&gt;
&lt;br /&gt;
The problem is that OAuth 2.0 is a Delegated Authorization protocol, and not a Authentication protocol.&lt;br /&gt;
This is generally a four party model &amp;nbsp;User, &amp;nbsp;Website, &amp;nbsp;Authorization server, and Protected resource.&lt;br /&gt;
&lt;br /&gt;
This leads people to make what turn out to be very bad security decisions around authentication when they follow the basic OAuth flow.&lt;br /&gt;
&lt;br /&gt;
Part of this is due to the activities being quite different. &amp;nbsp;OAuth provides an access token to a client, so that it can access a protected resource, based on the permission of the resource owner.&lt;br /&gt;
&lt;br /&gt;
I am going to use Facebook as my example, they are not the only ones to use this pattern, but they are the best well known, so make a easy target.(Sorry guys)&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/-94wKvhZfIBg/TzFQpiboMsI/AAAAAAAAACw/5tR2IeI4wGo/s1600/OAuth2-2.0_Diagrams+token+grant.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="452" src="http://3.bp.blogspot.com/-94wKvhZfIBg/TzFQpiboMsI/AAAAAAAAACw/5tR2IeI4wGo/s640/OAuth2-2.0_Diagrams+token+grant.jpg" 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;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Diagram by Amanda Anganes (mitre.org)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
In the Facebook Connect case:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;The Website (client in OAuth speak) redirects the user to Facebook asking for access to the users portion of the Facebook Graph API endpoint.&lt;/li&gt;
&lt;li&gt;Facebook gets the users Authorization to give that access.&lt;/li&gt;
&lt;li&gt;Facebook then redirects the user back to the client passing an access token in the URL fragment.&lt;/li&gt;
&lt;li&gt;The client performs a GET on the Facebook API endpoint using the access token from step 3.&lt;/li&gt;
&lt;li&gt;The Graph API endpoint returns a JSON object that contains a Facebook &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;user_id&lt;/span&gt; and other public and perhaps private information based on what access the user granted.&lt;/li&gt;
&lt;li&gt;The Website logs in user in as the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;user_id&lt;/span&gt; from the Graph API endpoint.&lt;/li&gt;
&lt;/ol&gt;
The advantage to this is that anyone can read the instructions on the &lt;a href="http://developers.facebook.com/docs/authentication/" target="_blank"&gt;Facebook Developers Page&lt;/a&gt;&amp;nbsp;and make there website a client.&lt;br /&gt;
&lt;br /&gt;
The disadvantage is that they have no security. &amp;nbsp;Not to put too fine a point on it, &lt;b&gt;they have not Authenticated the User.&lt;/b&gt;&amp;nbsp; They have gotten delegated access to the users information.&lt;br /&gt;
&lt;br /&gt;
Now I know many of you are thinking John is just being overly dramatic. &amp;nbsp;This is just a semantic difference that is only important to obsessives. &amp;nbsp;That may be true, but in this case the difference leads to security holes that even Facebook recognizes and attempts to address in there code if not there documentation.&lt;br /&gt;
&lt;br /&gt;
The problem is that the motivations of the participants are different between Authentication and Authorization. &amp;nbsp;In the authorization case the client can be trusted with the access token because it has no real motivation to share it. &amp;nbsp;They could give it to a third party and also grant them access to the information(protected resource), but they can just share the information anyway if they are bad.&lt;br /&gt;
&lt;br /&gt;
In the above Facebook example there is a naive expectation that the access token is coming from the resource owner. &amp;nbsp;Now in the Facebook case that is true only at the original token issuance.&lt;br /&gt;
The user is handing over access tokens all the time to Websites who use those tokens to access the Facebook Graph API.&lt;br /&gt;
&lt;br /&gt;
The hard reality is that people go to questionable websites. &amp;nbsp;One of the things people do at those sites is use Facebook, openID or Twitter to login. &amp;nbsp;This avoids sharing there email and password with the site.&lt;br /&gt;
&lt;br /&gt;
The problem is that in the authentication case Websites do have a motivation to inappropriately reuse the access token. &amp;nbsp; The token is no longer just for accessing the protected resource, it now carries with it the implicit notion that the possessor is the resource owner. &lt;br /&gt;
&lt;br /&gt;
So we wind up in the situation where any site the user loges into with there Facebook account can impersonate that user at any other site that accepts Facebook logins through the &lt;a href="https://developers.facebook.com/docs/authentication/#client-side-flow" target="_blank"&gt;Client-side Flow&lt;/a&gt;(the default for Facebook). &amp;nbsp;The less common &lt;a href="https://developers.facebook.com/docs/authentication/#server-side-flow" target="_blank"&gt;Server-side Flow&lt;/a&gt;&amp;nbsp;is more secure, but more complicated.&lt;br /&gt;
&lt;br /&gt;
The attack really is quite trivial once you have a access token for the given user, you can cut and paste it into a authorization response in the browser.&lt;br /&gt;
&lt;br /&gt;
Some people believe that using the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;state&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;parameter in OAuth protects against token substitution.&lt;br /&gt;
The only binding a browser cookie to state protects against is Cross Site Scripting. &amp;nbsp; In the attack I am proposing the client generates a legitimate request to a bad user agent that captures it and provides a response that includes &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;state&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;unchanged from the request.&lt;/span&gt; There is nothing in the OAuth client-side flow that proves the issuer you sent the request to through the browser ever received it and is the one responding. &amp;nbsp;Only the access_token parameter is generated by the Authorization server, all the other parameters are dropped or echoed back. &amp;nbsp; The client has no way to tell who the authorization server thought it was issuing that &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;access_token&lt;/span&gt; to.&lt;br /&gt;
&lt;br /&gt;
This is a security hole that you can drive a house through. &amp;nbsp; As long as you don't have anything worth protecting at the Client websites it works OK, however OpenID Connect needs to address more than the simple no security use case.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.sakimura.org/wp-content/uploads/2012/02/big-hole1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://www.sakimura.org/wp-content/uploads/2012/02/big-hole1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Traditionally authentication involves three parties User, Relying party Web Site, and Authentication server. &amp;nbsp;The Authentication server produces some sort of token/assertion for the consumption of the Relying Party (RP). &amp;nbsp;This assertion in &lt;a href="http://openid.net/specs/openid-authentication-2_0.html" target="_blank"&gt;OpenID 2.0&lt;/a&gt; and &lt;a href="http://saml.xml.org/saml-specifications" target="_blank"&gt;SAML 2.0&lt;/a&gt; contain a way to identify who (what RP) the token was created for. &amp;nbsp;The RP only accepts tokens addressed to it. &amp;nbsp;This prevents RP's and others from replaying tokens at different RP.&lt;br /&gt;
&lt;br /&gt;
In OAuth the token is intended for the consumption of the protected resource, and intentionally opaque to the client (RP). &amp;nbsp;The RP has no way to tell from the token if it was generated for it or another RP. &lt;br /&gt;
&lt;br /&gt;
You could say the audience for the OAuth token is the protected resource and the audience for a authentication token is the RP. &amp;nbsp; They are not the same endpoint!&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;How is Connect Different from plain OAuth?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
We needed to add the appropriate security and semantics for authentication without compromising OAuth's functionality as a Authorization protocol.&lt;br /&gt;
&lt;br /&gt;
One idea we explored was adding a audience claim to the protected resource(User Info Endpoint).&lt;br /&gt;
This requires communicating the OAuth &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;client_id&lt;/span&gt; from the authorization endpoint to the protected resource. &amp;nbsp;The biggest problem is that the RP is required to do a network operation in the background to get the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;user_id&lt;/span&gt; before logging the user in. &lt;br /&gt;
&lt;br /&gt;
Many RP including Facebook stated that the extra latency in the network round trip was unacceptable.&lt;br /&gt;
&lt;br /&gt;
Now you are thinking how can that be if that is way Facebook is doing?&lt;br /&gt;
&lt;br /&gt;
Well it turns out that they have some undocumented enhancements to get around the latency issue.&lt;br /&gt;
They are using something they call &lt;a href="https://developers.facebook.com/docs/authentication/signed_request/" target="_blank"&gt;signed-request&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
The idea is that they are encapsulating the OAuth &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;code&lt;/span&gt; token inside a "signed" JSON object.&lt;br /&gt;
&lt;br /&gt;
The SDK they provide is looking for &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;user_id&lt;/span&gt; in the signed request and using that to log the user in before doing any back channel OAuth requests.  This provides an implicit audience restriction by the client verifying a symmetric client password used to generate a HMAC over the token.&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
To be clear Facebook is NOT using the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;signed_request&lt;/span&gt; as the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;access_token&lt;/span&gt; they are extracting code  from the signed_request and exchanging that for a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;access_token&lt;/span&gt; at the Token Endpoint.&lt;br /&gt;
&lt;br /&gt;
One thing &lt;a href="http://tools.ietf.org/html/draft-ietf-oauth-v2"&gt;OAuth 2.0&lt;/a&gt; allows is defining new Response Types.  Based on &lt;a href="http://openid.bitbucket.org/oauth-v2-multiple-response-types-1_0.html"&gt;OAuth 2.0 Multiple Response Type Encoding Practices&lt;/a&gt; by Google and Facebook, we decided to use a separate &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;id_token&lt;/span&gt; parameter in the response rather than overload the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;access_token&lt;/span&gt;.  That allows the tokens to have separate audience restrictions and formats.  Facebook is doing the same thing but are using &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;signed_request&lt;/span&gt; rather than &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;id_token&lt;/span&gt; as the response type.  We both return the extra token fragment encoded win an additional parameter, in Facebooks case &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;signed_request&lt;/span&gt; and in openID's &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;id_token&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Connect documents having two tokens one for authentication and one for delegated access to protected resources.   Facebook's documentation on this could use some improvements.&lt;br /&gt;
&lt;br /&gt;
Connect is also using a proposed IETF standard for &lt;a href="http://www.blogger.com/goog_1840417246"&gt;Javascript Object Signing and Encryption &lt;/a&gt;&lt;a href="http://tools.ietf.org/id/draft-ietf-jose"&gt;(JOSE)&lt;/a&gt; rather than proprietary method.  We hope that the availability of standard libraries will improve security, and reduce developer effort.&lt;br /&gt;
&lt;br /&gt;
Connect has had to take into consideration that RP will be dealing with multiple Identity Providers, unlike single provider protocols.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
When creating a protocol there is always a balance that is struck between having a single tool that is flexible vs multiple highly optimized ones.  I don't think having each identity provider deploy there own incompatible identity layer on top of OAuth is good for RP or adoption.   We came up with a compromise that is not optimized to only serve a single use case, though we have made the simple social login use case no more complicated for the RP than Facebook Connect.&lt;br /&gt;
&lt;br /&gt;
Many of the optional features for higher security and distributed claims will only be used by those sites that need them,  however it will give a clear migration path for sites starting with social login.&lt;br /&gt;
&lt;br /&gt;
The specification looks a bit scary because for interoperability reasons we need to document the server side.  Nat's blogpost on &lt;a href="http://nat.sakimura.org/2012/01/20/openid-connect-nutshell/"&gt;OpenID Connect in a Nutshell&lt;/a&gt; lays out how simple it is for a RP to implement.&lt;br /&gt;
&lt;br /&gt;
I hope this helps explain some of the value that Connect brings to OAuth.&lt;br /&gt;
&lt;br /&gt;
John B.&lt;br /&gt;
&lt;h1 class="title entry-title" style="color: #333333; display: table-cell; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 40px; padding-top: 0px; text-align: left; vertical-align: middle; width: 670px;"&gt;





















&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif; font-size: small;"&gt;&lt;a href="https://twitter.com/#!/ve7jtb/" target="_blank"&gt;@ve7jtb&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-6382247507094074451?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=KFQNx2baQVw:Lx3lb8jV2yI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=KFQNx2baQVw:Lx3lb8jV2yI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=KFQNx2baQVw:Lx3lb8jV2yI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=KFQNx2baQVw:Lx3lb8jV2yI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=KFQNx2baQVw:Lx3lb8jV2yI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=KFQNx2baQVw:Lx3lb8jV2yI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/6382247507094074451/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2012/01/problem-with-oauth-for-authentication.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/6382247507094074451?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/6382247507094074451?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/KFQNx2baQVw/problem-with-oauth-for-authentication.html" title="The problem with OAuth for Authentication." /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-94wKvhZfIBg/TzFQpiboMsI/AAAAAAAAACw/5tR2IeI4wGo/s72-c/OAuth2-2.0_Diagrams+token+grant.jpg" height="72" width="72" /><thr:total>6</thr:total><georss:featurename>Isla de Maipo, Santiago Metropolitan Region, Chile</georss:featurename><georss:point>-33.746456 -70.9</georss:point><georss:box>-33.8520825 -71.0579285 -33.6408295 -70.74207150000001</georss:box><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2012/01/problem-with-oauth-for-authentication.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ANSXk8eip7ImA9WhRbFEg.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-2604782247661009140</id><published>2012-01-26T14:10:00.000-03:00</published><updated>2012-02-05T11:23:18.772-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-05T11:23:18.772-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid" /><category scheme="http://www.blogger.com/atom/ns#" term="openid connect" /><title>OpenID Connect Scopes and Claims</title><content type="html">We have had a number of people wanting more information on the use of scopes and claims in openID connect.&lt;br /&gt;
&lt;br /&gt;
Nat Sakimura has put together a &lt;a href="http://nat.sakimura.org/2012/01/26/scopes-and-claims-in-openid-connect/" target="_blank"&gt;blog post &lt;/a&gt;explaining some of of the details.&lt;br /&gt;
&lt;br /&gt;
I am starting to see more people coming up with ways to use the aggregated and distributed clams functionality of &lt;a href="http://openid.net/connect/" target="_blank"&gt;Connect&lt;/a&gt; to solve there use cases.&lt;br /&gt;
&lt;br /&gt;
John B.&lt;br /&gt;
&lt;a href="https://twitter.com/#!/ve7jtb/" target="_blank"&gt;@ve7jtb&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-2604782247661009140?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=sW8Ntc-mvy8:oZZqbmtPWh0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=sW8Ntc-mvy8:oZZqbmtPWh0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=sW8Ntc-mvy8:oZZqbmtPWh0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=sW8Ntc-mvy8:oZZqbmtPWh0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=sW8Ntc-mvy8:oZZqbmtPWh0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=sW8Ntc-mvy8:oZZqbmtPWh0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/2604782247661009140/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2012/01/openid-connect-scopes-and-claims.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/2604782247661009140?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/2604782247661009140?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/sW8Ntc-mvy8/openid-connect-scopes-and-claims.html" title="OpenID Connect Scopes and Claims" /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Isla de Maipo, Santiago Metropolitan Region, Chile</georss:featurename><georss:point>-33.746456 -70.9</georss:point><georss:box>-33.8520825 -71.0579285 -33.6408295 -70.74207150000001</georss:box><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2012/01/openid-connect-scopes-and-claims.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08GQH09cSp7ImA9WhRbFEg.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-4558668722896979555</id><published>2012-01-26T11:01:00.003-03:00</published><updated>2012-02-05T11:23:41.369-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-05T11:23:41.369-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="identity" /><category scheme="http://www.blogger.com/atom/ns#" term="oauth" /><title>Facebook diverges from OAuth 2.0 Specification</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;Currently the method for OAuth clients to get access to the Facebook graph API while the user is not logged in (to the client), is to ask for a special scope of offline-access.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;If the user grants permission the access token will not expire until the user explicitly removes the permission for the client.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;a href="https://developers.facebook.com/docs/offline-access-deprecation/" target="_blank"&gt;Facebook has announced&lt;/a&gt; that this feature is changing.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: Helvetica;"&gt;
It looks like they are modifying there token endpoint for extending access tokens rather than using refresh tokens.&lt;/div&gt;
&lt;div style="font-family: Helvetica;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: Helvetica;"&gt;
My read of it is that developers will now get offline access without asking. &amp;nbsp;They just need to refresh the access token every 60 days. &amp;nbsp;&lt;/div&gt;
&lt;div style="font-family: Helvetica;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: Helvetica;"&gt;
The documentation is typical of Facebook so the actual operation may be different.&amp;nbsp;&lt;/div&gt;
&lt;div style="font-family: Helvetica;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: Helvetica;"&gt;
Using the 'code token' return type with a refresh token would have been OAuth 2.0 compliant.&lt;/div&gt;
&lt;div style="font-family: Helvetica;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: Helvetica;"&gt;
They seem to have decided to extend OAuth 2.0 in a custom way rather than using a core feature.&lt;/div&gt;
&lt;div style="font-family: Helvetica;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: Helvetica;"&gt;
I expect the media may jump on the privacy issue.&lt;/div&gt;
&lt;div style="font-family: Helvetica;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: Helvetica;"&gt;
This may also be part of the normal strategy of announcing something then balking off if people &amp;nbsp;object.&lt;/div&gt;
&lt;div style="font-family: Helvetica;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: Helvetica;"&gt;
I am philosophical about Facebooks privacy. &amp;nbsp;My real concern with this is the divergence from the OAuth 2.0 specification.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
John B.&lt;br /&gt;
&lt;a href="https://twitter.com/#!/ve7jtb/" target="_blank"&gt;@ve7jtb&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-4558668722896979555?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=w_caNzeraYE:sRGTNlGBalk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=w_caNzeraYE:sRGTNlGBalk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=w_caNzeraYE:sRGTNlGBalk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=w_caNzeraYE:sRGTNlGBalk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=w_caNzeraYE:sRGTNlGBalk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=w_caNzeraYE:sRGTNlGBalk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/4558668722896979555/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2012/01/facebook-diverges-from-oauth-20.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/4558668722896979555?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/4558668722896979555?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/w_caNzeraYE/facebook-diverges-from-oauth-20.html" title="Facebook diverges from OAuth 2.0 Specification" /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Isla de Maipo, Santiago Metropolitan Region, Chile</georss:featurename><georss:point>-33.746456 -70.9</georss:point><georss:box>-33.8520825 -71.0579285 -33.6408295 -70.74207150000001</georss:box><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2012/01/facebook-diverges-from-oauth-20.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08BR308eSp7ImA9WhRbFEg.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-7295575605245038811</id><published>2012-01-24T23:41:00.001-03:00</published><updated>2012-02-05T11:24:16.371-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-05T11:24:16.371-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid" /><category scheme="http://www.blogger.com/atom/ns#" term="identity" /><category scheme="http://www.blogger.com/atom/ns#" term="openid connect" /><title>OpenID Connect in a Nutshell</title><content type="html">&lt;br /&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;a href="http://nat.sakimura.org/" style="color: blue; text-decoration: underline;"&gt;Nat Sakimura&lt;/a&gt;&amp;nbsp;has written a valuable post describing&amp;nbsp;&lt;a href="http://nat.sakimura.org/2012/01/20/openid-connect-nutshell/" style="color: blue; text-decoration: underline;"&gt;OpenID Connect in a nutshell&lt;/a&gt;.&amp;nbsp; It shows by example how simple it is for relying parties to use basic&amp;nbsp;&lt;a href="http://openid.net/connect/" style="color: blue; text-decoration: underline;"&gt;OpenID Connect&lt;/a&gt;&amp;nbsp;functionality.&amp;nbsp; If you’re involved in OpenID Connect in any way, or are considering becoming involved, his post is well worth reading.&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
John B.&lt;br /&gt;
&lt;a href="https://twitter.com/#!/ve7jtb/" target="_blank"&gt;@ve7jtb&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-7295575605245038811?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=pXOhtKIzk7I:UfiSwkQZpq8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=pXOhtKIzk7I:UfiSwkQZpq8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=pXOhtKIzk7I:UfiSwkQZpq8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=pXOhtKIzk7I:UfiSwkQZpq8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=pXOhtKIzk7I:UfiSwkQZpq8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=pXOhtKIzk7I:UfiSwkQZpq8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/7295575605245038811/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2012/01/openid-connect-in-nutshell.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/7295575605245038811?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/7295575605245038811?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/pXOhtKIzk7I/openid-connect-in-nutshell.html" title="OpenID Connect in a Nutshell" /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Isla de Maipo, Santiago Metropolitan Region, Chile</georss:featurename><georss:point>-33.746456 -70.9</georss:point><georss:box>-33.8520825 -71.0579285 -33.6408295 -70.74207150000001</georss:box><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2012/01/openid-connect-in-nutshell.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IDQ3o7fSp7ImA9WhRbFEg.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-1804401496573172809</id><published>2012-01-19T13:33:00.000-03:00</published><updated>2012-02-05T11:19:32.405-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-05T11:19:32.405-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid" /><category scheme="http://www.blogger.com/atom/ns#" term="FICAM" /><category scheme="http://www.blogger.com/atom/ns#" term="SAML" /><category scheme="http://www.blogger.com/atom/ns#" term="openid connect" /><title>FICAM SAML 2.0 Web SSO Profile updated</title><content type="html">The updated version of &lt;a href="http://csrc.nist.gov/publications/nistpubs/800-63-1/SP-800-63-1.pdf" target="_blank"&gt;SP-800-63-1&lt;/a&gt; is official as of Dec 2011.&lt;br /&gt;
&lt;br /&gt;
The &lt;a href="http://www.idmanagement.gov/documents/SAML20_Web_SSO_Profile.pdf" target="_blank"&gt;FICAM SAML 2.0 Web SSO Profile&lt;/a&gt;&amp;nbsp;has been updated to reflect some clarifications.&lt;br /&gt;
&lt;br /&gt;
The major change is that SAML assertions using the POST binding are no longer required to be encrypted, as long as all of the endpoints are using TLS.&lt;br /&gt;
&lt;br /&gt;
The relevant section 9.2.1 from&amp;nbsp;&lt;a href="http://csrc.nist.gov/publications/nistpubs/800-63-1/SP-800-63-1.pdf" target="_blank"&gt;SP-800-63-1&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="section"&gt;
&lt;div class="layoutArea"&gt;
&lt;div class="column"&gt;
&lt;ul style="list-style-type: disc;"&gt;
&lt;li style="font-family: 'SymbolMT'; font-size: 12.000000pt;"&gt;
       &lt;span style="font-family: TimesNewRomanPS; font-size: 12pt; font-style: italic;"&gt;Secondary authenticator capture &lt;/span&gt;&lt;span style="font-family: TimesNewRomanPSMT; font-size: 12pt;"&gt;– To mitigate this threat, adequate
protections shall be in place throughout the lifetime of any secondary
authenticators used in the assertion protocol.
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: TimesNewRomanPSMT; font-size: 12pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;

       &lt;ol style="list-style-type: decimal;"&gt;
&lt;li style="font-family: 'TimesNewRomanPSMT'; font-size: 12.000000pt;"&gt;
         &lt;span style="font-family: TimesNewRomanPSMT; font-size: 12pt;"&gt;In order to protect the secondary authenticator while it is in transit
between the Verifier and the Subscriber, the secondary authenticator shall
be sent via a protected session established during the primary
authentication of the Subscriber using his or her token. This requirement is
the same as the requirement in Section 8, regarding the Authentication
Process, to protect sensitive data (in this case the secondary authenticator)
from session hijacking attacks.
&lt;/span&gt;&lt;br /&gt;

        &lt;/li&gt;
&lt;li style="font-family: 'TimesNewRomanPSMT'; font-size: 12.000000pt;"&gt;
         &lt;span style="font-family: TimesNewRomanPSMT; font-size: 12pt;"&gt;In order to protect the secondary authenticator from capture as it is
submitted to the RP, the secondary authenticator shall be used in an
authentication protocol which protects against eavesdropping and man-in-
the-middle attacks as described in Section 8.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
There is a second factor with respect to XML encryption to consider here as well.&lt;br /&gt;
&lt;br /&gt;
The commonly &lt;a href="http://www.nds.rub.de/media/nds/veroeffentlichungen/2011/10/22/HowToBreakXMLenc.pdf" target="_blank"&gt;AES-CBC encryption is susceptible to a padding oracle attack&lt;/a&gt;.&lt;br /&gt;
In most SAML implementations without additionally signing and verifying the message, the assertion can be decrypted by an attacker.&lt;br /&gt;
&lt;br /&gt;
Perhaps the more interesting aspect to this change, is that the lack of end to end encryption through the browser was the main reason openID 2.0 was limited to only LoA 1.&lt;br /&gt;
&lt;br /&gt;
At some point FICAM may decide to revisit the existing &lt;a href="http://www.idmanagement.gov/documents/ICAM_OpenID20Profile.pdf" target="_blank"&gt;openID 2.0 profile&lt;/a&gt; and allow it to be used at LoA 2. &lt;br /&gt;
&lt;br /&gt;
I think that the &lt;a href="http://openid.net/specs/openid-connect-basic-1_0.html" target="_blank"&gt;openID Connect Basic client profile&lt;/a&gt;&amp;nbsp; now meets all of the revised requirements for LoA 2 as long as the RP is using TLS. &amp;nbsp; With a very small update it could also be suitable for LoA 3.&lt;br /&gt;
&lt;br /&gt;
The full &lt;a href="http://openid.net/specs/openid-connect-standard-1_0.html" target="_blank"&gt;openID Connect spec&lt;/a&gt; supports end to end encryption with integrity that is not susceptible to the padding oracle attack. &amp;nbsp;It was designed to support profiles with the highest security and privacy requirements.&lt;br /&gt;
&lt;br /&gt;
As a start updating the openID profile would encourage openID providers to start looking at Identity proofing and the other LoA 2 issues as they start planning there migrations to Connect.&lt;br /&gt;
&lt;br /&gt;
John B.&lt;br /&gt;
&lt;a href="https://twitter.com/#!/ve7jtb/" target="_blank"&gt;@ve7jtb&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-1804401496573172809?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=0UafPl_eNqc:a6-CAQ0wQeI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=0UafPl_eNqc:a6-CAQ0wQeI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=0UafPl_eNqc:a6-CAQ0wQeI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=0UafPl_eNqc:a6-CAQ0wQeI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=0UafPl_eNqc:a6-CAQ0wQeI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=0UafPl_eNqc:a6-CAQ0wQeI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/1804401496573172809/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2012/01/ficam-saml-20-web-sso-profile-updated.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/1804401496573172809?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/1804401496573172809?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/0UafPl_eNqc/ficam-saml-20-web-sso-profile-updated.html" title="FICAM SAML 2.0 Web SSO Profile updated" /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Isla de Maipo, Santiago Metropolitan Region, Chile</georss:featurename><georss:point>-33.746456 -70.9</georss:point><georss:box>-33.8520825 -71.0579285 -33.6408295 -70.74207150000001</georss:box><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2012/01/ficam-saml-20-web-sso-profile-updated.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YCRng7fyp7ImA9WhRVGE4.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-4566706633396421980</id><published>2012-01-17T17:12:00.003-03:00</published><updated>2012-01-17T17:12:47.607-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-17T17:12:47.607-03:00</app:edited><title>Javascript Object Signing and Encryption (jose)</title><content type="html">The initial drafts of &lt;a href="http://datatracker.ietf.org/wg/jose/" target="_blank"&gt;JOSE&lt;/a&gt; are posted to the IETF WG.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;They are refactored from the previous individual submission versions to move algorithms and identifiers into a separate specification, per the&amp;nbsp;&lt;a href="http://datatracker.ietf.org/wg/jose/charter/" style="color: blue; text-decoration: underline;"&gt;working group charter&lt;/a&gt;.&amp;nbsp; Also, per the working group’s input, the terminology usage has been changed to no longer call both digital signatures and HMACs “signatures”. &amp;nbsp;The JOSE versions contain no normative changes from the individual submission versions.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;John B.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-4566706633396421980?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=iQo6yds_ATA:y-QMEd7janE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=iQo6yds_ATA:y-QMEd7janE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=iQo6yds_ATA:y-QMEd7janE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=iQo6yds_ATA:y-QMEd7janE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=iQo6yds_ATA:y-QMEd7janE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=iQo6yds_ATA:y-QMEd7janE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/4566706633396421980/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2012/01/javascript-object-signing-and.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/4566706633396421980?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/4566706633396421980?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/iQo6yds_ATA/javascript-object-signing-and.html" title="Javascript Object Signing and Encryption (jose)" /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2012/01/javascript-object-signing-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QHQXYzeCp7ImA9WhRWF00.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-11781075103467136</id><published>2012-01-04T17:34:00.004-03:00</published><updated>2012-01-04T17:35:30.880-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-04T17:35:30.880-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid" /><title>openID Board Elections 2012</title><content type="html">Please run if you are interested and a member.&lt;br /&gt;
&lt;br /&gt;
If you are not a member please join.&lt;br /&gt;
&lt;br /&gt;
I am hoping that we can at least maintain or increase our European representation.&lt;br /&gt;
&lt;br /&gt;
The &lt;a href="http://openid.net/2012/01/03/openid-foundation-2012-community-board-member-election/" target="_blank"&gt;official announcement&lt;/a&gt; is on the OIDF site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-11781075103467136?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=MnuAYSj_n8c:qJtupRpiLhU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=MnuAYSj_n8c:qJtupRpiLhU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=MnuAYSj_n8c:qJtupRpiLhU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=MnuAYSj_n8c:qJtupRpiLhU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=MnuAYSj_n8c:qJtupRpiLhU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=MnuAYSj_n8c:qJtupRpiLhU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/11781075103467136/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2012/01/openid-board-elections-2012.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/11781075103467136?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/11781075103467136?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/MnuAYSj_n8c/openid-board-elections-2012.html" title="openID Board Elections 2012" /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2012/01/openid-board-elections-2012.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AGR3syfyp7ImA9WhRWEEQ.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-1635533561386720521</id><published>2011-12-28T13:56:00.000-03:00</published><updated>2011-12-28T14:02:06.597-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-28T14:02:06.597-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid" /><category scheme="http://www.blogger.com/atom/ns#" term="LOA" /><category scheme="http://www.blogger.com/atom/ns#" term="identity" /><category scheme="http://www.blogger.com/atom/ns#" term="openid connect" /><title>LoA Registry</title><content type="html">This is the registry that we reference from the Connect specs for registering Authentication Context Class References (acr) short names in &lt;a href="http://openid.net/specs/openid-connect-messages-1_0.html#id_token" target="_blank"&gt;Sec 2.1.1 of Connect Messages&lt;/a&gt;.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;A new version of I-D, draft-johansson-loa-registry-03.txt has been&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;successfully submitted by Leif Johansson and posted to the IETF&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;repository.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;Filename:&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;a href="http://tools.ietf.org/html/draft-johansson-loa-registry-03" target="_blank"&gt;draft-johansson-loa-registry&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;Revision:&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;03&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;Title:&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;An IANA registry for Level of Assurance Profiles&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;Creation date:&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;2011-12-29&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;WG ID:&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;Individual Submission&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;Number of pages: 7&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;Abstract:&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&amp;nbsp;&amp;nbsp;This document establishes an IANA registry for Level of Assurance&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&amp;nbsp;&amp;nbsp;Profiles. &amp;nbsp;The registry is intended to be used as an aid to&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&amp;nbsp;&amp;nbsp;discovering such LoA definitions in protocols that use an LoA&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&amp;nbsp;&amp;nbsp;concept, including SAML 2.0 and OpenID Connect.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-1635533561386720521?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=cnuVoYSaSlY:IlBasNPB6GE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=cnuVoYSaSlY:IlBasNPB6GE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=cnuVoYSaSlY:IlBasNPB6GE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=cnuVoYSaSlY:IlBasNPB6GE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=cnuVoYSaSlY:IlBasNPB6GE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=cnuVoYSaSlY:IlBasNPB6GE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/1635533561386720521/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2011/12/loa-registry.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/1635533561386720521?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/1635533561386720521?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/cnuVoYSaSlY/loa-registry.html" title="LoA Registry" /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Granja Educativa, Isla de Maipo, Santiago Metropolitan Region, Chile</georss:featurename><georss:point>-33.71006108273973 -70.87417602539062</georss:point><georss:box>-33.76289158273973 -70.95314002539062 -33.65723058273973 -70.79521202539063</georss:box><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2011/12/loa-registry.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04BSX47eCp7ImA9WhRXFkk.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-574849510582517441</id><published>2011-12-23T11:13:00.001-03:00</published><updated>2011-12-23T11:19:18.000-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-23T11:19:18.000-03:00</app:edited><title>Connect Implementers Draft</title><content type="html">After many months of work, review and test implementations by people from around the world, we are moving on to the next step in the openID specification process.&lt;br /&gt;
&lt;br /&gt;
Today we have published the final specification documents for the Implementers Draft of Connect 1.0.&lt;br /&gt;
&lt;br /&gt;
This will let us have a couple of days off over Christmas while the members who have not been actively tracking the spec give it a good read. &amp;nbsp;Think of it as a Christmas present:)&lt;br /&gt;
&lt;br /&gt;
The 45 day public review period ends Feb 6, 2012.&lt;br /&gt;
&lt;br /&gt;
Unless serious issues are identified, there will be full membership vote on the Implementers Draft starting immediately after the review period closes. This vote serves to lock in the IPR contributions of all of the Work Group participants. &lt;br /&gt;
&lt;br /&gt;
This is not the final specification. &amp;nbsp;There may be changes as a result of the implementations and interoperability testing feedback, before the final version of the Specification is put to a membership vote later in 2012.&lt;br /&gt;
&lt;br /&gt;
If you want to vote in the upcoming board election and for or against the Implementers Draft, you can join the &lt;a href="http://openid.net/foundation/" target="_blank"&gt;Open ID Foundation&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The following is the official announcement from the Connect Working Group.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Subject:&amp;nbsp; Review of Proposed OpenID Connect Implementer’s Drafts&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;The OpenID AB+Connect Working Group recommends approval of the following specifications as OpenID Implementer’s Drafts:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;•&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Basic Client Profile – Simple self-contained specification for a web-based Relying Party.&amp;nbsp; (This spec contains a subset of the information in Messages and Standard.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;•&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Discovery – Defines how user and provider endpoints can be dynamically discovered.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;•&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Dynamic Registration – Defines how clients can dynamically register with OpenID Providers.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;•&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Messages – Defines all the messages that are used in OpenID Connect.&amp;nbsp; (These messages are used by the Standard binding.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;•&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Standard – Complete HTTP binding of the Messages, for both Relying Parties and OpenID Providers.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;•&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Multiple Response Type Encoding – Registers OAuth 2.0 response_type values used by OpenID Connect.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;An Implementer’s Draft is a stable version of a specification providing intellectual property protections to implementers of the specification.&amp;nbsp; This note starts the 45 days public review period for the specification drafts in accordance with the OpenID Foundation IPR policies and procedures.&amp;nbsp; This review period will end on Monday, February 6, 2012.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Unless issues are identified during the review that the working group believes must be addressed by revising the drafts, this review period will be followed by a seven day voting period during which OpenID Foundation members will vote on whether to approve these drafts as OpenID Implementer’s Drafts.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;The specifications are posted at these locations:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;•&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;a href="http://openid.net/specs/openid-connect-basic-1_0-15.html" style="color: blue; text-decoration: underline;"&gt;http://openid.net/specs/openid-connect-basic-1_0-15.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;•&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;a href="http://openid.net/specs/openid-connect-discovery-1_0-07.html" style="color: blue; text-decoration: underline;"&gt;http://openid.net/specs/openid-connect-discovery-1_0-07.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;•&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;a href="http://openid.net/specs/openid-connect-registration-1_0-08.html" style="color: blue; text-decoration: underline;"&gt;http://openid.net/specs/openid-connect-registration-1_0-08.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;•&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;a href="http://openid.net/specs/openid-connect-messages-1_0-07.html" style="color: blue; text-decoration: underline;"&gt;http://openid.net/specs/openid-connect-messages-1_0-07.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;•&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;a href="http://openid.net/specs/openid-connect-standard-1_0-07.html" style="color: blue; text-decoration: underline;"&gt;http://openid.net/specs/openid-connect-standard-1_0-07.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;•&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;a href="http://openid.net/specs/oauth-v2-multiple-response-types-1_0-03.html" style="color: blue; text-decoration: underline;"&gt;http://openid.net/specs/oauth-v2-multiple-response-types-1_0-03.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;A description of OpenID Connect can be found at&amp;nbsp;&lt;a href="http://openid.net/connect/" style="color: blue; text-decoration: underline;"&gt;http://openid.net/connect/&lt;/a&gt;. The working group page is&lt;a href="http://openid.net/wg/connect/" style="color: blue; text-decoration: underline;"&gt;http://openid.net/wg/connect/&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Information on joining the OpenID Foundation can be found at&amp;nbsp;&lt;a href="https://openid.net/foundation/members/registration" style="color: blue; text-decoration: underline;"&gt;https://openid.net/foundation/members/registration&lt;/a&gt;.&amp;nbsp; Foundation members will be asked to vote on approving these specifications as Implementer’s Drafts.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;You can send feedback on the specifications in a way that enables the working group to act on your feedback by (1) signing the contribution agreement at&amp;nbsp;&lt;a href="http://openid.net/intellectual-property/" style="color: blue; text-decoration: underline;"&gt;http://openid.net/intellectual-property/&lt;/a&gt;&amp;nbsp;to join the AB+Connect working group, (2) joining the working group mailing list at&amp;nbsp;&lt;a href="http://lists.openid.net/mailman/listinfo/openid-specs-ab" style="color: blue; text-decoration: underline;"&gt;http://lists.openid.net/mailman/listinfo/openid-specs-ab&lt;/a&gt;, and (3) sending your feedback on that list.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-574849510582517441?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=Y7rjrgJYR6M:CCiQ7qy5Mt4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=Y7rjrgJYR6M:CCiQ7qy5Mt4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=Y7rjrgJYR6M:CCiQ7qy5Mt4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=Y7rjrgJYR6M:CCiQ7qy5Mt4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=Y7rjrgJYR6M:CCiQ7qy5Mt4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=Y7rjrgJYR6M:CCiQ7qy5Mt4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/574849510582517441/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2011/12/connect-implementers-draft.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/574849510582517441?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/574849510582517441?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/Y7rjrgJYR6M/connect-implementers-draft.html" title="Connect Implementers Draft" /><author><name>John Bradley</name><uri>https://profiles.google.com/113758384073095653585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-1sJGlVoHT68/AAAAAAAAAAI/AAAAAAAAABY/rJ6sSi8Ds2w/s512-c/photo.jpg" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2011/12/connect-implementers-draft.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMASHY_fSp7ImA9WhRTEkg.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-6743973073491505700</id><published>2011-11-02T12:52:00.000-03:00</published><updated>2011-11-02T15:27:29.845-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-02T15:27:29.845-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid" /><category scheme="http://www.blogger.com/atom/ns#" term="openid connect" /><title>OpenID Connect,  A tale of two Tokens</title><content type="html">&lt;span class="Apple-style-span"&gt;I keep getting the question "Why are there two tokens in&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;a href="http://openid.net/connect/" target="_blank"&gt;openID Connect&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;?"&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
There were a number of design requirements that we had going into the specification process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1 - A requirement from RP (Relying Parties) is quick customization and display of the user interface after login.&lt;br /&gt;
&lt;ol&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;They required sub second response to the user. &amp;nbsp;This did not allow for a additional round trip to the IdP to get the userID. &amp;nbsp;Adding multi second delays above a password authentication is not deployable for many of them.&lt;/li&gt;
&lt;li&gt;Facebook is using &lt;a href="http://developers.facebook.com/docs/authentication/signed_request/" target="_blank"&gt;signed request&lt;/a&gt; to pass the userid in the response, the client verifies the signature, and can immediately display the user interface.&lt;/li&gt;
&lt;/ul&gt;
2 - Salesforce and other IdP have existing user-info endpoints and other protected resources that they want to add as scopes to the access token.&lt;br /&gt;
&lt;ol&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;A requirement is to not break existing implementations by forcing them to use a different access token format.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
3 - T-Mobile and others pass signed tokens to there endpoints containing there scopes.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;A requirement is to be able to only pass the required info in the token to the protected resource. &amp;nbsp;That resource may be controlled by a 3rd party so sending the user_id may be leaking privacy information.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
4 - Google and others had a requirement that Connect support multiple client types especialy Ajax in the browser.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
5 - Everyone agreed that you can't step the user through multiple authorizations one for each resource.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
We know that to meet requirement 1 we need to send a signed token with the user_id in it to the RP, and it needs to be in the response from the Authorization server.&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span"&gt;So we need a&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;id_token&lt;/span&gt;&lt;span class="Apple-style-span"&gt;. &amp;nbsp; Facebook has a proprietary format called&amp;nbsp;&lt;a href="http://developers.facebook.com/docs/authentication/signed_request/" target="_blank"&gt;signed request&lt;/a&gt;&amp;nbsp;, We worked with the community to come up with &lt;a href="http://tools.ietf.org/html/draft-jones-json-web-token" target="_blank"&gt;JWT&lt;/a&gt; a more general purpose open standard similar to&amp;nbsp;&lt;a href="http://developers.facebook.com/docs/authentication/signed_request/" target="_blank"&gt;signed request&lt;/a&gt;&amp;nbsp;but also supporting encryption.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
One of the ways&amp;nbsp;&lt;a href="http://tools.ietf.org/html/draft-ietf-oauth-v2" target="_blank"&gt;OAuth 2.0&lt;/a&gt;&amp;nbsp;&amp;nbsp;deals with creating multiple tokens for different protected resources is down-scoping. &amp;nbsp;You ask for multiple scopes in the authorization request, perhaps one for each resource.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
The Authorization server then gives you Refresh Token good for all of the scopes. &amp;nbsp;You then go back to the token endpoint and ask for a new token with only some of the scopes.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Down scoping has some issues, but the big one is that it is only available with the code flow and that violates requirements 1 and &amp;nbsp;4.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
That leaves us with several options:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Using the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;id_token&lt;/span&gt; as the access token.&lt;/li&gt;
&lt;li&gt;Including a&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small; white-space: pre;"&gt;access_token&lt;/span&gt;&amp;nbsp;in the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;id_token&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;Returning two tokens&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Using the id_token as the access token breaks requirement 2, as well as creating some additional security concerns about storing something that may be a long-lived access token in the browser as a session cookie.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span"&gt;Including the access token in the&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;id_token&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&amp;nbsp;is the route that Facebook Connect chose. &amp;nbsp;That works for requirements 1, and &amp;nbsp;2. &amp;nbsp; It also has some problems if the RP wants to use the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;id_token&lt;/span&gt; for session management. &amp;nbsp;You wind up with long lived access tokens embedded in session cookies. &amp;nbsp;The&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;id_token&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&amp;nbsp;also get quite large. &amp;nbsp;This accomplishes 3, in that the&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small; white-space: pre;"&gt;access_token&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&amp;nbsp;is not carrying extra user information.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Returning two tokens in the response from the authorization server meets all of the requirements. &amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;The information about the authenticated user is kept separate from the access token.&lt;/li&gt;
&lt;li&gt;The size of the&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;id_token&lt;/span&gt;&amp;nbsp;can be much smaller.&lt;/li&gt;
&lt;li&gt;If the id_token is used as a session cookie, no access token is leaked.&lt;/li&gt;
&lt;li&gt;The&amp;nbsp;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;access_token&lt;/span&gt;&lt;/span&gt;&amp;nbsp;can be a signed token as well including only the required information.&lt;/li&gt;
&lt;li&gt;We still have all of the down-scoping options available when using the code flow.&lt;/li&gt;
&lt;li&gt;The&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;id_token &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;can be bound to th&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;e lifetime of the user session, separating it from the lifetime of the&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small; white-space: pre;"&gt;access_token.&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The audience for the two tokens can be separate, and it makes encrypting them for there respective audiences simpler.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span class="Apple-style-span"&gt;Typically a RP using the implicit &lt;a href="http://tools.ietf.org/html/draft-ietf-oauth-v2" target="_blank"&gt;OAuth 2.0&lt;/a&gt;&amp;nbsp;flow will get the&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;id_token&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&amp;nbsp;in the response from the Authorization server to there registered redirect endpoint. &amp;nbsp;They then validate the signature and use the included user_id to customize the web page, while they make an additional&amp;nbsp;&lt;a href="http://tools.ietf.org/html/draft-ietf-oauth-v2" target="_blank"&gt;OAuth 2.0&lt;/a&gt;&amp;nbsp;authenticated request to the user_info endpoint if required. &amp;nbsp; This allows returning users to be logged in quickly from there perspective. &amp;nbsp;A new user will have a small rely before the profile information is retrieved.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span"&gt;There are a number of new OAuth 2.0&amp;nbsp;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;response_type&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;that openID Connect is registering for &lt;/span&gt;&lt;/span&gt;&lt;a href="http://tools.ietf.org/html/draft-ietf-oauth-v2" target="_blank"&gt;OAuth 2.0&lt;/a&gt;, &amp;nbsp;these will allow several options on how the tokens are returned to fit the varied client requirements. &amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span"&gt;We are also working on a session management and single logout extension that leverages the&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;id_token.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
As perhaps partial validation of having a separate token the &lt;a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=security" target="_blank"&gt;SAML WG&lt;/a&gt; at &lt;a href="http://www.oasis-open.org/" target="_blank"&gt;OASIS&lt;/a&gt;&amp;nbsp;has a &lt;a href="http://www.oasis-open.org/committees/document.php?document_id=43741&amp;amp;wg_abbrev=security" target="_blank"&gt;session token profile&lt;/a&gt; in public review currently.&lt;br /&gt;
&lt;br /&gt;
While a single token seems tempting there are overwhelming reasons it won't work for many of our use cases. &amp;nbsp; I was the one who argued for the single&amp;nbsp;&lt;a href="http://tools.ietf.org/html/draft-jones-json-web-token" target="_blank"&gt;JWT&lt;/a&gt;&amp;nbsp;token and lost.&lt;br /&gt;
&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span"&gt;I will do a post on the&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; white-space: pre;"&gt;response_type &lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://openid.net/connect/" target="_blank"&gt;openID Connect&lt;/a&gt; soon.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
John B.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-6743973073491505700?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=ZYzM41G0MIk:UGKnRNT2CWg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=ZYzM41G0MIk:UGKnRNT2CWg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=ZYzM41G0MIk:UGKnRNT2CWg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=ZYzM41G0MIk:UGKnRNT2CWg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=ZYzM41G0MIk:UGKnRNT2CWg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=ZYzM41G0MIk:UGKnRNT2CWg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/6743973073491505700/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2011/11/openid-connect-tale-of-two-tokens.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/6743973073491505700?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/6743973073491505700?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/ZYzM41G0MIk/openid-connect-tale-of-two-tokens.html" title="OpenID Connect,  A tale of two Tokens" /><author><name>ve7jtb</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://4.bp.blogspot.com/-b_KH64Z2rJA/TlQa2V14UNI/AAAAAAAAAyo/guUsw3jKoL0/s220/image001.jpg" /></author><thr:total>0</thr:total><georss:featurename>El Castillo, Isla de Maipo, Santiago Metropolitan Region, Chile</georss:featurename><georss:point>-33.70645536605906 -70.88494777679443</georss:point><georss:box>-33.70975786605906 -70.88988327679444 -33.703152866059064 -70.88001227679443</georss:box><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2011/11/openid-connect-tale-of-two-tokens.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMNQ3cyfSp7ImA9WhRTEkk.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-603947696597732921</id><published>2011-10-31T21:22:00.000-03:00</published><updated>2011-11-02T11:01:32.995-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-02T11:01:32.995-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid" /><title>Updated JWT and related specs posted</title><content type="html">&lt;br /&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
We have posted updated versions of the&amp;nbsp;&lt;a href="http://self-issued.info/docs/draft-jones-json-web-token.html" style="color: blue; text-decoration: underline;"&gt;JSON Web Token (JWT)&lt;/a&gt;,&amp;nbsp;&lt;a href="http://self-issued.info/docs/draft-jones-json-web-signature.html" style="color: blue; text-decoration: underline;"&gt;JSON Web Signature (JWS)&lt;/a&gt;,&amp;nbsp;&lt;a href="http://self-issued.info/docs/draft-jones-json-web-encryption.html" style="color: blue; text-decoration: underline;"&gt;JSON Web Encryption (JWE)&lt;/a&gt;, and&amp;nbsp;&lt;a href="http://self-issued.info/docs/draft-jones-json-web-key.html" style="color: blue; text-decoration: underline;"&gt;JSON Web Key (JWK)&lt;/a&gt;&amp;nbsp;specifications.&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;i&gt;No changes should be required to any existing deployments as a result of these updates.&lt;/i&gt;&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
These are used by openID Connect.&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
The primary thrust of these changes was updating the JWT spec to describe how to create and process encrypted JWTs.&amp;nbsp; (The previous JWT spec pre-dated publication of the JWE spec.)&amp;nbsp; I also removed duplicate content from the JWT spec describing the steps to sign JWTs and instead simply referenced it in the JWS spec.&amp;nbsp; Numerous suggestions on improving the specifications from the WOES and JOSE lists were also incorporated. &amp;nbsp;The changelog entries are as follows:&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div style="font-family: 'Times New Roman', serif; font-size: 12pt; margin-left: 24pt; margin-right: 24pt;"&gt;
&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 11pt;"&gt;&lt;a href="http://self-issued.info/docs/draft-jones-json-web-token-06.html" style="color: blue; text-decoration: underline;"&gt;draft-jones-json-web-token-06&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 60pt; margin-right: 24pt; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span lang="EN" style="color: black; font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 10pt;"&gt;Reference and use content from&amp;nbsp;&lt;a href="http://self-issued.info/docs/draft-jones-json-web-token.html#JWS" style="color: blue; text-decoration: underline;"&gt;&lt;span style="text-decoration: none;"&gt;[JWS]&lt;/span&gt;&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://self-issued.info/docs/draft-jones-json-web-token.html#JWE" style="color: blue; text-decoration: underline;"&gt;&lt;span style="text-decoration: none;"&gt;[JWE]&lt;/span&gt;&lt;/a&gt;, rather than repeating it here.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 60pt; margin-right: 24pt; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span lang="EN" style="color: black; font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 10pt;"&gt;Simplified terminology to better match JWE, where the terms "JWT Header" and "Encoded JWT Header" are now used, for instance, rather than the previous terms "Decoded JWT Header Segment" and "JWT Header Segment". Also changed to "Plaintext JWT" from "Unsigned JWT".&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 60pt; margin-right: 24pt; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span lang="EN" style="color: black; font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 10pt;"&gt;Describe how to perform nested encryption and signing operations.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 60pt; margin-right: 24pt; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span lang="EN" style="color: black; font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 10pt;"&gt;Changed "integer" to "number", since that is the correct JSON type.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 60pt; margin-right: 24pt; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span lang="EN" style="color: black; font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 10pt;"&gt;Changed StringAndURI to StringOrURI.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: 'Times New Roman', serif; font-size: 12pt; margin-left: 24pt; margin-right: 24pt;"&gt;
&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 11pt;"&gt;&lt;a href="http://self-issued.info/docs/draft-jones-json-web-signature-03.html" style="color: blue; text-decoration: underline;"&gt;draft-jones-json-web-signature-03&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 60pt; margin-right: 24pt; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span lang="EN" style="color: black; font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 10pt;"&gt;Simplified terminology to better match JWE, where the terms "JWS Header" and "Encoded JWS Header", are now used, for instance, rather than the previous terms "Decoded JWS Header Input" and "JWS Header Input". Likewise the terms "JWS Payload" and "JWS Signature" are now used, rather than "JWS Payload Input" and "JWS Crypto Output".&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 60pt; margin-right: 24pt; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span lang="EN" style="color: black; font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 10pt;"&gt;The jku and x5u URLs are now required to be absolute URLs.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 60pt; margin-right: 24pt; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span lang="EN" style="color: black; font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 10pt;"&gt;Removed this unnecessary language from the kid description: "Omitting this parameter is equivalent to setting it to an empty string".&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 60pt; margin-right: 24pt; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span lang="EN" style="color: black; font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 10pt;"&gt;Changed StringAndURI to StringOrURI.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: 'Times New Roman', serif; font-size: 12pt; margin-left: 24pt; margin-right: 24pt;"&gt;
&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 11pt;"&gt;&lt;a href="http://self-issued.info/docs/draft-jones-json-web-encryption-01.html" style="color: blue; text-decoration: underline;"&gt;draft-jones-json-web-encryption-01&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 60pt; margin-right: 24pt; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span lang="EN" style="color: black; font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 10pt;"&gt;Changed type of Ephemeral Public Key (epk) from string to JSON object, so that a JWK Key Object value can be used directly.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 60pt; margin-right: 24pt; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span lang="EN" style="color: black; font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 10pt;"&gt;Specified that the Digest Method for ECDH-ES is SHA-256. (The specification was previously silent about the choice of digest method.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 60pt; margin-right: 24pt; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span lang="EN" style="color: black; font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 10pt;"&gt;The jku and x5u URLs are now required to be absolute URLs.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 60pt; margin-right: 24pt; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span lang="EN" style="color: black; font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 10pt;"&gt;Removed this unnecessary language from the kid description: "Omitting this parameter is equivalent to setting it to an empty string".&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 60pt; margin-right: 24pt; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span lang="EN" style="color: black; font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 10pt;"&gt;Use the same language as RFC 2616 does when describing GZIP message compression.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: 'Times New Roman', serif; font-size: 12pt; margin-left: 24pt; margin-right: 24pt;"&gt;
&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 11pt;"&gt;&lt;a href="http://self-issued.info/docs/draft-jones-json-web-key-02.html" style="color: blue; text-decoration: underline;"&gt;draft-jones-json-web-key-02&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 60pt; margin-right: 24pt; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span lang="EN" style="color: black; font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="color: black; font-family: Verdana, sans-serif; font-size: 10pt;"&gt;Editorial changes to have this spec better match the JWT, JWS, and JWE specs. No normative changes.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
The specs are available in the standard places.&amp;nbsp; The HTML versions can be found at these locations:&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tools.ietf.org/html/draft-jones-json-web-token-06" style="color: blue; text-decoration: underline;"&gt;http://tools.ietf.org/html/draft-jones-json-web-token-06&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tools.ietf.org/html/draft-jones-json-web-signature-03" style="color: blue; text-decoration: underline;"&gt;http://tools.ietf.org/html/draft-jones-json-web-signature-03&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tools.ietf.org/html/draft-jones-json-web-encryption-01" style="color: blue; text-decoration: underline;"&gt;http://tools.ietf.org/html/draft-jones-json-web-encryption-01&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tools.ietf.org/html/draft-jones-json-web-key-02" style="color: blue; text-decoration: underline;"&gt;http://tools.ietf.org/html/draft-jones-json-web-key-02&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://self-issued.info/docs/draft-jones-json-web-token-06.html" style="color: blue; text-decoration: underline;"&gt;http://self-issued.info/docs/draft-jones-json-web-token-06.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://self-issued.info/docs/draft-jones-json-web-signature-03.html" style="color: blue; text-decoration: underline;"&gt;http://self-issued.info/docs/draft-jones-json-web-signature-03.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://self-issued.info/docs/draft-jones-json-web-encryption-01.html" style="color: blue; text-decoration: underline;"&gt;http://self-issued.info/docs/draft-jones-json-web-encryption-01.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoListParagraph" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in; text-indent: -0.25in;"&gt;
&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://self-issued.info/docs/draft-jones-json-web-key-02.html" style="color: blue; text-decoration: underline;"&gt;http://self-issued.info/docs/draft-jones-json-web-key-02.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-603947696597732921?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=l6rNutsaoWc:KHjGPpG6E6M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=l6rNutsaoWc:KHjGPpG6E6M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=l6rNutsaoWc:KHjGPpG6E6M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=l6rNutsaoWc:KHjGPpG6E6M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=l6rNutsaoWc:KHjGPpG6E6M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=l6rNutsaoWc:KHjGPpG6E6M:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/603947696597732921/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2011/10/mike-jones-has-posted-updated-versions.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/603947696597732921?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/603947696597732921?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/l6rNutsaoWc/mike-jones-has-posted-updated-versions.html" title="Updated JWT and related specs posted" /><author><name>ve7jtb</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://4.bp.blogspot.com/-b_KH64Z2rJA/TlQa2V14UNI/AAAAAAAAAyo/guUsw3jKoL0/s220/image001.jpg" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2011/10/mike-jones-has-posted-updated-versions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MFRH44fCp7ImA9WhdUF0k.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-353948622844717419</id><published>2011-10-04T12:12:00.000-03:00</published><updated>2011-10-04T12:16:55.034-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-04T12:16:55.034-03:00</app:edited><title>GÉANT Federation Lab &amp; OpenID Connect</title><content type="html">&lt;br /&gt;
&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
GÉANT Federation Lab is&amp;nbsp;working on adding OpenID Connect support.&lt;/div&gt;
&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
This is a sneak preview of parts of the user interface.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://3.gvt0.com/vi/c1B-g51SIxM/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/c1B-g51SIxM&amp;fs=1&amp;source=uds" /&gt;



&lt;param name="bgcolor" value="#FFFFFF" /&gt;



&lt;embed width="420" height="266"  src="http://www.youtube.com/v/c1B-g51SIxM&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
Longer video of beta interface for Federation Lab.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://1.gvt0.com/vi/AZ_8j3Ma4Jk/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/AZ_8j3Ma4Jk&amp;fs=1&amp;source=uds" /&gt;



&lt;param name="bgcolor" value="#FFFFFF" /&gt;



&lt;embed width="420" height="266"  src="http://www.youtube.com/v/AZ_8j3Ma4Jk&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-353948622844717419?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=AzrrNeLnW_4:aE9-T98qjq8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=AzrrNeLnW_4:aE9-T98qjq8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=AzrrNeLnW_4:aE9-T98qjq8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=AzrrNeLnW_4:aE9-T98qjq8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=AzrrNeLnW_4:aE9-T98qjq8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=AzrrNeLnW_4:aE9-T98qjq8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/353948622844717419/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2011/10/geant-federation-lab-is-on-adding.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/353948622844717419?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/353948622844717419?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/AzrrNeLnW_4/geant-federation-lab-is-on-adding.html" title="GÉANT Federation Lab &amp; OpenID Connect" /><author><name>ve7jtb</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://4.bp.blogspot.com/-b_KH64Z2rJA/TlQa2V14UNI/AAAAAAAAAyo/guUsw3jKoL0/s220/image001.jpg" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2011/10/geant-federation-lab-is-on-adding.html</feedburner:origLink></entry><entry><title type="text">Links for 2011-09-13 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/Btf9vUmuyes/ve7jtb" /><updated>2011-09-14T00:00:00-07:00</updated><id>http://del.icio.us/ve7jtb#2011-09-13</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://cloud-identity.blogspot.com/2010/12/open-source-identity-management.html"&gt;Cloud Security: Open Source Identity Management Software&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/ve7jtb#2011-09-13</feedburner:origLink></entry><entry><title type="text">Links for 2011-09-10 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/cxKDpputWZw/ve7jtb" /><updated>2011-09-11T00:00:00-07:00</updated><id>http://del.icio.us/ve7jtb#2011-09-10</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://cloud-identity.blogspot.com/2010/12/open-source-identity-management.html"&gt;Cloud Security: Open Source Identity Management Software&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/ve7jtb#2011-09-10</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cNRX8yeyp7ImA9WhdXE0o.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-5839149073580754878</id><published>2011-08-26T12:04:00.001-03:00</published><updated>2011-08-26T12:04:54.193-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-26T12:04:54.193-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid" /><title>Account Chooser</title><content type="html">&lt;div style="font-family: Helvetica;"&gt;&lt;div&gt;Eric Sachs just published a website at&amp;nbsp;&lt;a href="http://accountchooser.com/" target="_blank"&gt;accountchooser.com&lt;/a&gt;&amp;nbsp;as an initial proposal for an account chooser user interface. &amp;nbsp;It includes a first draft of suggested UI guidelines at&amp;nbsp;&lt;a href="http://accountchooser.com/ux.html" target="_blank"&gt;http://accountchooser.com/ux.html&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;The&amp;nbsp;next step is to create a formal OpenID working group to further refine those user interface specifications. &amp;nbsp;See the draft charter at:&lt;/div&gt;&lt;div&gt;&lt;a href="https://sites.google.com/site/oauthgoog/workinggroupcharter" target="_blank"&gt;https://sites.google.com/site/oauthgoog/workinggroupcharter&lt;/a&gt;&lt;/div&gt;&lt;blockquote style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0px; margin-left: 40px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-5839149073580754878?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=6xEhcj7LvEc:aymhiRKd2sU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=6xEhcj7LvEc:aymhiRKd2sU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=6xEhcj7LvEc:aymhiRKd2sU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=6xEhcj7LvEc:aymhiRKd2sU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=6xEhcj7LvEc:aymhiRKd2sU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=6xEhcj7LvEc:aymhiRKd2sU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/5839149073580754878/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2011/08/account-chooser.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/5839149073580754878?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/5839149073580754878?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/6xEhcj7LvEc/account-chooser.html" title="Account Chooser" /><author><name>ve7jtb</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://4.bp.blogspot.com/-b_KH64Z2rJA/TlQa2V14UNI/AAAAAAAAAyo/guUsw3jKoL0/s220/image001.jpg" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2011/08/account-chooser.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8FSXc5eSp7ImA9WhdXEk0.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-7312127954505707584</id><published>2011-08-24T13:53:00.000-03:00</published><updated>2011-08-24T13:53:38.921-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-24T13:53:38.921-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid" /><title>OpenID Connect Nonce</title><content type="html">Question:&lt;br /&gt;
I cannot find a good description of the purpose of the nonce parameter. I believe there can be more than one answer to that.&amp;nbsp;Is the provider expected to not accept nonce values that have been used in the past?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;The nonce ties the session to the issued id_token. &lt;br /&gt;
&lt;br /&gt;
The RP generates the nonce. &lt;br /&gt;
&lt;br /&gt;
The IdP MUST return the nonce unchanged as the value of the id_token "nonce" parameter.&lt;br /&gt;
The IdP MUST NOT reject duplicates.&lt;br /&gt;
&lt;br /&gt;
The OAuth state parameter not being signed in the response is designed to stop XSRF, but not other cut and paste attacks that might happen in the the browser.&lt;br /&gt;
&lt;br /&gt;
As a RP/ Web Server Client, I would use a hash of the session cookie as the nonce and state value.&lt;br /&gt;
&lt;br /&gt;
That way when I get the id_token in ether the fragment via the implicit flow or from the token endpoint in the code flow, I can bind the session to the id_token in a way that is not the result of a cut and paste attack in the browser using a stolen token.&lt;br /&gt;
&lt;br /&gt;
The reason for the IdP to not reject duplicate nonce is that it might legitimately be a second request bound to an existing session.&lt;br /&gt;
&lt;br /&gt;
I will try and clarify that in the spec.&lt;br /&gt;
&lt;br /&gt;
Mind you this only protects SSL RP as if you can fire sheep someones session you would also get the session cookie. (Non SSL RP over open wireless are not possible to protect)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-7312127954505707584?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=lGc0A5pN9Ns:avUvyptlz4s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=lGc0A5pN9Ns:avUvyptlz4s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=lGc0A5pN9Ns:avUvyptlz4s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=lGc0A5pN9Ns:avUvyptlz4s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=lGc0A5pN9Ns:avUvyptlz4s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=lGc0A5pN9Ns:avUvyptlz4s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/7312127954505707584/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2011/08/openid-connect-nonce.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/7312127954505707584?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/7312127954505707584?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/lGc0A5pN9Ns/openid-connect-nonce.html" title="OpenID Connect Nonce" /><author><name>ve7jtb</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://4.bp.blogspot.com/-b_KH64Z2rJA/TlQa2V14UNI/AAAAAAAAAyo/guUsw3jKoL0/s220/image001.jpg" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2011/08/openid-connect-nonce.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYGQXY9eyp7ImA9WhdXEU4.&quot;"><id>tag:blogger.com,1999:blog-2234555082540809604.post-6829683637708611273</id><published>2011-08-23T19:22:00.000-03:00</published><updated>2011-08-23T19:22:00.863-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-23T19:22:00.863-03:00</app:edited><title>Old Blog</title><content type="html">My old blogposts are available at&amp;nbsp;&lt;a href="http://thread-safe.livejournal.com/"&gt;http://thread-safe.livejournal.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I am too lazy to figure out how to move them over.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2234555082540809604-6829683637708611273?l=www.thread-safe.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=K7JPlOL_AAs:66f1dHjmgr8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=K7JPlOL_AAs:66f1dHjmgr8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=K7JPlOL_AAs:66f1dHjmgr8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=K7JPlOL_AAs:66f1dHjmgr8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?i=K7JPlOL_AAs:66f1dHjmgr8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Thread-Safe?a=K7JPlOL_AAs:66f1dHjmgr8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Thread-Safe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thread-safe.com/feeds/6829683637708611273/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thread-safe.com/2011/08/old-blog.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/6829683637708611273?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2234555082540809604/posts/default/6829683637708611273?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/K7JPlOL_AAs/old-blog.html" title="Old Blog" /><author><name>ve7jtb</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://4.bp.blogspot.com/-b_KH64Z2rJA/TlQa2V14UNI/AAAAAAAAAyo/guUsw3jKoL0/s220/image001.jpg" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><feedburner:origLink>http://www.thread-safe.com/2011/08/old-blog.html</feedburner:origLink></entry><entry><title type="text">Links for 2011-04-26 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/jREnLDZnBcc/ve7jtb" /><updated>2011-04-27T00:00:00-07:00</updated><id>http://del.icio.us/ve7jtb#2011-04-26</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://corp.galois.com/blog/2011/1/5/quick-authentication-using-mobile-devices-and-qr-codes.html"&gt;Galois, Inc - Galois Blog - Quick authentication using mobile devices and QR&amp;nbsp;Codes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/ve7jtb#2011-04-26</feedburner:origLink></entry><entry><title type="text">Links for 2011-03-03 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/u2P_ioYoV9w/ve7jtb" /><updated>2011-03-04T00:00:00-08:00</updated><id>http://del.icio.us/ve7jtb#2011-03-03</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.cato-at-liberty.org/terror-arrest-does-not-justify-real-id-revival/"&gt;Terror Arrest Does Not Justify REAL ID Revival | Cato @ Liberty&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/ve7jtb#2011-03-03</feedburner:origLink></entry><entry><title type="text">Links for 2011-01-12 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/DBnUDjpp4bs/ve7jtb" /><updated>2011-01-13T00:00:00-08:00</updated><id>http://del.icio.us/ve7jtb#2011-01-12</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.huffingtonpost.com/susan-landau/post_1538_b_806394.html"&gt;Susan Landau: NIST Leads the Charge on Online Authentication&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/ve7jtb#2011-01-12</feedburner:origLink></entry><entry><title type="text">Links for 2010-09-14 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/brnrg7S0rdI/ve7jtb" /><updated>2010-09-15T00:00:00-07:00</updated><id>http://del.icio.us/ve7jtb#2010-09-14</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.barcode.com/Latest/mobio-uses-barcodes-to-enhance-game-day.html"&gt;Mobio Uses Barcodes to Enhance Game-Day | Latest&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/ve7jtb#2010-09-14</feedburner:origLink></entry><entry><title type="text">Links for 2010-08-25 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thread-Safe/~3/VccbRwfzcRo/ve7jtb" /><updated>2010-08-26T00:00:00-07:00</updated><id>http://del.icio.us/ve7jtb#2010-08-25</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://rnd.feide.no/simplesaml/module.php/saml2debug/debug.php"&gt;SAML 2.0 Debugger&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/ve7jtb#2010-08-25</feedburner:origLink></entry></feed>

