The World’s Leading Microsoft .NET Magazine
   
 
The .NET Addict's Blog

My Top Tags

                                                           

My RSS Feeds








I heart FeedBurner

Latest Diggs - Programming

Computers Blogs - Blog Top Sites

Site Hits

Total: 4,900,467
since: 19 Jan 2005

Geneva Distilled

posted Thu 09 Apr 09

I don't know about you but I'm not what you would call a "security guy". Sure, I know how to write secure code and I've done my share of encryption programming and SSL and forms authentication and windows authentication in applications, but that doesn't make me a security guy. 

Think of it this way. I've got a toolbox with a bunch of tools in it. I know how to use the screwdriver and I know how to use the hammer. The security guy, however, can look at that toolbox and build a backyard BBQ complete with big-screen TV. I, on the other hand, would probably end up building a shaky birdhouse that makes all the nearby birds go, "WTF?!".

The point here is that when I talk to security people about Geneva, they usually only need one or two sentences of overview and they get it. Developers who have been working with applications secured using conventional/traditional means often don't have enough context to dive right into the Geneva documentation without feeling lost.

So I'm going to try and explain Geneva in terms that developers who have spent most of their time using various flavors of "credential passing" can easily digest. I think the most important thing to keep in mind while reading this is a conversation I had with a true security guy once. I said, "What's the safest way to send credentials so they can't be spoofed, re-directed, or stolen?" He responded with, "Don't send 'em".

A Brief History of Geneva

Disclaimer: This is the history as far as my involvement goes back. There could easily be many more months or years of history that I'm not aware of. I remember back as far as PDC 2003 (seriously, I can actually remember that far...). They handed out these nifty little flashlights that said "WinFX" on them (I still have it!). WinFX was then the codename for what would encompass the codenames for Avalon (WPF), Indigo (WCF), Workflow Foundation, and this other obscure and confusing thing called InfoCard.

What InfoCard set out to do was to allow the desktop GUI to present the user with a list of "Cards". These cards could then be sent to a website (that had suitable WCF + InfoCard coding on it) and the website would know who they were. The grand scheme was to eventually see things like your own VISA card in this list, issued to you by your credit card company. Whenever a website asked for a credit card, you could "show" them this card and the site would be able to make your purchase without ever having been given direct access to your credit card number.

There are a few hundred tangents I could go off onto here but the main thing that I felt was that InfoCard was ahead of its time. There were trust issues, issues with it requiring Longhorn (during the first preview we got to see anyway) and even more of a barrier was that every site would have to do extensive work just to support this thing that currently had 0 adoption rate.

Over the years InfoCard became CardSpace and it got better at doing what it did, but the adoption rate (at least within my circles) was limited to 0 commercial users and the rest were developers doing samples for blogs and conferences.

Then came a project called "Zermatt". Zermatt, in my opinion, was an attempt to decouple all of the various pieces that made up the CardSpace infrastructure and finally make the use of tokens (discussed below) more standardized, more open, and more importantly, easy for developers to adopt. I played with Zermatt, loved it, thought it was a great improvement over previous incarnations of CardSpace... but it still felt lacking. Sure, it was a nicer, friendlier, more accessible CardSpace but it didn't make the adoption of federated identity and claims-based authorization (again, discussed below) easier in an enterprise.

This is where Geneva comes in. Geneva is a suite of products consisting of: Geneva Server, Geneva Framework (.NET SDK that does not require a PhD in security to consume), and CardSpace "Geneva". The Geneva Server looks to be something that you can simply install, configure easily, and fire it up and you now have Geneva support in your enterprise. Let's hope it continues to aim for that target. Geneva is currently in Beta 1 and you can download it from Microsoft.

Claims vs. Credentials

If there was one thing that I thought you needed to be able to firmly grasp about Geneva it would be the concept of claims. Claims are something that may feel very new and very alien to developers used to the traditional model that looks something like this:

