<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Andy Harjanto's InfoCard WebLog</title><subtitle type="html">InfoCard</subtitle><id>http://blogs.msdn.com/andyhar/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/andyhar/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/andyhar/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2005-06-17T19:48:00Z</updated><entry><title>InfoCard and Browser Integration</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/andyhar/archive/2006/02/20/535333.aspx" /><id>http://blogs.msdn.com/andyhar/archive/2006/02/20/535333.aspx</id><published>2006-02-20T08:42:00Z</published><updated>2006-02-20T08:42:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Verdana size=2&gt;This is the information you've been waiting for!&amp;nbsp; You've seen the InfoCard&amp;nbsp;-IE 7 demo at &lt;/FONT&gt;&lt;A href="https://2006.rsaconference.com/us/conference/webcasts.aspx"&gt;&lt;FONT face=Verdana size=2&gt;RSA Conference last week&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;.&amp;nbsp;&amp;nbsp; If you missed it, not too worry - plenty of &lt;A href="http://www.identityblog.com/?p=374"&gt;articles&lt;/A&gt; you can read. &lt;BR&gt;&lt;BR&gt;Many have asked me, how does it really&amp;nbsp;work? &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;In a simplest scenario, a web site could simply add an HTML tag (either using OBJECT tag or XHTML tag) as part of &amp;lt;FORM&amp;gt; element.&amp;nbsp; When IE 7.0 sees this, the InfoCard experience lights up. &lt;BR&gt;&lt;BR&gt;Here is a simple example of OBJECT tag and XHTML insider FORM tag.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp; &amp;lt;FORM method="post" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; action="&lt;/FONT&gt;&lt;A href="https://www.fabrikam.com/Main.aspx"&gt;&lt;FONT face="Courier New" size=2&gt;https://www.fabrikam.com/Main.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" size=2&gt;" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="submit" name="InfoCardSignin" value="Log in" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id="InfoCardSignin" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;OBJECT type="application/infocard" name="xmlToken"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;PARAM Name="tokenType" Value="urn:oasis:names:tc:SAML:1.0:assertion"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;PARAM Name="issuer" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value="&lt;/FONT&gt;&lt;A href="http://schemas.microsoft.com/.../issuer/self"&gt;&lt;FONT face="Courier New" size=2&gt;http://schemas.microsoft.com/.../issuer/self&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" size=2&gt;"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;PARAM Name="requiredClaims" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value="&lt;/FONT&gt;&lt;A href="http://schemas.microsoft.com/.../emailaddress"&gt;&lt;FONT face="Courier New" size=2&gt;http://schemas.microsoft.com/.../emailaddress&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" size=2&gt;"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/OBJECT&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/FORM&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&lt;BR&gt;OR --------&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;html XMLNS:ic&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;body&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;form&amp;nbsp; method="post" action="&lt;/FONT&gt;&lt;A href="https://www.fabrikam.com/Main.aspx"&gt;&lt;FONT face="Courier New" size=2&gt;https://www.fabrikam.com/Main.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" size=2&gt;" &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ic:informationCard&amp;nbsp; name='xmlToken' &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style='behavior:url(#default#informationCard)' &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; issuer='http://schemas.microsoft.com/ws/2005/05/identity/issuer/self' &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tokenType='urn:oasis:names:tc:SAML:1.0:assertion'&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ic:add &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; claimType='http://schemas.microsoft.com/ws/…/claims/emailaddress' /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ic:/informationCard&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="submit" name="InfoCardSignin" value="Log in" id="InfoCardSignin" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/form&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/body&amp;gt;&lt;BR&gt;&amp;lt;/html&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Notice that the InfoCard OBJECT or XHTML tag&amp;nbsp;will be&amp;nbsp;part of POST message, just like any other element inside the &amp;lt;FORM&amp;gt;.&lt;BR&gt;&lt;BR&gt;Once the InfoCard UI shows up, user selects the card, and token is generated by the IP, the token will be posted as part of specified field ( in the example above, the field name is "xmlToken") to the targetUrl (in this example, &lt;/FONT&gt;&lt;A href="https://www.fabrikam.com/Main.aspx"&gt;&lt;FONT face=Verdana size=2&gt;https://www.fabrikam.com/Main.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;). &lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;The login page above requires SSL connection.&amp;nbsp; InfoCard will use this certificate to (1) display the trust dialog for first time visit&amp;nbsp; (2) encrrypt the token to the targetUrl.&amp;nbsp; InfoCard also supports&amp;nbsp;High Assurance certificate, just like IE7.0.&amp;nbsp;&lt;BR&gt;&lt;BR&gt;You also notice that inside the &amp;lt;OBJECT&amp;gt; tag or XHTML (implement as binary behavior), you could specify RP's policy such as issuer, token types, claim set (either optional or mandatory), etc. &lt;BR&gt;&lt;BR&gt;The POST message will look like this: &lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Lucida Console"&gt;&lt;FONT face="Times New Roman"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; LETTER-SPACING: 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT size=2&gt;&amp;nbsp;&lt;BR&gt;POST /test/s/TokenPage.aspx HTTP/1.1&lt;BR&gt;Cache-Control: no-cache&lt;BR&gt;Connection: Keep-Alive&lt;BR&gt;Content-Length: 6478&lt;BR&gt;Content-Type: application/x-www-form-urlencoded&lt;BR&gt;Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*&lt;BR&gt;Accept-Encoding: gzip, deflate&lt;BR&gt;Accept-Language: en-us&lt;BR&gt;Host: &lt;/FONT&gt;&lt;A href="http://www.fabrikam.com"&gt;&lt;FONT size=2&gt;www.fabrikam.com&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;FONT size=2&gt;Referer: &lt;/FONT&gt;&lt;A href="https://www.fabrikam.com/login"&gt;&lt;FONT size=2&gt;https://www.fabrikam.com/login&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;FONT size=2&gt;User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)&lt;BR&gt;UA-CPU: x86&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; LETTER-SPACING: 0pt"&gt;&lt;o:p&gt;&lt;FONT size=2&gt;InfoCardSignin=Log+in&amp;amp;xmlToken=%3Cenc%3AEncryptedData+Type%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmlenc%23Element%22+xmlns%3Aenc%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmlenc%23%22%3E%34WVfaItHJTYU%2BsxIR1T25fi9k%2FOc%2FMX7Q%2B6NSDs4nGqkn4rzqpez9BUWNZw7caVOrDeao&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;BR&gt;diZwfj0w06g199qlAqUMZEWxh0%3D%3C%2Fenc%3ACipherValue%3E%3C%2Fenc%3ACipherData%3E%3C%2Fenc%3AEncryptedData%3E&lt;BR&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;If you look at closely, the un-escaped version of the token is an XML fragment which includes information such as the encrypted token, the method of encryption, token signature etc. &lt;BR&gt;&lt;BR&gt;Of course, this is only one scenario. Other scenarios could involve one or more STS (security token services) owned by RP.&amp;nbsp; In this scenario, the target page will process the token, and it can make authentication and authorization decision, or it can also return another token (for&amp;nbsp;example setting the cookie, if appropriate)&amp;nbsp;&lt;BR&gt;&lt;BR&gt;It's simple, isn't it? &amp;nbsp;I think it's enough for one post to digest.&amp;nbsp; Please send your comments, feedback.&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=535333" width="1" height="1"&gt;</content><author><name>andyhar</name><uri>http://blogs.msdn.com/members/andyhar.aspx</uri></author></entry><entry><title>New!  InfoCard Guide and Technical Reference  </title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/andyhar/archive/2005/11/22/495649.aspx" /><id>http://blogs.msdn.com/andyhar/archive/2005/11/22/495649.aspx</id><published>2005-11-22T08:27:00Z</published><updated>2005-11-22T08:27:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Verdana size=2&gt;By now, you may already know that we have shipped &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=E5376297-DA10-4FC3-967D-38C96F767FC4&amp;amp;displaylang=en"&gt;&lt;FONT face=Verdana size=2&gt;WinFX November 2005 Community Technology Preview&amp;nbsp;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;(which includes the latest&amp;nbsp;InfoCard).&amp;nbsp; Today, we just published &lt;/FONT&gt;&lt;A href="http://download.microsoft.com/download/6/c/3/6c3c2ba2-e5f0-4fe3-be7f-c5dcb86af6de/infocard-guide-beta2-published.pdf"&gt;&lt;FONT face=Verdana size=2&gt;InfoCard Guide to Integrating with InfoCard&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;and &lt;/FONT&gt;&lt;A href="http://download.microsoft.com/download/5/4/0/54091e0b-464c-4961-a934-d47f91b66228/infocard-techref-beta2-published.pdf"&gt;&lt;FONT face=Verdana size=2&gt;Technical Reference for InfoCard v1.0&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;. These documents explain how InfoCard uses WS-SecurityPolicy, WS-Trust, and WS-MetadataExchange in a great detail; they also explain the card schema and our implementation of STS that produces a self-issued card. If you have questions or feedback, please post&amp;nbsp;your comments here. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Change a topic a little bit - OK, I can't top XBox360 launch, but what's new in &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=E5376297-DA10-4FC3-967D-38C96F767FC4&amp;amp;displaylang=en"&gt;&lt;FONT face=Verdana size=2&gt;WinFX November 2005 Community Technology Preview&lt;/FONT&gt;&lt;/A&gt;, specifically InfoCard?&lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Improved UI, you'll see better graphics, control pannel applets&amp;nbsp;&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Improve handling import and export .crd and .crds&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Better, cleaner&amp;nbsp;OM and App.Config. &lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Managed Card scenarios&amp;nbsp;are enabled. &lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Tighter security model around the "Trust" dialog.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;I would highly recommend you to try this (especially now that we also have ship VS.NET 2005). &lt;BR&gt;Install the following order: &lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=E5376297-DA10-4FC3-967D-38C96F767FC4&amp;amp;displaylang=en"&gt;&lt;FONT face=Verdana size=2&gt;WinFX November 2005 Community Technology Preview&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp; -- (uninstall previous CTP bits, if any)&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Install &lt;A href="http://msdn.microsoft.com/vstudio/express/vb/"&gt;Visual Basic&amp;nbsp;Express &lt;/A&gt;or &lt;A href="http://msdn.microsoft.com/vstudio/express/visualcsharp/"&gt;Visual C# 2005 Express&lt;/A&gt;. &lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;That's it! -- You're ready to go to do a real programming.&amp;nbsp; To make sure&amp;nbsp;InfoCard installed properly, please open your control pannel and click on "Digital Identities" --&amp;nbsp;do you see what I see?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.harjanto.com/icard.jpg"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=495649" width="1" height="1"&gt;</content><author><name>andyhar</name><uri>http://blogs.msdn.com/members/andyhar.aspx</uri></author></entry><entry><title>More Materials on InfoCard</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/andyhar/archive/2005/09/22/472712.aspx" /><id>http://blogs.msdn.com/andyhar/archive/2005/09/22/472712.aspx</id><published>2005-09-22T08:20:00Z</published><updated>2005-09-22T08:20:00Z</updated><content type="html">&lt;FONT face=Verdana size=2&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;For those of you who missed PDC, now you can download "InfoCard"&amp;nbsp;PDC presentations from PDC ComNet.&amp;nbsp; One presentation (&lt;A href="http://216.55.183.63/pdc2005/slides/COM214_Shewchuk.ppt"&gt;Identity, Access, "InfoCard," and the Identity Metasystem&lt;/A&gt;) was given by our architect, &amp;nbsp;JohnShew, and the other talk (&lt;A href="http://216.55.183.63/pdc2005/slides/COM321_Harjanto.ppt"&gt;Developing Federated Identity Applications Using "InfoCard" and the Windows Communications Foundation&lt;/A&gt;) was given by me. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;On the side note, even if you’re not planning to install WinFX Runtime on your machine to try InfoCard, it is still useful to download the Sept 2005 CTP &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=66734401-4988-4ded-9876-3dc10223052c&amp;amp;displaylang=en"&gt;Resource Kit&lt;/A&gt;. In this resource kit, you will find “InfoCard” technology walkthrough; step by step instructions on how to build client and service which use InfoCard. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=472712" width="1" height="1"&gt;</content><author><name>andyhar</name><uri>http://blogs.msdn.com/members/andyhar.aspx</uri></author></entry><entry><title>Announcing: Microsoft Federated Identity and Access Resource Kit for Sept 2005 CTP</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/andyhar/archive/2005/09/20/471681.aspx" /><id>http://blogs.msdn.com/andyhar/archive/2005/09/20/471681.aspx</id><published>2005-09-20T07:28:00Z</published><updated>2005-09-20T07:28:00Z</updated><content type="html">&lt;P&gt;What a great week, last week!&amp;nbsp; I met many of you at PDC, discussing InfoCard, Identity Metasystem. I learned plenty from you, understanding the scenarios, your customers' requirements, or discussing how other technologies could use "InfoCard". Thank you!&lt;BR&gt;&lt;BR&gt;As I promised at the PDC, we'll make the resource kit available for public this week. This resource kits contains a document and samples, describing step-by-step instructions on how to build "Indigo" (WCF) applications/services that use "InfoCard".&amp;nbsp; In addition, it also includes&amp;nbsp;Security Token Services (STS) samples&amp;nbsp;that you can customize.&amp;nbsp; Now, you could build an end-to-end scenario, and play a role of Identity Provider, or Relying Party or both. &lt;/P&gt;
&lt;P&gt;As the name indicates, this release only works with WinFX Sept 2005 CTP and VS 2005 Extensions for Sept 2005 CTP. Please install in the followin order:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;If you'd like to use the STS samples, please install IIS prior to installing WinFX Sept 2005 CTP. &lt;/LI&gt;
&lt;LI&gt;WinFX Sept 2005 CTP (&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=ffd636f0-86e9-41e8-9e1c-100a4cc4888f&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=ffd636f0-86e9-41e8-9e1c-100a4cc4888f&amp;amp;displaylang=en&lt;/A&gt;&amp;nbsp;) &lt;/LI&gt;
&lt;LI&gt;Visual Studio Extensions&amp;nbsp;for Sept 2005 CTP&amp;nbsp;(&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=EDE1A645-2A53-42E1-8482-3BF1FADADE06&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=EDE1A645-2A53-42E1-8482-3BF1FADADE06&amp;amp;displaylang=en&lt;/A&gt;&lt;A href="http://lab.msdn.microsoft.com/vs2005/get/default.aspx"&gt;&lt;/A&gt;). &lt;/LI&gt;
&lt;LI&gt;WinFX and VS 2005 are installed, please download the resource kit here (&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=66734401-4988-4ded-9876-3dc10223052c&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=66734401-4988-4ded-9876-3dc10223052c&amp;amp;displaylang=en&lt;/A&gt;&amp;nbsp;). &lt;BR&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Since&amp;nbsp;you'll be using&amp;nbsp;pre-release versions, I recommend using a test machine.&lt;/P&gt;
&lt;P&gt;Enjoy, and I'm looking forward to hearing your feedback!&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=471681" width="1" height="1"&gt;</content><author><name>andyhar</name><uri>http://blogs.msdn.com/members/andyhar.aspx</uri></author></entry><entry><title>PDC 2005 is coming!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/andyhar/archive/2005/09/07/461846.aspx" /><id>http://blogs.msdn.com/andyhar/archive/2005/09/07/461846.aspx</id><published>2005-09-07T08:05:00Z</published><updated>2005-09-07T08:05:00Z</updated><content type="html">&lt;P&gt;I'm back! We're a week away from PDC.&amp;nbsp; A few members in the InfoCard team (including me) will be there at the PDC. For those of you who will be at the conference, we're looking forward to meeting and hearing your feedback. I'll also present one technical session&amp;nbsp;specifically on&amp;nbsp;InfoCard. &lt;BR&gt;&lt;BR&gt;There is so much stuff to cover.&amp;nbsp; I promise I'll be&amp;nbsp;posting more technical articles in this blog after PDC. &lt;/P&gt;
&lt;P&gt;I'll see you in LA!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=461846" width="1" height="1"&gt;</content><author><name>andyhar</name><uri>http://blogs.msdn.com/members/andyhar.aspx</uri></author></entry><entry><title>RP : "I would like a token to go, please!"</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/andyhar/archive/2005/07/07/436400.aspx" /><id>http://blogs.msdn.com/andyhar/archive/2005/07/07/436400.aspx</id><published>2005-07-07T09:25:00Z</published><updated>2005-07-07T09:25:00Z</updated><content type="html">&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Now, that you, as the user, let the RP in (please see my previous posting) based on RP’s certificate and logos, RP, in turns, could express its security token requirements to you before it grants you some access.&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Consider the following xml fragments that RP could specify in its App.Config. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;lt;security authenticationMode="IssuedToken" &amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;federationParameters&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tokenRequestParameters&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xmlElement&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wst:TokenType&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; urn:oasis:names:tc:SAML:1.0:assertion&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/wst:TokenType&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xmlElement&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xmlElement&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wst:Claims&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wsid:Claim&amp;nbsp;wsid:URI="&lt;A href='http://.../identity#E-Mail-Address"/'&gt;http://.../identity#E-Mail-Address"/&lt;/A&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/wst:Claims&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xmlElement&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xmlElement&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wst:Issuer&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="http://schemas.xmlsoap.org/ws/2004/10/identity/issuer#Self&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/wst:Issuer"&gt;http://schemas.xmlsoap.org/ws/2004/10/identity/issuer#Self&lt;BR&gt;&lt;/A&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/wst:Issuer&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xmlElement&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tokenRequestParameters&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/federationParameters&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;lt;/security&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;This App.Config will be translated automatically by Indigo runtime in the form of WS-SecurityPolicy.&amp;nbsp; The client could retrieve this information using WS-MetadataExchange – more later. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Note: In subsequent beta release, it’s very likely that the format of this app.config will change. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;As you seen above the xml fragment, the RP specifies: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;1.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The authentication mode to be “IssuedToken”.&amp;nbsp; If the Indigo runtime on the client sees this, it will call InfoCard System.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;2.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Token Type is SAML:1.0.&amp;nbsp; The interesting thing to note here is InfoCard could work with any type of token, as long as Identity Provider (IP) could satisfy the request.&amp;nbsp; InfoCard is token agnostics. In the future, if a claim based token format is invented, InfoCard system could still work, provided that RP asks and consumes the token and IP produces the token.&amp;nbsp; The role of InfoCard, as an Identity Selector is to be a match maker between RP and IP.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;3.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Claims requested by the RP.&amp;nbsp; In this example it’s E-mail address. Note the claim is identified by the URI.&amp;nbsp; Other company could in, theory, define Email Address with a different URI, for example &lt;A href="http://schemas.fabrikam.com/2005/07/claims#E-Mail-Address"&gt;http://schemas.fabrikam.com/2005/07/claims#E-Mail-Address&lt;/A&gt;. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;4.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Finally, the RP specifies the issuer of this token. In this example, RP would like a self-issued token.&amp;nbsp; RP could also omit this, indicating any issuer is acceptable.&amp;nbsp; Or RP could specify a specific issuer; for example, &lt;BR&gt;&lt;A href="http://services.contoso.com/products/sts"&gt;http://services.contoso.com/products/sts&lt;/A&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;To retrieve this RP’s policy, the client could use svcutil.exe (for design time), or it could also use MetadataResolver (for runtime). &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;EndpointAddress mexAddress = new &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndpointAddress("&lt;A href="http://.../mex"&gt;http://.../mex&lt;/A&gt;");&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;MetadataResolver mexProxy = new MetadataResolver(mexAddress);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;ServiceEndpointCollection endpoints = mexProxy.RetrieveEndpoints();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;// for simplicity, brevity, assume only one serviceEndpoint&lt;BR&gt;ServiceEndpoint ep = endpoints[0]; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;// Create a channel based on the the end point&lt;BR&gt;ChannelFactory&amp;lt;IHello&amp;gt; cnFactory = new &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ChannelFactory&amp;lt;IHello&amp;gt;(ep.Address, ep.Binding);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;IHello chn = cnFactory.CreateChannel();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;That’s it.&amp;nbsp; The client points to RP’s MetadataExchange endpoint, and retrieves RP’s WSDL (including the security policy) to form a serviceEndPoint collection.&amp;nbsp; Once the client finds the serviceEndPoint it wants, it calls Indigo to create the channel. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;What happen under the hood (on the client side)?&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;1.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Indigo calls InfoCard System, since RP asks for “IssuedToken”&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;2.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Let’s assume user has a few cards issued by different companies, government, and self-issued.&amp;nbsp; InfoCard System will match the RP requirements with the cards that are capable of satisfying the RP’s requests (please see point 1-4 above)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;3.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; User is presented with the qualified cards.&amp;nbsp; User selects a card. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;4.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InfoCard System will read the card (remember it only contains a metadata about how to get the token), and contact IP. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;5.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InfoCard uses WS-Trust to get the token from IP, passes the RP’s security policy along with it. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;6.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InfoCard gets the token from IP, asks the user for her approval prior to submitting the token to RP. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;7.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Token is sent to RP, encrypted with RP’s public key. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;We’ll examine InfoCard and IP interaction in later postings. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Oh…, one more thing – I’ll be taking three week vacation starting in a few hours…J; it could be challenging to get Internet connection in some remote areas – so I won’t be updating this blog for a while. I plan to capture some of interesting, real-life&amp;nbsp; IP – Client – RP and STS scenarios, in the form of ---what else - pictures.&amp;nbsp; I just picked a new hobby of digital photography; it’s great to learn the “language of photography” like metering, white balance, parameters, af-points, shutter, aperture, depth-of-field, etc; I could always use some advice. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;FONT face="Times New Roman" size=3&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;See you in a bit ...&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;FONT face="Times New Roman" size=3&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;FONT face="Times New Roman" size=3&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=436400" width="1" height="1"&gt;</content><author><name>andyhar</name><uri>http://blogs.msdn.com/members/andyhar.aspx</uri></author></entry><entry><title>Knock, knock…, who’s there? </title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/andyhar/archive/2005/06/30/434173.aspx" /><id>http://blogs.msdn.com/andyhar/archive/2005/06/30/434173.aspx</id><published>2005-06-30T09:04:00Z</published><updated>2005-06-30T09:04:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Verdana size=2&gt;RP? …. RP Who? …. RP, the good guy, really!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Would you open the door to a stranger? Probably. Would you give up some valuable information to him? Probably not without checking his identity; and of course you won’t take any of his identity, like his business card; you would only honor IDs that were issued by authorities that you trust. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;A similar problem exists in Identity Metasystem. The user MUST be in a full control over what data, for what purpose, to whom s/he discloses the identity information (Law #1). &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;When a user visits a RP’s web service, InfoCard System requires the RP to supply its identity in the form of X509Certificate which is part of Endpoint Reference (EPR)- (for more information about EPR, please see WS-Addressing). Of course, the RP must also prove that it has the possession of the corresponding private key (for example, via signature). The security token submitted to this RP is encrypted using the public key of the certificate. The virus could not just obtain the token, and decrypt the token, since it does not have the RP’s private key. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;How does this translate to code/configuration? If you go back to my previous posting, the RP would add the following xml segment in its app.config (system.serviceModel/services/service/endpoint)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&amp;lt;endpoint ...&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;addressProperties identityType="Dns" identityData="Fabrikam"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpointHeaders&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dsig:X509Certificate xmlns:dsig="&lt;A href="http://…/xmldsig"&gt;http://…/xmldsig&lt;/A&gt;#"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MIIDwzCCAqugAwIBAg ... &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ... 4-5 line of base 64 encoding string …&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...93rQOBW/BjHqg==&amp;lt;/dsig:X509Certificate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/endpointHeaders&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/addressProperties&amp;gt;&lt;BR&gt;&amp;lt;/endpoint&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Verdana size=2&gt;
&lt;P&gt;&lt;BR&gt;The X509Certificate specifies in the service’s endpoint SHOULD contain URL links to the subject and issuer logos. The identity selector (i.e InfoCard) displays these logos prominently when the user must make a trust decision whether to trust the RP and continue the conversation. The logos and the hash of the images are specified in 1.3.6.1.5.5.7.1.12 field in the certificate. The trust decision is recorded in the InfoCard system, so the next time s/he does not have to make the same trust decision again (of course she could revoke her trust to a specific RP). &lt;/P&gt;
&lt;P&gt;Of course, the RP identification problem has been solved before with varying degree of success. If users visit to a secured site, they have been educated to look at the locked icon in IE. In InfoCard experience, during the first time visit to RP, the user MUST decide to trust (or not trust) the RP before it can continue the conversation with RP. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Next posting, – let’s look at how we could secure the conversation between RP and User.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=434173" width="1" height="1"&gt;</content><author><name>andyhar</name><uri>http://blogs.msdn.com/members/andyhar.aspx</uri></author></entry><entry><title>Building InfoCard App, Part 1</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/andyhar/archive/2005/06/25/432691.aspx" /><id>http://blogs.msdn.com/andyhar/archive/2005/06/25/432691.aspx</id><published>2005-06-25T16:24:00Z</published><updated>2005-06-25T16:24:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Verdana size=2&gt;…Now the fun begins…, let’s code and we’ll get back to a few InfoCard concepts later… &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Follow the following instructions: &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;1. Create a New Project. Choose the project type, for our walkthrough, let’s just pick a &lt;I&gt;Console Application&lt;/I&gt;, and name your project "&lt;/FONT&gt;&lt;FONT face=Verdana&gt;&lt;FONT color=#0000ff&gt;MyFirstHelloApp&lt;/FONT&gt;". &lt;FONT color=#0000ff&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;2. Add the references using Project | Add Reference…&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;3. Choose &lt;I&gt;System.ServiceModel&lt;/I&gt; and &lt;I&gt;Microsoft.InfoCards&lt;/I&gt;. Indigo and InfoCard applications primarily use &lt;I&gt;System.ServiceModel&lt;/I&gt;, while &lt;I&gt;Microsoft.InfoCard&lt;/I&gt; is normally used to catch a few exceptions thrown by InfoCard System. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;4. Add the following "using" for C#:&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;using&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; System.ServiceModel;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;using&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Microsoft.InfoCards; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Now, you are ready to write your first hello world application. First, we’ll create the simplest HelloWorld Indigo client-service app; we’ll then add InfoCard binding that triggers the InfoCard UI on the client. To make it even simpler (for debugging purposes) we’ll even combine client and service code in one *.cs file. In normal cases, the service will be hosted by IIS. &lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face=Verdana&gt;For brevity, we will also omit catching exceptions. Note: There are many good Indigo samples in the WinFX SDK and other blogs; this exercise is just a stepping block to get into InfoCard. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;B&gt;&lt;I&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;What we’re building&lt;/FONT&gt;&lt;/B&gt;&lt;/I&gt;&lt;FONT face=Verdana size=2&gt;. We’ll be building a simple client and service app. Service will implement a contract in an interface called IHello. The client will call this interface. In the next posting, we’ll modify the app.config to trigger the InfoCard UX on the client. &lt;/FONT&gt;&lt;/P&gt;&lt;B&gt;&lt;I&gt;
&lt;P&gt;&lt;BR&gt;&lt;/B&gt;&lt;/I&gt;&lt;FONT face=Verdana size=2&gt;Add the following code: &lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;namespace MyFirstHelloApp&lt;BR&gt;{&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;[&lt;FONT color=#008080&gt;ServiceContract&lt;/FONT&gt;]&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;interface&lt;/FONT&gt; &lt;FONT color=#008080&gt;IHello&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp; [&lt;FONT color=#008080&gt;OperationContract&lt;/FONT&gt;]&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp; string&lt;/FONT&gt; Say();&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#008080&gt;Hello&lt;/FONT&gt; : &lt;FONT color=#008080&gt;IHello&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;{&lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Say()&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#800000&gt;"Hello World"&lt;/FONT&gt;; &lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp; }&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;class&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; &lt;FONT color=#008080&gt;Program&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Main(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;[] args)&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp; /////////////////////////////////////////////////&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;// Service Code&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;/////////////////////////////////////////////////&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;ServiceHost&lt;/FONT&gt;&amp;lt;&lt;FONT color=#008080&gt;Hello&lt;/FONT&gt;&amp;gt; sh = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;ServiceHost&lt;/FONT&gt;&amp;lt;&lt;FONT color=#008080&gt;Hello&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;gt;( &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;Uri&lt;/FONT&gt;("&lt;FONT color=#800000&gt;&lt;A href="http://localhost:4123/myService"&gt;http://localhost:4123/myService&lt;/A&gt;"&lt;/FONT&gt;));&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp; sh.Open();&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;Console&lt;/FONT&gt;.WriteLine(&lt;FONT color=#800000&gt;"Listening...."&lt;/FONT&gt;);&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp; /////////////////////////////////////////////////&lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;// Client code&lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;/////////////////////////////////////////////////&lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#008080&gt;&lt;FONT face="Courier New" size=2&gt;ChannelFactory&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&amp;lt;&lt;FONT color=#008080&gt;IHello&lt;/FONT&gt;&amp;gt; cnFactory = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; &lt;BR&gt;&amp;nbsp; &lt;FONT color=#008080&gt;ChannelFactory&lt;/FONT&gt;&amp;lt;&lt;FONT color=#008080&gt;IHello&lt;/FONT&gt;&amp;gt;(&lt;FONT color=#800000&gt;"myClient"&lt;/FONT&gt;);&lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#008080&gt;&lt;FONT face="Courier New" size=2&gt;IHello&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; chn = cnFactory.CreateChannel();&lt;BR&gt;&lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#008080&gt;&lt;FONT face="Courier New" size=2&gt;Console&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;.WriteLine(chn.Say());&lt;BR&gt;&lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;// Clean up&lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;cnFactory.Close();&lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;sh.Close(); &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;That’s it! for both the client and service. &amp;nbsp;The service which implement IHello is listening at http://localhost:4123/myService (I just picked an arbitary port); The service implement IHello:Say(), which nothing more than returning "Hello World" string. The client’s channel information will be read from "myClient" configuration in the app.config. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Next step, add App.Config to configure the binding, address, and contract (since we combine the service and the client, this app.config is for both the service and the client) &lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Verdana size=2&gt;To create App.Config: &lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;1. From &lt;B&gt;Project&lt;/B&gt;, select &lt;B&gt;Add New Item&lt;/B&gt;…&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;2. Select "&lt;B&gt;Application Configuration File&lt;/B&gt;", and click &lt;B&gt;Add&lt;/B&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Add the following XML segments:&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&amp;lt;configuration&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;system.serviceModel&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;bindings&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;customBinding&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#800000&gt;binding&lt;/FONT&gt;&lt;FONT color=#0000ff&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000&gt;configurationName&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;"&lt;FONT color=#0000ff&gt;myBinding&lt;/FONT&gt;"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;httpTransport&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;binding&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;customBinding&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT face="Courier New" size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000 size=2&gt;bindings&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT face="Courier New" size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000 size=2&gt;services&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT face="Courier New" size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;service&lt;/FONT&gt;&lt;FONT color=#0000ff&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000&gt;serviceType&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;"&lt;FONT color=#0000ff&gt;MyFirstHelloApp.Hello&lt;/FONT&gt;"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT face="Courier New" size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;endpoint&lt;/FONT&gt;&lt;FONT color=#0000ff&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000&gt;address&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;"&lt;FONT color=#0000ff&gt;endpoint1&lt;/FONT&gt;" &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#ff0000&gt;contractType&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;"&lt;FONT color=#0000ff&gt;MyFirstHelloApp.IHello&lt;/FONT&gt;"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT face="Courier New" size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#ff0000&gt;bindingSectionName&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;"&lt;FONT color=#0000ff&gt;customBinding&lt;/FONT&gt;"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT face="Courier New" size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#ff0000&gt;bindingConfiguration&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;"&lt;FONT color=#0000ff&gt;myBinding&lt;/FONT&gt;" /&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT face="Courier New" size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000 size=2&gt;service&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT face="Courier New" size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000 size=2&gt;services&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT face="Courier New" size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000 size=2&gt;client&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT face="Courier New" size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;endpoint&lt;/FONT&gt;&lt;FONT color=#0000ff&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000&gt;configurationName&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;"&lt;FONT color=#0000ff&gt;myClient&lt;/FONT&gt;" &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#ff0000&gt;address&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;A href="http://localhost:4123/myService/endpoint1"&gt;http://localhost:&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;4123/myService/endpoint1&lt;/A&gt;&lt;/FONT&gt;" &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#ff0000&gt;contractType&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;"&lt;FONT color=#0000ff&gt;MyFirstHelloApp.IHello&lt;/FONT&gt;" &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#ff0000&gt;bindingSectionName&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;"&lt;FONT color=#0000ff&gt;customBinding&lt;/FONT&gt;" &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#ff0000&gt;bindingConfiguration&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;"&lt;FONT color=#0000ff&gt;myBinding&lt;/FONT&gt;"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT face="Courier New" size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;endpoint&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;client&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;system.serviceModel&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;/configuration&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Build and set break points, and debug…., you should see the following outputs: &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;&lt;FONT face=Verdana size=2&gt;Listening....&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;Hello World&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;You may want to set one break point on IHello:Say implementation, so you’ll see when the code transition from client to service (and vice versa). &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;As seen in the app.config, we’re using &lt;I&gt;http&lt;/I&gt; as the transport binding, both the client and the service point to the binding. Since the address, binding and contract are the same, the client and the service will be able to communicate. One thing that I really like about this model is to separate code implementation from the infrastructure. Later, if I would like to change my transport ( for example, namepipe or tcp-ip), I do not have to change the code (in few cases, only minimal code modifications) – I just need to modify my App.Config. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;It’s not too bad, is it? &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Arial size=2&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=432691" width="1" height="1"&gt;</content><author><name>andyhar</name><uri>http://blogs.msdn.com/members/andyhar.aspx</uri></author></entry><entry><title>Wanted: InfoCard OM</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/andyhar/archive/2005/06/23/431827.aspx" /><id>http://blogs.msdn.com/andyhar/archive/2005/06/23/431827.aspx</id><published>2005-06-23T01:57:00Z</published><updated>2005-06-23T01:57:00Z</updated><content type="html">&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;Have you created your first self-issued card yet? &lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Please see my first posting for &lt;/FONT&gt;&lt;a href="http://blogs.msdn.com/andyhar/archive/2005/06/17/430343.aspx"&gt;&lt;FONT face=Verdana size=2&gt;instruction&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Would you like to create, delete a bunch of cards programmatically? &lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;I have a good news and/or a bad news. &lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;The bad (or good) news is – you can’t. There is no programmatic access to InfoCard store, period. The cards that represent your digital identities are very closely guarded; a virus running in a user context won’t be able to enumerate cards, delete cards, or creating cards.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;User MUST be in control on card lifecycle management (create/delete/update,etc), as well as the release of token to the RP. User is an integral part of Identity metasystem. InfoCard as an Identity Selector interacts with the user closely. &lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;For those of you who are looking for InfoCard OM, well sorry, it is virtually non-existence. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;So, how do you trigger InfoCard UX on the client to appear?&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;It starts from a Relying Party.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;As an RP (and also an IP), you’ll get to choose what authentication mechanism you would like to use to grant access to your resource(s).&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;For example, one could use UserNamePassword over SSL, or Kerberos, or X509Certificate, or others.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;The authentication mechanism that will trigger InfoCard experience on the client is called “IssuedToken”.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;All of these requirements are expressed in WS-SecurityPolicy.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;So, here is the flow: &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;1.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;The client application gets a RP’s policy (which includes authentication mechanism). This can be done during design time or runtime. The protocol used is WS-MetadataExchange. &lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;2.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;Based on this policy (to be accurate, policy is included in WSDL), the client has enough information on how to communicate to the web service (which, in this case, is RP’s). At this point, no connection has been established yet. &lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;3.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;The client library parses the security policy requirements (along with other binding requirements). It learns that it requires “IssuedToken”; the library, then, will call InfoCard System to satisfy the token request, passes along the RP’s security policy requirement (such as issuer, tokenType, claim set, etc)&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;4.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;InfoCard System returns the token to the client library (after getting the requested token from IP using WS-Trust protocol)&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;5.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;The client library now is ready to communicate to the RP’s service. The issued token will be included as part of WS-Security in the initial communication.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;Hmm… that sounds complicated, …. too many protocols to learn… ? &lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Not really, with Indigo – you’ll see that this amounts to only a few lines of code.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;In fact, a client app that normally uses UserName/Password, or Kerberos, could suddenly support InfoCard without (or little) code modification. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;In the next posting, let’s create (1) a client application and (2) RP’s service. The Identity Provider role will be played by InfoCard Local IP/STS.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;First, we’ll build a simplest Indigo hello world, and then we’ll enhance it with InfoCard.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;We’ll also introduce a few InfoCard concepts along the way.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Sound good? Please stay tuned..&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=431827" width="1" height="1"&gt;</content><author><name>andyhar</name><uri>http://blogs.msdn.com/members/andyhar.aspx</uri></author></entry><entry><title>InfoCard - An End to End Scenario</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/andyhar/archive/2005/06/21/431002.aspx" /><id>http://blogs.msdn.com/andyhar/archive/2005/06/21/431002.aspx</id><published>2005-06-21T01:52:00Z</published><updated>2005-06-21T01:52:00Z</updated><content type="html">&lt;FONT face=Verdana&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;I received plenty of feedback and emails on my first posting; thank you – keep in coming!&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Also, thanks to Kim who mentioned &lt;A href="http://www.identityblog.com/2005/06/18.html#a266"&gt;my blog&lt;/A&gt; on &lt;A href="http://www.identityblog.com/"&gt;his&lt;/A&gt; and for his kind words. It is really an honor and pleasure working with him. Let me tell you that all design meetings that I have been with him were always filled with laughter, energy and very productive. If you have a chance to meet him in person (he normally goes to plenty of conferences), you should, I guarantee you that you’ll have plenty of fun talking to him.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;Back to InfoCard,&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;before I jump into coding, it is important to understand end-to-end scenarios, not at 5000 ft, but say at 500 ft – before we descend to 50ft level (for fun, easy programming). &lt;BR&gt;&lt;BR&gt;Let’s take a simple scenario: &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;Fabrikam Corp sells fine wines on the Internet; to purchase wines you’re required to present a proof that you’re over 21. An ID issued by government is sufficient as a proof.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Take a scenario where Bob visits fabrikam.com to purchase a wine. &lt;BR&gt;&lt;BR&gt;Before going into the data flow, let’s identify the roles: &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;SPAN&gt;·&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;Fabrikam as a Relying Party(RP),&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;SPAN&gt;·&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;Government as an Identity Provider (IP), &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;SPAN&gt;·&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;Bob as a Subject, &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;SPAN&gt;·&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;And InfoCard takes a role is an Identity Selector. &lt;BR&gt;&lt;BR&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;I&gt;&lt;SPAN&gt;Relying Party: &lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;my requirements are…&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;Fabrikam defines its security policy requirements (using WS-SecurityPolicy). Its policy would be something like this:&lt;BR&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;OL&gt;
&lt;LI class=MsoNormal&gt;&lt;I&gt;&lt;SPAN&gt;Issuer&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt;:&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Government (it actually defines as URIs)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt; &lt;BR&gt;
&lt;LI class=MsoNormal&gt;&lt;I&gt;&lt;SPAN&gt;TokenType&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt;: SAML (or any other token type that IP could generate and RP to consume) &lt;BR&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;
&lt;LI class=MsoNormal&gt;&lt;I&gt;&lt;SPAN&gt;Required Claims&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt;:&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Age.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Notice here that Fabrikam.com does need to know about other personal data; it only needs to know Subject’s age that will be asserted by issuer (in this example, &lt;I&gt;government&lt;/I&gt;).&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;This is inline with &lt;A href="http://msdn.microsoft.com/webservices/understanding/advancedwebservices/default.aspx?pull=/library/en-us/dnwebsrv/html/lawsofidentity.asp"&gt;Law of Identity&lt;/A&gt; #2 (&lt;SPAN&gt;Minimal Disclosure for a Constrained Use). &lt;BR&gt;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;
&lt;LI class=MsoNormal&gt;&lt;SPAN&gt;Other requirements such as proof key type (symmetric, asymmetric), key size, which part of messages need to be signed, etc could also be specified. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/OL&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;I&gt;&lt;SPAN&gt;Identity Selector, the match maker…&lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;The policy requirements are read by the Identity Selector (InfoCard). &lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;InfoCard will match the policy requirements (issuer, tokenType, claims, etc) with cards that Bob currently has.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Let’s say Bob has 5 cards; two are self-issued cards, one is a book club membership, one is credit card, the last one is his driver license.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Based on this, let’s say only his driver license matches with all RP’s requirements. This card will be presented by the InfoCard System to the user (Bob) as a card that can be used to satisfy RP.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;How this card (3&lt;SUP&gt;rd&lt;/SUP&gt; party card, in general) is provisioned is a separate discussion that we could explore later. &lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;But, in the case of a self-issued card, Bob could create using &lt;a href="http://blogs.msdn.com/andyhar/archive/2005/06/17/430343.aspx"&gt;“Digital Identity” control panel applet&lt;/A&gt;. &lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;Now, Bob selects this card…&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;I&gt;&lt;SPAN&gt;Identity Provider, create the token for me, please. &lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;a href="http://blogs.msdn.com/andyhar/archive/2005/06/17/430343.aspx"&gt;As mentioned in my previous posting&lt;/A&gt;, that card does not hold claim values. IP owns the data, &lt;I&gt;not&lt;/I&gt; the Identity Selector. The card contains only metadata enough to communicate to IP for acquiring the token.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Identity Selector will contact IP (the IP’s end-point-address is specified in the card that Bob selects). Bob will authenticate to the IP, passes along the RP’s security policy requirements (tokenType, issuer, claim set, etc).&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;The protocol used in this exchange is WS-Trust.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;The request message for a token is called RST (Request for Security Token), while the IP’s response to this message is called RSTR (Request for Security Token Response).&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;If everything goes well, Bob will receive the token signed by the issuer (in this example, government), which contains only one claim (e.g age=32).&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;Please note, RP’s identity may or may not be sent to IP, depending on policy and user’s willingness to disclose RP to IP. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;I&gt;&lt;SPAN&gt;Decision time for Bob&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;Identity Selector displays the information (e.g his Age) that Bob is about to be released to the RP.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;It’s, now, up to Bob to approve it.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;This is inline with Laws of Identity #1 (User Control and Consent).&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;Bob approves the release of the token to IP…. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;BR&gt;&lt;I&gt;(…token submitted will be encrypted to the RP)&lt;o:p&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;I&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;I&gt;&lt;SPAN&gt;Relying Party consuming the token &lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;Once it was approved, the token is submitted to the relying party.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;The relying party decrypts, and checks the signatures, token validations, etc.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;RP will examine the claim (age), and make a determination that the sender (at least 21 years old), could purchase wines. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;This is just one of many, many different scenarios; but roughly, this flow is still pretty much&amp;nbsp;applicable. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=431002" width="1" height="1"&gt;</content><author><name>andyhar</name><uri>http://blogs.msdn.com/members/andyhar.aspx</uri></author></entry><entry><title>InfoCard, a Sneak-Peak</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/andyhar/archive/2005/06/17/430343.aspx" /><id>http://blogs.msdn.com/andyhar/archive/2005/06/17/430343.aspx</id><published>2005-06-17T17:48:00Z</published><updated>2005-06-17T17:48:00Z</updated><content type="html">&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN&gt;A few articles have written about InfoCard in the past few months; now it's your chance to get a sneak peak of InfoCard.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;First, I recommend reading these two articles: &lt;A href="http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnwebsrv/html/identitymetasystem.asp"&gt;Microsoft Vision of Identity System&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnwebsrv/html/lawsofidentity.asp"&gt;The Laws of Identity&lt;/A&gt;.&lt;SPAN&gt;&amp;nbsp; I also enjoy reading &lt;A href="http://www.identityblog.com/"&gt;Kim Cameron’s Identity Blog&lt;/A&gt;.&amp;nbsp; &lt;/SPAN&gt;Second, &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B789BC8D-4F25-4823-B6AA-C5EDF432D0C1&amp;amp;displaylang=en"&gt;download Microsoft® Pre-Release Software Code Named “Avalon” and “Indigo”&lt;/A&gt;; it’s currently in RC Beta 1.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR&gt;If you’d like to do some programming with InfoCard (I promise to show you how, in subsequent postings), you may want to install either &lt;A href="http://lab.msdn.microsoft.com/vs2005/downloads/"&gt;Beta2 release of Visual Studio 2005&lt;/A&gt; or &lt;A href="http://lab.msdn.microsoft.com/express"&gt;Beta2 release of Visual Studio Express&lt;/A&gt;.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Optionally, we could also download WinFX RC Beta 1 SDK documentation and samples &lt;A href="http://www.microsoft.com/downloads/info.aspx?u=http%3A%2F%2Fdownload.microsoft.com%2Fdownload%2F5%2F4%2F0%2F5407D6E4-740E-413E-8E91-EF7AC53A478A%2Fen_winfx_sdk_beta1_RC.iso&amp;amp;na=44&amp;amp;p=0&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=b789bc8d-4f25-4823-b6aa-c5ed"&gt;here&lt;/A&gt;;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;I warn you the SDK download is huge (351MB), and for InfoCard walkthroughs, this is not required. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;I&gt;&lt;SPAN&gt;Ready, set, go…&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Once you complete the WinFX Runtime installation, you’re ready… &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;1.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;First, you must start “InfoCard Service” manually; you could use the command prompt:&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;net start “InfoCard Service”.&lt;/SPAN&gt;&lt;SPAN&gt; &lt;BR&gt;Note: this is Beta 1 behavior. In a subsequent beta release, it’s very likely that&amp;nbsp;you don’t have worry about starting the InfoCard Service anymore.&lt;BR&gt;&lt;BR&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;2.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;Go to control panel, you will see a new control applet, call “Digital Identities”&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;- double click it. &lt;BR&gt;&lt;BR&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;3.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;You will see the InfoCard Management UI.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;I’m going to warn you that this is a ‘wire frame’ UI, it is enough get basic ideas across, but it is no where close to the final UI, and it will be radically different in a subsequent beta release, so please don’t read too much into this. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;I&gt;&lt;SPAN&gt;What you see? &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;1.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;You see a separate, secured desktop was created. &lt;BR&gt;&lt;BR&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;2.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;UI that allows you to manage your digital identities. Note please do not confuse contact list/address book.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Your digital identities are similar to what you have in your wallet (driver license, creditcards, membership club, frequent flier mile cards, student card, employee card, etc). You could also issue your own card, such as your own business card. Card issued by you is what we call self-issued card.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;In beta 1, we only support self issued card. In next beta release, we’ll include support for 3&lt;SUP&gt;rd&lt;/SUP&gt; party issuers. &lt;BR&gt;&lt;BR&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;3.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;Each user profile has its own collection of cards. Let’s say you share your computer with your daughter; and you create two user accounts (one for you, one for her); her digital identity collection will be separate from yours. &lt;BR&gt;&lt;BR&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;4.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;You could use this UI to create, delete, edit your self-issued cards. A limitation in Beta 1 is you have to fill in all the fields, before a self-issued card can be created. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;As described in the &lt;A href="http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnwebsrv/html/identitymetasystem.asp"&gt;Identity Metasystem article&lt;/A&gt;, InfoCard plays a role as an Identity Selector in the identity metasystem universe.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;In addition to this, InfoCard, in Beta 1, also ships with a local security token service (more later…), which plays role as an identity provider.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Others could easily build an Identity Provider that will interopt with InfoCard. Others could also play role as Relying Party (consuming the token); and others could play multiple roles. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;What’s in the Card? &lt;/I&gt;&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;The card (regardless of self-issued or issued by third party) contains only metadata information – the cards do &lt;U&gt;not&lt;/U&gt; hold claim values (i.e your name, address, zip code, birthday).&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;The metadata information has enough information for InfoCard System to communicate the Identity Provider to get the security token.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;So, who owns the data? Identity Provider; who consumes the data? Relying Party; and User, as the crucial player in the Identity Metasystem MUST approve the release of the data; and InfoCard’s role as the &lt;I&gt;Identity Selector&lt;/I&gt; is to help the user communicating to Relying Party (RP) and Identity Provider(IP), as well as identity pickers for the user. &lt;BR&gt;&lt;BR&gt;An Identity Provider hosts a security token service (STS); the primary function of this service is to exchange a token for another token. Applies this to our model, InfoCard System will authenticate to IP; the IP who owns the data will construct a new security token to you that you can present to RP.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;As said previously, InfoCard also ships with a local STS, which is capable of producing self-issued tokens. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;BR&gt;Well, it’s enough concepts for now; let’s explore the fun stuff (aka programming) later… &lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=430343" width="1" height="1"&gt;</content><author><name>andyhar</name><uri>http://blogs.msdn.com/members/andyhar.aspx</uri></author></entry></feed>