{"id":686,"date":"2007-02-18T17:45:43","date_gmt":"2007-02-19T01:45:43","guid":{"rendered":"\/?p=686"},"modified":"2007-02-18T18:08:56","modified_gmt":"2007-02-19T02:08:56","slug":"what-is-meant-by-token-independence","status":"publish","type":"post","link":"https:\/\/www.identityblog.com\/?p=686","title":{"rendered":"What is meant by &#8220;token independence&#8221;?"},"content":{"rendered":"<p>I don&#39;t want to get sidetracked into a discussion of the nuances&nbsp;the SAML protocol&nbsp;and token independence, but&nbsp;imagine readers will want me to share&nbsp;a comment by&nbsp;Scott Cantor&nbsp;&#8211;&nbsp;one of the principal creators of Shibboleth.&nbsp; He knows&nbsp;something about&nbsp;SAML too &#8211; since he&nbsp;was the editor of the Version 2.0 spec.&nbsp; He is responding to&nbsp;<a href=\"\/?p=685\">my recent post<\/a> about why communications protocol, trust system and&nbsp;token payload must become three orthogonal axes:<\/p>\n<blockquote><p>SAML doesn\u00e2\u20ac\u2122t have the problem Kim is referring to either. Both trust model and token format are out of scope of SAML protocol exchanges. The former is generally understood, but the token issue is the source of a lot of FUD, or in Kim\u00e2\u20ac\u2122s case just misunderstanding SAML. This is largely SAML\u00e2\u20ac\u2122s own fault, as the specs do not explain the issue well.<\/p>\n<p>It is true that SAML protocols generally return assertions. What isn\u00e2\u20ac\u2122t true is that a SAML assertion in and of itself is a security token. What turns a SAML assertion into such a token is the SubjectConfirmation construct inside it. That construct is extensible\/open to any token type, proof mechanism, trust model, etc.<\/p>\n<p>So the difference between SAML and WS-Trust is that SAML returns other tokens by bridging them from a SAML assertion so as to create a common baseline to work from, while WS-Trust returns the other tokens by themselves. This isn\u00e2\u20ac\u2122t more or less functional, it\u00e2\u20ac\u2122s simply a different design. I suppose you could say that it validates both of them, since they end up with the same answer in the end.<\/p>\n<p>An obvious strategy for bridging SAML and OpenID is using an OpenID confirmation method. That would be one possible \u00e2\u20ac\u0153simple\u00e2\u20ac\u009d profile, although others are possible, and some have been discussed.<\/p><\/blockquote>\n<p>I&#39;m not sure I really misunderstand SAML.&nbsp; I actually do understand that the SubjectConfirmation within SAML offers quite a bit of elasticity.&nbsp; But SAML does have a bunch of built-in assumptions within the Assertion that make it, well, SAML (Security Assertion Markup Language).&nbsp; These aren&#39;t always the&nbsp;assumptions you want to make.&nbsp; I&#39;ll share one of my own experiences with you.<\/p>\n<p>CardSpace supports&nbsp;a mode of operation&nbsp;we call &#8220;non-auditing&#8221;.&nbsp; In this mode, the identity of the relying party is <em>never conveyed<\/em> to the identity provider.<\/p>\n<p>The identity provider can still create assertions for the relying party, sign them, and send them back to CardSpace, which can in turn forward them to the relying party.&nbsp; If done properly, using a reasonable caching scheme, this provides a high degree of privacy, since the identity provider is blind to the usage of its tokens.&nbsp; For example, one could imagine&nbsp;a school system&nbsp;issuing my&nbsp;daughter&nbsp;a token that says&nbsp;she&#39;s&nbsp;under sixteen&nbsp;that&nbsp;she could use to get into protected chat rooms.&nbsp; In non-auditing mode&nbsp;&nbsp;the school system would not&nbsp;track which chat rooms&nbsp;she was&nbsp;visiting, and the chat room would only know&nbsp;she is&nbsp;of the correct age.&nbsp; This is certainly an increasingly important use case.<\/p>\n<p>My first instinct was to use SAML Assertions as the means&nbsp;for creating this kind of non-audited assertion.&nbsp; But&nbsp;as Arun Nanda and I&nbsp;started our design&nbsp;we discovered that&nbsp;SAML &#8211; even SAML 2.0 &#8211; just wouldn&#39;t work for us.&nbsp;<\/p>\n<p>In the specification&nbsp;(<a href=\"http:\/\/www.oasis-open.org\/committees\/download.php\/22385\/sstc-saml-core-errata-2.0-wd-04-diff.pdf\">latest draft<\/a>), section 2.3.3&nbsp;says a SAML Assertion MUST have a unique&nbsp;<strong>ID<\/strong>.&nbsp; It must also have an <strong>IssueInstant<\/strong>.&nbsp; When that is the case, the identity provider can always collaborate with the relying party to do a search on the unique ID or IssueInstant,&nbsp;so&nbsp;the desired privacy characteristics dissipate.<\/p>\n<p>Being a person of some deviousness who just wants to get things done, I said to Arun, &#8220;I know you won&#39;t like this, but I wonder if we couldn&#39;t just create an ID that would be the canonical &#8216;untraceable identifier&#8217;?&#8221;&nbsp; I hesitate to admit this and do so only to show I really was trying to get reuse.<\/p>\n<p>But&nbsp;within a few seconds, Arun pointed out the following stipulation from section 1.3.4:&nbsp;<\/p>\n<blockquote><p>Any party that assigns an identifier MUST ensure that there is negligible probability that that party or any other party will accidentally assign the same identifier to a different data object.<\/p><\/blockquote>\n<p>I could have argued we weren&#39;t reassigning it &#8220;accidentally&#8221;, I suppose.&nbsp;&nbsp;But there you are.&nbsp; I needed a new&nbsp;&#8220;Assertion&#8221; type &#8211;&nbsp;by which I&#39;m referring to&nbsp;the payload hard-wired into SAML.&nbsp;<\/p>\n<p>It isn&#39;t that there is anything wrong with&nbsp;a SAML Assertion.&nbsp; The &#8220;ID&#8221; requirement and &#8220;IssueInstant&#8221; make total sense when your use case is centered primarily around avoiding replay attacks.&nbsp;&nbsp;But I had a different use case, and needed a different payload, one incompatible with the&nbsp;SAML protocol.&nbsp; And going forward, I won&#39;t be the last to operate outside of the assumptions of any given payload, <strong>no matter how clever<\/strong>.<\/p>\n<p>I&nbsp;have looked deeply at SAML,&nbsp;but am&nbsp;convinced that protocol, payload (call it assertion type or token type, I don&#39;t care) and trust fabric need all to be orthogonal.&nbsp; SAML was a great step forward after PKI because it disentangled trust framework from the Assertion\/Protocol pairing (in PKI they had all been mixed up in a huge ball of string).&nbsp; But I&nbsp;like WS-Trust because it completes the process, and gets us to&nbsp;what I think is a cleaner architecture.<\/p>\n<p>In spite of all this, I totally buy Scott&#39;s uberpoint that for a number of common use cases&nbsp;SAML and WS-Fed (meaning WS-Trust in http redirection mode)&nbsp;are not&nbsp;more or less functional,&nbsp;but simply a different design.&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Scott and I agree on a great many things, and I admire his work.  But I still believe identity needs a three-dimensional approach in which protocol, payload and trust fabric are completely disentangled.<\/p>\n","protected":false},"author":68,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[10,8,22],"tags":[],"_links":{"self":[{"href":"https:\/\/www.identityblog.com\/index.php?rest_route=\/wp\/v2\/posts\/686"}],"collection":[{"href":"https:\/\/www.identityblog.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.identityblog.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.identityblog.com\/index.php?rest_route=\/wp\/v2\/users\/68"}],"replies":[{"embeddable":true,"href":"https:\/\/www.identityblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=686"}],"version-history":[{"count":0,"href":"https:\/\/www.identityblog.com\/index.php?rest_route=\/wp\/v2\/posts\/686\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.identityblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=686"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.identityblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=686"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.identityblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=686"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}