User hits your website (or your desktop app..) and is prompted for a username and password. The user then submits their credentials. Your website grabs those credentials and validates the user. If the user is valid, the website can then go fetch the user's profile information and other information about the user including the roles to which they belong for security purposes.

What Geneva (and other industry standard solutions that conform to the same set of protocols and languages that Geneva speaks (more on that later)) operates on are claims. A claim is really just a statement of fact. It could be anything from "my name is Kevin" to "my credit card number is 1111-1111-1111-1111". Claims are very special statements of fact, however. Every claim comes with a sort of guarantor - some entity that has certified that claim to be true. You, as a developer, also get some information about the entity certifying the claims.

Here are some more examples of claims (deliberately not showing what a claim looks like in code):

  • My name: Kevin, Issuer: Me
  • My e-mail address: alothien@gmail.com, Issuer: Gmail
  • My security role: Administrator, Issuer: FantasticSite.com

As the developer of a site that accepts claims I realize that the "name" claim is self-certified which means it's pretty insecure (the user can pick anything they like). But, in a lot of cases, especially for sites like a message forum, I really don't care if the user is who they say they are. The e-mail address claim is interesting because (assuming Gmail was involved in this scenario) we can verify with 100% certainty that the e-mail address for that user did actually come from Gmail. Finally, we see that the user is also claiming to have administrative access on the site FantasticSite.com. If we have a trust relationship (federation anyone?) with FantasticSite.com, we can then know without a doubt that the user is actually an administrator.

Couple of things of note here... First - there are no credentials. There is no username and no password in this set of claims. Now, the user may have had to enter a username and a password in order to be given one of the claims (like the Gmail address), but that username and password was only ever sent to Google, not us. Second - we know who certified the claim and we also know how much we trust claims from that source and we can use that to make an informed decision about whether or not we're going to accept the claim. [Oversimplification Warning] basically the entity that certifies the claims digitally signs the claim with it's private key. We then use the public key to verify the signature. In this fashion, we know without a doubt that the claim came from that entity and hasn't been tampered with or faked.

Security Benefits

So now we have a basic idea that Geneva works by taking the authentication and authorization bits that are normally hand-rolled by your team and tightly coupled with your solution and abstracting it out to the use of external parties. So what exactly does this buy you from a security standpoint?

As I mentioned earlier, what this means is that no two relying parties (sites/applications that rely on a Geneva or Geneva-like infrastructure) need to share the same backing store for users. This means that secure user information is never stored outside the single authoritative location for that user information. More importantly, the user (or client application) will never need to submit credentials over the wire to parties who don't own those credentials. Think about the number of times you've seen in the news about hackers cracking into some website and stealing credit card numbers from purchase histories. What if the site never needed to know your credit card number? What if you could still securely and easily use that site, but that site was never given any information that could harm you if stolen.Obviously the site would have to be playing ball with the whole WS-Trust, WS-Policy, and WS-Security stuff but you get the idea.

To really simplify things down: Using Geneva, you can walk up to any website or web service built by any team or department within your organization and say "hey, I'm Bob and I'm going to be consuming your services tonight." and then the site/service can reliably, with certainty, be able to say "OK Bob we believe you. Enjoy your stay." This leads me to the organizational and Single-Sign-On (SSO hereafter) benefits.

Organizational & SSO Benefits

For me, as an architect and developer, this is where Geneva starts to get really appealing. Picture this scenario: In your organization you've got 5 different departments. Between those 5 departments they are creating 7 different applications. All of these applications have strict mid-tier requirements and so all of them have these back-end infrastructure services exposed that all other applications can consume to share data. It's an awesome architecture that involves cats and dogs living together in total harmony... except for authentication and authorization. This beautiful architecture typically degrades into multiple silos of user authentication. Each department has their own unique customer base. They have different information they need stored about different users. Worse, many of these applications use different types of credentials to log in.

