{"id":1019,"date":"2008-10-31T23:47:45","date_gmt":"2008-11-01T07:47:45","guid":{"rendered":"\/?p=1019"},"modified":"2008-11-05T13:54:08","modified_gmt":"2008-11-05T21:54:08","slug":"project-geneva-part-1","status":"publish","type":"post","link":"https:\/\/www.identityblog.com\/?p=1019","title":{"rendered":"Project Geneva &#8211; Part 1"},"content":{"rendered":"<p>I always want my blog to be about ideas, not the\u00a0specific products I work on.\u00a0<\/p>\n<p>But I thought it might be useful to make a bit of an exception in terms of sharing the announcements I made this week at the Microsoft Professional Developers Conference in Los Angeles.\u00a0 I&#39;m hoping this might help\u00a0others in the industry understand exactly what we at Microsoft\u00a0been able to accomplish around identity, what&#39;s left to do, and where we\u00a0think we&#39;re\u00a0going.<\/p>\n<p>A number of people have told me that one of the conclusions they drew from the presentation is that when it comes to identity,\u00a0 big, synergistic, cross-industry things are happening.\u00a0\u00a0 I liked that.<\/p>\n<p>Not random things, not proprietary things, not divisive things.\u00a0 But initiatives that further our collaboration, open standards, user choice and control and the &#8220;identity metasystem&#8221;\u00a0many of us\u00a0believe in so strongly, even if we call it by different names.\u00a0<\/p>\n<p>I thought it might help, in particular, to share\u00a0the conversation we are having with\u00a0our\u00a0developers.\u00a0\u00a0This set of posts\u00a0is intended as a bit of a look behind the curtain &#8211; or rather, as pulling back the curtain to show there is no curtain, if you will.\u00a0 My presentation, which is on <a href=\"http:\/\/channel9.msdn.com\/pdc2008\/BB11\/\">video <\/a>here, went like this&#8230;<\/p>\n<p><strong>The first lines of every application<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignright\" style=\"float: left;\" src=\"\/wp-content\/images\/2008\/10\/three_questions.jpg\" alt=\"\" width=\"345\" height=\"322\" \/>Whether you are creating serious Internet banking systems, hip new social applications, multi-party games or business applications for enterprise and government, you need to know something about the person using your application. We call this identity.<\/p>\n<p>There is no other way to shape your app to the needs of your users, or to know how to hook people up to the resources they own or can share.<\/p>\n<p>I want to be clear. Knowing \u201csomething\u201d\u00a0<em>doesn&#39;t<\/em> mean knowing \u201ceverything\u201d.\u00a0 We want to keep from spewing personal information all over the Internet.\u00a0 It means knowing what\u2019s needed to provide the experience you are trying to create.<\/p>\n<p>This <em>might<\/em> sometimes include someone\u2019s name. Or knowing they are really the person with\u00a0a\u00a0certain\u00a0bank account.<\/p>\n<p>Or it might just involve knowing that someone is in a certain role. Or in a certain age bracket.<\/p>\n<p>It also might simply be a question of remembering that some user prefers Britney Spears to New Kids on the Block or Eminem.<\/p>\n<p><strong>Identity Turbulence<\/strong><\/p>\n<p>But getting identity information is one of the messiest aspects of application development. People are up to their necks in passwords. They use many different mechanisms to establish identity, and its getting worse.<\/p>\n<p>One of my good friends at Microsoft is in charge of the identity aspects of one of our flagship apps. Let\u2019s call him <a name=\"turbulence\">Joe<\/a> .<\/p>\n<p>He started years ago by building in support for usernames and passwords.\u00a0 He was supposed to finish up within a few weeks, but soon found he needed a second project to build in better password reset and account management.<\/p>\n<p>This soon worked pretty well, but when presented to customers, no one would deploy in large numbers unless he added a help desk component &#8211; so he did.<\/p>\n<p>Then as Active Directory started gaining critical mass, he needed to set up a project to integrate with Active Directory.\u00a0 When\u00a0that was finished, the large sites wanted to use AD with multiple forests,\u00a0and that involved a complete rewrite&#8230;<\/p>\n<p>Next, people wanted to use the app outside the firewall, so he needed to add One Time Password (OTP) support.\u00a0Supporters of\u00a0Smart Cards were adamant that if OTP was supported, smartcards should work too.<\/p>\n<p>Joe\u00a0was just\u00a0pretty much ready to return to his &#8220;core work&#8221;\u00a0when he was asked to support SAML.\u00a0He hadn&#39;t even finished\u00a0his initial investigation of this\u00a0when people started asking for OpenID support too.\u00a0 Plus he needed to integrate with another software product by a different vendor\u00a0 &#8211; who used a completely different and proprietary approach to identity.<\/p>\n<p>As he was looking at\u00a0all this\u00a0he was hit by phishing attacks. That brought about a whole new round of security reviews &#8211; one for every one of the projects just discussed.<\/p>\n<p>Now Joe\u00a0has realized\u00a0that his application has to be easily hostable in the cloud as well as work on-premise. And it needs to support delegation so it can access other services on behalf of his users&#8230;<\/p>\n<p>So you\u2019ll understand that\u00a0he really wants and needs a better way. He wants to focus on the core values of his app, not the changing trends in identity.<\/p>\n<p><strong>Claims-based Access<\/strong><\/p>\n<p>\u00a0As we understood more about these problems, and the hardships they were causing developers, we started work on a way to insulate the application from all these issues.<\/p>\n<p>Our goal? You &#8211; the developer &#8211; would write the application once and be done, yet it would support all the identity requirements customers have as they host it in different environments.<\/p>\n<p>This\u00a0was the same kind of problem we had in spades in the early days of computing. Back then, you needed to write separate code for each type of disk drive you wanted to support. There was no end to it. If you didn\u2019t support the new drives you\u2019d lose part of your market. So we needed the idea of a logical disk that was always the same.<\/p>\n<p>We can now do the same thing around identity. We use what we call the Claims Based model.<\/p>\n<p><em>A claim<\/em> is a statement by one subject about another subject. Examples: someone&#39;s email address, age, employer, roles, custumer number, permission to access something.\u00a0 <em>There are no constraints on the semantics of a claim.<\/em><\/p>\n<p>The model starts from the needs of the application:\u00a0 you write your application\u00a0on the\u00a0assumption you can\u00a0get whatever claims you need.<\/p>\n<p>Then there is a standards-based architecture for getting you those claims. We call it the Identity Metasystem \u2013 meaning a system of identity systems.\u00a0<\/p>\n<p>\u00a0<img loading=\"lazy\" src=\"\/wp-content\/images\/2008\/10\/architecture.jpg\" alt=\"\" width=\"480\" height=\"360\" \/><\/p>\n<p>Here\u2019s how the architecture works. As I said, the application is in control. It specifies the kinds of claims it requires. The claims providers support protocols for issuing claims. You can also pop in claims providers that translate from one claim to another \u2013 we call this claims transformers. That makes the system very flexible and open.<\/p>\n<p>The technical name for a claims provider is a \u201cSecurity Token Service\u201d. You\u2019ll see the abbreviation STS on upcoming slides.<\/p>\n<p>The important thing here is that all existing identity mechanisms can be represented through claims and participate in the metasystem. As an app developer, you just deal with claims. But you get support for all permutations and combinations without getting your hands dirty or even thinking about it.<\/p>\n<p>I say \u201call\u201d to emphasize something \u2013 the open nature of this system. It accepts and produces identities from and for every type of platform and technology \u2013 no walled gardens.<\/p>\n<p>You can choose to get your identity from anywhere you wish.\u00a0 You can choose any framework to build your app.\u00a0 You can choose to use any client or browser.<\/p>\n<p><strong>What&#39;s involved for the developer?<\/strong><\/p>\n<p>Let me give you an example.\u00a0 I&#39;ll\u00a0peek ahead and\u00a0show you how the claims-based model is used in the Geneva Framework &#8211; new capabilities within .NET.\u00a0\u00a0Other frameworks would have similar capabilities, though\u00a0we think our approach is\u00a0especially programmer-friendly.\u00a0<\/p>\n<p>Basically, to answer the &#8220;Who are you?&#8221; question,\u00a0you write your app as per normal,\u00a0and simply\u00a0add this extra configuration to you <strong>app.config<\/strong> file:\u00a0<\/p>\n<p><img src=\"\/wp-content\/images\/2008\/10\/snippet_1.jpg\" alt=\"\" \/><\/p>\n<p>(There are a couple of more cut-and-paste lines needed, to make sure some modules are included, but otherwise\u00a0that\u2019s it.)<\/p>\n<p>Now, when a user hits your app, if they haven&#39;t been authenticated yet, they will get automatically redirected to the claims provider at <strong>https:\/\/sts1.contoso.com\/FederationPassive<\/strong>\u00a0to pick up their claims.\u00a0 The claims provider will get\u00a0your user\u00a0to authenticate, and if all goes well, will redirect\u00a0her back to your application with her identity set, and\u00a0any necessary claims available to your program.\u00a0 In other words, with zero effort on your part, no unauthenticated user will ever hit your app.\u00a0 Yet you are completely free to point your app at any claims provider on any platform made by any vendor and located anywhere on the Internet.<\/p>\n<p>To drill into the actual claim values, you use a technique like this:<\/p>\n<p><img loading=\"lazy\" src=\"\/wp-content\/images\/2008\/10\/snippet_2.jpg\" alt=\"\" width=\"443\" height=\"78\" \/><\/p>\n<p>You\u2019ll see the Thread has a Current Principal, and the Principal has an Identity, so you get a Claims Identity interface as shown, then cycle through the claims or pull out the one you need.\u00a0 In this case, it is the claim with the type of &#8220;role&#8221; &#8211; in the the enum MyClaimTypes.Role&#8230;<\/p>\n<p>If you are an application developer,\u00a0we&#39;ve already come to\u00a0the big takeaway of this presentation.\u00a0 You can get up and go home now.\u00a0 Everything else I\u2019m going to show you is just to give you a deeper understanding of all the\u00a0many use cases\u00a0and scenarios that can be supported through these mechanisms.<\/p>\n<p>Again, the claims shown in this example are implemented through well accepted industry standards.\u00a0The same code works with\u00a0claims\u00a0that come from anywhere, any platform, any vendor, any operating system, any cloud provider.<\/p>\n<p><strong>Solving problems with claims<\/strong><\/p>\n<p style=\"text-align: left;\">{In the <a href=\"\/?p=1020\">next segment<\/a>, I&#39;ll share the ideas I presented to my developer audience about how they could use claims to solve concrete problems.}<\/p>\n<p>\u00a0<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sharing my presentation on Identity Software + Services at the Microsoft PDC<\/p>\n","protected":false},"author":68,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[37,43,2,8],"tags":[],"_links":{"self":[{"href":"https:\/\/www.identityblog.com\/index.php?rest_route=\/wp\/v2\/posts\/1019"}],"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=1019"}],"version-history":[{"count":0,"href":"https:\/\/www.identityblog.com\/index.php?rest_route=\/wp\/v2\/posts\/1019\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.identityblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1019"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.identityblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1019"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.identityblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1019"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}