So now let's say you're a developer on Team A and you want to use a service written by Team B that lets a customer of Team A's application create a new order in Team B's application. Great! Cross-sell opportunities FTW!!1 Here's the rub: Team B's application has no idea who the hell any of Team A's users are. Now things get really messy and people start creating these "bridge users" in each of their user silos to allow Team A apps to log in to Team B services. So now when Team A wants to create an order in Team B's app, Team A consumes the Team B services by logging in as "teama" with a password of "teama". If you've never been in this situation before...trust me, it smells bad and it's a downhill spiral that is really hard to escape.

This is where Geneva comes in. Let's refactor the previous scenario using Geneva. First we've got a Geneva server in the enterprise. There are trust relationships set up between the different teams and each team has a service that can certify claims made as to the user's identity and their security privileges.

Now a user of Team A wants to do something that will create an order in Team B's application. The Team A application walks up to the Team B service and says, "Hey my name is Bob. you don't know me, but (TeamA) says my name is Bob and that I'm allowed to use your service." The TeamB application responds with, "Sweet. Me and TeamA go WAY back. Oh, hey, your claims also have your billing address and other information that I couldn't possibly have known otherwise. Thanks."

So what just happened? Two applications with two completely different architectures that both rely on back-end web services that both have two completely isolated user databases were able to communicate securely. Without either app being aware of the other application's user information and without creating hacked "bridge users", one app was able to talk to the other app securely.

So if you have ever seen the situation where you've got multiple web services that need to talk to each other securely (regardless of whether or not there is a shared user base), then Geneva could come in really handy. Now when you add in the ability to federate with other organizations outside your building without needing to maintain remote user information locally... now you're starting to talk about real value-add and real savings in terms of cost, time, effort, and aspirin consumed.

I plan on keeping my eye on Geneva as it matures but so far what I've seen is pretty impressive. I'm still doubtful about whether users will ever "get" the whole card space stuff but that's OK since you don't actually have to use card space for the scenarios I discussed above. From what I've seen, if the users know what it actually is, they're on board. But more often than not, it's so strange and unfamiliar to them that they're not sure what's going on... and if an end user is confused, they will NOT click the "next" button. They will hit "cancel" and never use your site again.

tags:          

links: digg this    del.icio.us    technorati    reddit

AddThis Social Bookmark Button




1. Kevin Hoffman left...
Thu 09 Apr 09 8:03 am

Before anyone else points it out - I know that some of the scenarios are contrived and by architecting the back-end infrastructure services a specific way you could get rid of a lot of the problems caused by disparate user bases... but Geneva would still come in handy so that doesn't invalidate my point! :)


2. Devin left...
Thu 09 Apr 09 12:33 pm :: http://devinsblog.com

Good post, as usual, and I'm glad you just commented that a lot of the problems can be fixed by architecting the back-end to get rid of these problems. However, you finished with "but Geneva would still come in handy."

I'm wondering if you can elaborate on how Geneva would still be useful. The way I see it, implementing Geneva requires a lot of overhead development work. I could see it being useful inside your own trust networks (implemented as you mention inside an organization), but not as a wide adoption by many individual websites.

Services like OpenID seem to streamline this process more by creating one log-in to rule them all, which is much easier to adopt on the services side. I suppose that the security benefit of Geneva has the possibility to be stronger, as your service could expect authentication from more than one trusted site (which would require a hacker to know multiple usernames and passwords, as compared to just one username and password to hack OpenID), but it seems like too much work for very little gain. You would have to register trusted sites and have logic for which combinations of sites resulted in authentication and/or adequate amounts of information (if you needed credit card information you would have to be sure to get authentication from the users credit card information holder). Please steer me straight if I'm misunderstanding Geneva.

It seems as though in a perfect "Geneva enabled world" there would only be one instance of unique data on the whole web: your credit card number would only be stored on one site, your address information would only be stored in one place, etc... Geneva would allow for the transfer of this information to the site that needs it. Sounds sort of Utopian to me.

I would love to see a concrete example. The above example seems to fall apart if I didn't have a gmail account or a FantasticSite.com site. For multiple sites to communicate back to the site requesting the authentication, they also have to implement Geneva, which sounds like an adoption nightmare. It's an entire industry all-or- nothing scenario.

Alright, enough rambling. Interesting topic... I would love to be able to see more hard evidence of the pros and cons.


3. Graham J Lee left...
Thu 09 Apr 09 4:55 pm :: http://iamleeg.blogspot.com/

Geneva looks like a generalisation of the OpenID idea to more than just identity, which already has its availability issues - if livejournal's (say) openID provider server goes down, then a bunch of stackoverflow (say) users can no longer log in to stackoverflow. WTF? But then for more sensitive information than identity of a forum poster, Geneva is about trading off some confidentiality effort against some integrity effort. Let's say that I claim I'm Graham, but then Amazon tells you my postal address (or at least claim that a certain address is mine). Was that really Amazon? Presumably you know that it was, because Verisign countersigned their certificate. So in effect you trust Verisign to make claims about my address, rather than having me tell you it directly. But _I_ am identified to you and you've decided to believe that identification. You don't know _how_ I identified to Amazon (assuming I did) - nor how Amazon identified to Verisign (assuming they did). It seems you need to put a lot of trust in third parties, in return for not needing to worry about confidentiality of some information. That's an interesting trade-off - thanks for making me think about it! :-)


4. Paul left...
Thu 09 Apr 09 10:32 pm

Very interesting topic, and very good post. Is Geneva a Microsoft-proprietary solution or an open standard? If the former, are there any competing open standards? I am sorry if I missed it in the post. I saw the reference to OpenID in the comments, but OpenID operates on a completely different user model.


Tag Related Posts

Installing Geneva Beta 2 on Windows7

Thu 05 Nov 09 1:38 P GMT-05

Geneva Distilled

Thu 09 Apr 09 1:27 P GMT-05

WPF Control Development Unleashed

Wed 25 Mar 09 2:26 P GMT-05

What's New in Silverlight 3

Fri 20 Mar 09 2:38 P GMT-05

MIX 2009 - Day 1 Recap

Thu 19 Mar 09 2:17 P GMT-05

At MIX 2009, pre-keynote

Wed 18 Mar 09 2:50 P GMT-05

Live Framework April 2009 CTP is out!

Fri 13 Mar 09 12:11 P GMT-05

Velocity CTP3 coming up next week

Thu 12 Mar 09 4:44 P GMT-05
tags:            

My first day using Windows 7 Beta 1

Wed 25 Feb 09 1:58 P GMT-05

Microsoft Windows Azure Distilled

Tue 28 Oct 08 1:42 P GMT-05

Microsoft's Lofty Direction

Sun 05 Oct 08 2:30 P GMT-05

MobileMe vs. Live Mesh Throwdown - Round 1

Wed 16 Jul 08 10:33 A GMT-05

MobileMe vs. Live Mesh - Round 1

Wed 11 Jun 08 12:20 A GMT-05

One Framework to Rule them All

Mon 25 Feb 08 6:49 P GMT-05

Microsoft Codename Acropolis - Unwrapped

Wed 20 Jun 07 3:22 P GMT-05
tags:              

Installing Orcas Beta 1 - VMware Style

Mon 23 Apr 07 12:16 P GMT-05

Orcas Beta 1 Released

Fri 20 Apr 07 7:09 P GMT-05

.NET Framework 3.0 June CTP is out!

Fri 23 Jun 06 6:23 P GMT-05
tags:                

Tech-Ed 2006 Day 1 - Registration Day

Sun 11 Jun 06 7:17 P GMT-05

Dan Brown's got competition

Mon 05 Jun 06 3:51 P GMT-05