<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Travis Spencer - Software Engineer</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/" />
    <link rel="self" type="application/atom+xml" href="http://travisspencer.com/atom.xml" />
    <id>tag:travisspencer.com,2008-11-06://1</id>
    <updated>2013-04-19T14:33:00Z</updated>
    <subtitle>My blog with news and thoughts of interest to software engineers and their friends</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.38</generator>

<entry>
    <title>Videos from Nordic APIs</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2013/04/nordic-apis-presentations.html" />
    <id>tag:travisspencer.com,2013://1.146</id>

    <published>2013-04-19T09:09:48Z</published>
    <updated>2013-04-19T14:33:00Z</updated>

    <summary><![CDATA[Last month, I worked with my colleagues at Twobo and w/ Twobo's partner, Dopter, to&nbsp;organize&nbsp;the first every all-API-related event in the Nordics.&nbsp;It was great fun, and I'm really happy to play a part in the development of the API community...]]></summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="APIs" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="api" label="API" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="apis" label="APIs" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="axiomatics" label="Axiomatics" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jayway" label="Jayway" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="layer7" label="Layer 7" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="nordicapis" label="Nordic APIs" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="pingidentity" label="PingIdentity" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="social" label="social" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sogeti" label="Sogeti" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[Last month, I worked with my colleagues at <a href="http://2botech.com">Twobo</a> and w/ Twobo's partner, <a href="http://dopter.se">Dopter</a>, to&nbsp;organize&nbsp;the <a href="http://nordicapis.com/introducing-nordic-apis/">first every all-API-related event in the Nordics</a>.&nbsp;It was great fun, and I'm really happy to play a part in the development of the API community here in Northern Europe.&nbsp;Thanks again to all those who attended and to the <a href="http://nordicapis.com/sponsors/">sponsors</a>!<div><span style="font-size: 13px;"><br /></span></div><div><span style="font-size: 13px;">We had originally planned on a half-day event, but it </span><a href="http://nordicapis.com/sold-out-sessions-repeating-in-the-morning/" style="font-size: 13px;">filled up</a><span style="font-size: 13px;"> weeks ahead of time. So, we added an encore in the morning that included most of the afternoon's presentations. Besides Twobo and Dopter, we also had folks w/ us from </span><a href="http://nordicapis.com/sponsors/ping/" style="font-size: 13px;">Ping Identity</a><span style="font-size: 13px;">, </span><a href="http://nordicapis.com/sponsors/layer7-technologies/" style="font-size: 13px;">Layer 7 Technologies</a><span style="font-size: 13px;">, </span><a href="http://nordicapis.com/sponsors/jayway/" style="font-size: 13px;">Jayway</a><span style="font-size: 13px;">, </span><a href="http://nordicapis.com/sponsors/axiomatics/" style="font-size: 13px;">Axiomatics</a><span style="font-size: 13px;">, </span><a href="http://nordicapis.com/sponsors/samtrafiken/" style="font-size: 13px;">Samtrafiken</a><span style="font-size: 13px;">, and </span><a href="http://nordicapis.com/thank-you-for-a-great-first-nordic-apis/" style="font-size: 13px;">others</a><span style="font-size: 13px;">. We've uploaded </span><a href="http://nordicapis.com/all-slides-from-nordic-apis-stockholm-in-march/" style="font-size: 13px;">all the slides</a><span style="font-size: 13px;">&nbsp;and you can find the recordings of the afternoon sessions on </span><a href="https://www.youtube.com/user/nordicapis" style="font-size: 13px;">the Nordic APIs YouTube channel</a><span style="font-size: 13px;">. I gave one on&nbsp;</span><a href="http://www.youtube.com/watch?v=E6o3IKcQABY" style="font-size: 13px;">API security</a><span style="font-size: 13px;">&nbsp;and another about&nbsp;</span><a href="http://www.youtube.com/watch?v=YWiaKEdCFNg" style="font-size: 13px;">secure social media integration</a><span style="font-size: 13px;">,&nbsp;which I outlined a&nbsp;</span><a href="http://travisspencer.com/blog/2013/02/speaking-at-byod-and-api-event.html" style="font-size: 13px;">couple months ago</a><span style="font-size: 13px;">&nbsp;on this blog. Here's the recordings of my talks; would love your feedback.</span><div><div><div><br /></div>
<iframe style="padding-right:1em" width="200" height="113" src="http://www.youtube.com/embed/YWiaKEdCFNg" frameborder="0" allowfullscreen=""></iframe>
<iframe width="200" height="113" src="http://www.youtube.com/embed/E6o3IKcQABY" frameborder="0" allowfullscreen=""></iframe></div><div><br />
<div>The events were so well received that we have arranged a handful of others over the next few months. In May, we'll be in <a href="http://nordicapis.com/events/copenhagen-summer-2013/">Copenhagen, Denmark</a>,&nbsp;<a href="http://nordicapis.com/events/sundsvall-summer-2013/">Sundsvall, Sweden</a>&nbsp;and <a href="http://nordicapis.com/events/aarhus-summer-2013/">Aarhus, Denmark</a>. In early June, we'll go up to Norway to a city called <a href="http://nordicapis.com/events/trondheim-summer-2013/">Trondheim</a>. These events will be <i>free</i>, half-day conferences like the one in Stockholm last month. We'll be joined by folks from <a href="http://nordicapis.com/sponsors/comoyo/">Telenor Comoyo</a>, BlueVia (an initiative of Telenor and Telefonica), <a href="http://nordicapis.com/sponsors/sogeti/">Sogeti</a>, and others. In the fall, we'll be joined by a <a href="http://nordicapis.com/presenting-speakers-for-september-john-musser-adam-duvander-kin-lane/">number of speakers and presenters</a> from the Nordics and elsewhere for a <a href="http://nordicapis.com/events/stockholm-sep-2013/">2-day event in Stockholm</a>. The <a href="http://nordicapis.com/format-for-the-fall/">format</a> should be very personal and engaging w/ an unconference, panel discussions, demo track, concurrent talks, and, hopefully, a group dinner on the first evening.</div><div><br /></div><div>You can read more about this new series of events on <a href="http://nordicapis.com">nordicapis.com</a>, in this <a href="https://docs.google.com/document/d/1-PP02A1IXZQnif2kvhoiQqj2ZlnR4k3DKqpmKcZUTCs/edit?usp=sharing">press release</a>&nbsp;from Twbo and Dopter, <a href="http://blog.programmableweb.com/2013/04/17/nordic-apis-the-business-and-technology-of-apis/">on ProgrammableWeb</a>, and <a href="http://www.twobotechnologies.com/about/nordicapis/">on the Twobo Web site</a>. Really hope you'll join in the <a href="https://twitter.com/search?q=%23nordicapis%20OR%20%40nordicapis">conversation that's taking place on Twitter</a>, share your thoughts in a comment below,&nbsp;and join us for one of these upcoming events.</div></div></div></div>]]>
        
    </content>
</entry>

<entry>
    <title>Speaking at BYOD and API Events</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2013/02/speaking-at-byod-and-api-event.html" />
    <id>tag:travisspencer.com,2013://1.145</id>

    <published>2013-02-16T09:11:51Z</published>
    <updated>2013-02-16T20:56:21Z</updated>

    <summary><![CDATA[ I'll be heading up to Stockholm next week where I'll be presenting on BYOD. I'll be joined by others from StjärnaFyrkant, Ping Identity, PwC, Nokia, Sony, Telia, UnboundID, and my colleagues from&nbsp;Twobo. (I think some of the guys from...]]></summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Identity" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="api" label="API" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="axiomatics" label="Axiomatics" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="byod" label="BYOD" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ca" label="CA" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="cloudcomputing" label="Cloud Computing" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="dopter" label="Dopter" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="events" label="Events" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="identity" label="Identity" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="janrain" label="Janrain" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jayway" label="Jayway" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mobile" label="Mobile" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="nordicapis" label="Nordic APIs" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="pingidentity" label="PingIdentity" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="twobo" label="Twobo" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="unboundid" label="UnboundID" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[<a href="http://pingidentity.com"><img src="http://www.twobotechnologies.com/assets/images/partners/ping-logo.gif" style="float:right; width: 200px; border: none; margin: auto auto 0.5em 0.5em; height: auto" /></a>
I'll be heading up to Stockholm next week where I'll be presenting on BYOD. I'll be joined by others from <a href="http://www.stjarnafyrkant.se/">StjärnaFyrkant</a>, <a href="http://pingidentity.com">Ping Identity</a>, PwC, Nokia, Sony, Telia, <a href="http://unboundid.com">UnboundID</a>, and my colleagues from&nbsp;<a href="http://2botech.com">Twobo</a>. (I think some of the guys from <a href="http://axiomatics.com">Axiomatics</a> will be around too.) You can find the <a href="http://2botech.com/stfy-byod">full agenda here</a>. My session is entitled "Turning your Organization into a Platform: Securely exposing data to apps running on employees' devices." During my talk, I'll present on how social media, mobile, cloud, and big data are having a "platformification effect" on organizations, forcing them to open up data and processes in new ways. I'll give a few examples of orgs who have done this, including my favorite, <a href="http://www.apievangelist.com/2012/10/28/pearson-sets-example-for-how-other-publishing-apis-should-do-it/">Pearson</a>. <img src="https://lh4.googleusercontent.com/-uwpUt-hYMjY/ULt8JNqtkvI/AAAAAAAAACE/38eomCIEi3M/s500/soc_mob_cc_big_daa.gif" style="float:right; width: 300px; height: auto" />As organizations undergo this shift, it is important that the APIs which they expose take into account the identity of the user who invokes them. Coupling this w/ information about the app/client, location, device, and other context, organizations&nbsp;can make calculated&nbsp;decisions&nbsp;about whether or not they should return the requested resources or not. In this way, BYOD and COPE are irrelevant. What's relevant is who the user is and what they are allowed to do in a given situation. I explained this in <a href="http://2botech.com/whitepapers">more detail in a whitepaper</a> that you can find on Twobo's site (in English and Swedish). I also <a href="http://www.mashup.se/blogg/importance-of-apis-in-solving-byod">blogged about this on Mashup.se</a> a few weeks ago, so check there for a bit more detail. The <b>event is February 21, and it starts at 12:00</b> w/ lunch. So, come in time to grab a bite and talk about <a href="http://www.twobotechnologies.com/blog/2012/12/byod-in-sweden-scandinavia-europe.html">how BYOD is effecting Europe</a> and beyond. <b>Attendance is free</b>, and you can <a href="http://www.twobotechnologies.com/blog/2013/02/directions-to-byod-event.html">find directions here</a>.<div><br /></div><div><a href="http://nordicapis.com/events/stockholm-march-2013/"><img src="http://nordicapis.com/wp-content/uploads/logo_nordic1.png" style="float:right; margin: auto auto 0.5em 0.5em; border: 0" /></a>Next month, at <a href="http://nordicapis.com">Nordic APIs</a>&nbsp;in Stockholm, I'll also be giving a very exciting presentation about some&nbsp;innovative&nbsp;new things that we're doing at Twobo with the <a href="http://janrain.com">Janrain</a> API. During my talk, I'll show how&nbsp;organizations&nbsp;can safely and&nbsp;securely&nbsp;use this service to integrate social media into their Web site as well as to publish back to them using a single API. I'll show how Janrain's service can be used with <a href="http://www.ca.com/us/secure-single-sign-on.aspx">SiteMinder from CA</a> to ensure that only authorized users gain access to sensitive parts of a Web site. What I'll demo allows Web site operators to uniformly consume&nbsp;anonymous,&nbsp;social and more trusted identities that are&nbsp;unaffected&nbsp;by the use or implementation of any particular upstream social network. I'll also show how Web site operators can combine Janrain's social media aggregation API and our integration with SiteMinder with other third-party tools, like Google Analytics, to use social more effectively.&nbsp;<b>This event will be on March 21 </b>at <a href="https://maps.google.com/maps?f=q&amp;source=embed&amp;hl=en&amp;geocode=&amp;q=jayway,+2B+Klara+%C3%96stra+kyrkogata++11152,+stockholm&amp;aq=&amp;sll=37.0625,-95.677068&amp;sspn=36.452734,86.572266&amp;ie=UTF8&amp;hq=jayway,&amp;hnear=Klara+%C3%96stra+kyrkogata+2B,+111+52+Stockholm,+Sweden&amp;ll=59.330637,18.063433&amp;spn=0.024817,0.084543&amp;t=m&amp;z=14&amp;iwloc=A&amp;cid=2259071899837961493">Jayway's office</a> in downtown Stockholm. We'll be joined by presenters from <a href="http://dopter.se">Dopter</a>, <a href="http://jayway.com">Jayway</a>, Ping Identity, and Radio Sweden. We'll start w/ lunch at 12:00 and go till at least 16:00. (We might be joined by one or two more companies, so we may go till 17:00.) <b>The event is free</b>, and we are almost booked up, so&nbsp;<a href="http://nordicapismarch2013.eventbrite.com/?ref=elink">RSVP today</a>! <a href="http://nordicapis.com/events/stockholm-march-2013/">More details</a> on the agenda, speakers, etc. can be found on the <a href="http://nordicapis.com">Nordic APIs Web site</a>.</div><div><br /></div><div>[Disclosure: Twobo, my company, has a commercial relationship with Ping Identity, StjärnaFyrkant, UnboundID, Jayway, Dopter, CA, and Axiomatics; it also has an interest in both of these events.]</div>]]>
        
    </content>
</entry>

<entry>
    <title>Upcoming Cloud Computing Events in the Netherlands</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2012/09/upcoming-cloud-computing-event.html" />
    <id>tag:travisspencer.com,2012://1.144</id>

    <published>2012-09-21T12:44:10Z</published>
    <updated>2012-09-21T13:54:40Z</updated>

    <summary><![CDATA[This fall, I'll be presenting at IDentity.Next&nbsp;on behalf of my company,&nbsp;Twobo Technologies. At this&nbsp;conference, which takes place November 20th and 21st in the Hague, I'll be diving into various&nbsp;scenarios&nbsp;and use cases for the emerging provisioning standard, System for Cross-domain Identity...]]></summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Cloud Computing" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="cloudcomputing" label="Cloud Computing" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="events" label="Events" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mobile" label="Mobile" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[This fall, I'll be presenting at <a href="http://www.identitynext.eu/">IDentity.Next</a>&nbsp;on behalf of my company,&nbsp;<a href="http://twobotechnologies.com/">Twobo Technologies</a>. At this&nbsp;conference, which takes place November 20th and 21st in the Hague, I'll be diving into various&nbsp;scenarios&nbsp;and use cases for the emerging <a href="http://www.twobotechnologies.com/services/iam/provisioning.html">provisioning</a> standard, <a href="http://www.simplecloud.info/">System for Cross-domain Identity Management</a> (SCIM). This will be a&nbsp;sequel of sorts to the <a href="http://www.twobotechnologies.com/blog/2012/07/twobo-at-the-cloud-identity-summit.html">talk I did at the Cloud Identity Summit</a> in July where I gave an intro to the new protocol. If you're planning on attending and want to do your prep work, have a look through <a href="http://www.slideshare.net/2botech/scim-presentation-from-cis-2012">this slide deck</a>:<div><br /></div><iframe src="http://www.slideshare.net/slideshow/embed_code/13886301" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen=""> </iframe> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/2botech/scim-presentation-from-cis-2012" title="SCIM presentation from CIS 2012" target="_blank">SCIM presentation from CIS 2012</a> </strong> from <strong><a href="http://www.slideshare.net/2botech" target="_blank">Twobo Technologies</a></strong> </div><div style="margin-bottom:5px"><br /></div><a href="http://broadbandworldforum.com"><img src="http://www.twobotechnologies.com/blog/blog_images/200x200.gif" align="right" style="float:right; padding-left: 4px" /></a><div style="margin-bottom:5px">Solving the provisioning problem is one thing we must do to benefit from this new IT delivery model. Next month, I'll be traveling down to Amsterdam to discuss this and other challenges with hundreds of other&nbsp;attendees&nbsp;of the <a href="http://www.broadbandworldforum.com/conference/cloud-summit/">Broadband Cloud Summit</a> that's taking place as a part of this year's <a href="http://www.broadbandworldforum.com/">Broadband World Forum</a>. From the 16th to 18th of October, I'll be joined by tens of thousands of speakers and delegates from tons of&nbsp;organizations&nbsp;who are seeking to find new ways of using&nbsp;<a href="http://www.twobotechnologies.com/services/iam/">digital identity</a>, <a href="http://www.twobotechnologies.com/services/mobilesecurity.html">mobile computing</a>, and <a href="http://www.twobotechnologies.com/services/cloudsecurity.html">the cloud</a> to capitalize on emerging&nbsp;opportunities that they present to telcos and other service providers. Among these will be&nbsp;<a href="http://unboundid.com">UnboundID</a>, a <a href="http://www.twobotechnologies.com/about/partners.html">partner of Twobo's</a>, and hundreds of other exhibitors.&nbsp;</div><div style="margin-bottom:5px"><br /></div><div style="margin-bottom:5px">So, if you're going to be in the Netherlands over the next couple of months, <a href="http://travisspencer.com/contact-me.html">drop me a line</a>. I'd love to connect w/ you while there. If you're not, keep an eye out here, on <a href="http://www.twobotechnologies.com/blog/">Twobo's blog</a>, and on Twitter w/ the hash tags <a href="https://twitter.com/#!/search/?q=%23BBWF">#BBWF</a> and <a href="https://twitter.com/#!/search/%23idn12">#idn12</a>. As a speaker at IDentity.Next and an official blogger for the Broadband World Forum, I'll certainly have more to say about these events.</div><div style="margin-bottom:5px"><br /></div><div style="margin-bottom:5px">(This blog post was sponsored in part by <a href="http://www.informatandm.com/">Informa</a>, organizers of the Broadband World Forum.)</div>]]>
        
    </content>
</entry>

<entry>
    <title>Update on SCIM</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2012/04/update-on-scim.html" />
    <id>tag:travisspencer.com,2012://1.143</id>

    <published>2012-04-09T11:47:57Z</published>
    <updated>2012-04-09T12:24:38Z</updated>

    <summary>The SCIM crew descended on Paris two weeks ago for the IETF 83 meeting. We kicked it off by testing the interoperability of our SCIM implementations for the second time. (IIW last fall was the first.) We paired up about...</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Identity" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="identity" label="Identity" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="identitymanagment" label="identity managment" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="pineone" label="PineOne" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="pingidentity" label="PingIdentity" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="scim" label="SCIM" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="security" label="security" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[<b id="internal-source-marker_0.6349081203807145" style="color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-size: medium; "><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; "><img width="250" class="mt-image-right" style="float: right; margin: 0 0 20px 20px" src="http://3.bp.blogspot.com/-7pT3W7wJVHg/T3s-4om8boI/AAAAAAAAAIE/jrtE5Qiveyc/s1600/DSC00813.JPG" />The SCIM crew descended on Paris two weeks ago for the </span><a href="http://www.ietf.org/meeting/83/index.html"><span style="font-size: 15px; font-family: Arial; color: rgb(17, 85, 204); background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">IETF 83 meeting</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">. We kicked it off by testing the interoperability of our SCIM implementations for the second time. (</span><a href="https://www.pingidentity.com/blogs/pingtalk/index.cfm/2011/10/20/SCIM-interop-shows-specification-coming-to-life"><span style="font-size: 15px; font-family: Arial; color: rgb(17, 85, 204); background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">IIW last fall</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; "> was the first.) We paired up about a half dozen clients with roughly the same number of servers, and ran them through </span><a href="http://code.google.com/p/scim/wiki/FirstInteropEvent"><span style="font-size: 15px; font-family: Arial; color: rgb(17, 85, 204); background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">two dozen use cases</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">. Participants were there from </span><a href="http://www.bcpsoft.fr/"><span style="font-size: 15px; font-family: Arial; color: rgb(0, 0, 204); font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">BCPSOFT</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">, </span><a href="http://www.courion.com/"><span style="font-size: 15px; font-family: Arial; color: rgb(0, 0, 204); font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">Courion</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">, </span><a href="http://www.gluu.org/?p=920"><span style="font-size: 15px; font-family: Arial; color: rgb(17, 85, 204); font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">Gluu</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">, </span><a href="http://www.nexussafe.com/sv/Resource-Center/Standards/SCIM/"><span style="font-size: 15px; font-family: Arial; color: rgb(17, 85, 204); font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">Nexus</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">, </span><a href="http://blog.sailpoint.com/2011/12/scim/"><span style="font-size: 15px; font-family: Arial; color: rgb(17, 85, 204); font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">SailPoint</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">, </span><a href="http://www.salesforce.com/"><span style="font-size: 15px; font-family: Arial; color: rgb(0, 0, 204); font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">Salesforce</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">, </span><a href="http://www.unboundid.com/blog/2012/03/21/scim-rising-new-capabilities-and-a-move-to-ietf/"><span style="font-size: 15px; font-family: Arial; color: rgb(17, 85, 204); font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">UnboundID</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">, </span><a href="http://hasini-gunasinghe.blogspot.se/2012/03/scim-interop-event-at-ietf-83rd-meeting.html"><span style="font-size: 15px; font-family: Arial; color: rgb(17, 85, 204); font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">WSO2</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">, and I was there testing </span><a href="https://www.pingidentity.com/"><span style="font-size: 15px; font-family: Arial; color: rgb(0, 0, 204); font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">Ping's</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; "> new on-demand cloud identity management service, </span><a href="https://www.pingidentity.com/products/pingone/"><span style="font-size: 15px; font-family: Arial; color: rgb(17, 85, 204); background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">PingOne</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">. It was a great time, and </span><a href="https://docs.google.com/spreadsheet/ccc?key=0AtYxhHKU0YhodEdEaW1TaUsyM2h2cjhjbllabkhuUWc"><span style="font-size: 15px; font-family: Arial; color: rgb(17, 85, 204); background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">the results</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; "> were very positive.</span><br /><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; "></span><br /><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; "><img alt="tower.jpg" src="http://www1.travisspencer.com/blog_images/tower.jpg" width="125" height="260" class="mt-image-left" style="float: left; margin: 0 20px 20px 0" />The next morning was the Birds of a Feather (BoF). Trey Drake of UnboundID and Morteza Ansari of </span><a href="http://www.webex.com/"><span style="font-size: 15px; font-family: Arial; color: rgb(17, 85, 204); background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">Cisco WebEx</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; "> gave an overview of </span><a href="http://www.simplecloud.info/"><span style="font-size: 15px; font-family: Arial; color: rgb(17, 85, 204); background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">SCIM 1.0</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">, and talked through the </span><a href="http://www.ietf.org/mail-archive/web/scim/current/msg00144.html"><span style="font-size: 15px; font-family: Arial; color: rgb(17, 85, 204); background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">proposed charter of an IETF Working Group</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; "> (WG) that would define the next version of the protocol. I have never participated in the formation of a WG before, so the process was unfamiliar to me. I was expecting the WG to be formed on the spot, but, apparently, that's not the way it works. Instead, BoF attendees raise issues that are ironed out on </span><a href="http://www.ietf.org/mail-archive/web/scim/current/maillist.html"><span style="font-size: 15px; font-family: Arial; color: rgb(17, 85, 204); background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">the mailing list</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">. After the issues are addressed, an IETF Area Director (AD) will decide if the WG should be formed, who should chair it, etc. This will take about 2 to 3 months, so stay tuned.</span><br /><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; "></span><br /><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">In the meantime, some of us will be chatting at EIC on a </span><a href="http://www.id-conf.com/sessions/981"><span style="font-size: 15px; font-family: Arial; color: rgb(17, 85, 204); background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">panel about SCIM</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">, we'll be doing more interop testing at </span><a href="http://iiw14.eventbrite.com/"><span style="font-size: 15px; font-family: Arial; color: rgb(17, 85, 204); background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">IIW 14</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; "> (or nearby), and we'll be discussing stuff on the </span><a href="http://www.ietf.org/mail-archive/web/scim/current/maillist.html"><span style="font-size: 15px; font-family: Arial; color: rgb(17, 85, 204); background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">new IETF mailing list</span></a><span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; white-space: pre-wrap; ">. So, come join the growing SCIM community in Munich, San Francisco, or in cyberspace :-)</span></b><div><font color="#000000" face="Arial"><span style="font-size: 15px; white-space: pre-wrap;"><br /></span></font><b style="color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-size: medium; "></b><div><b style="color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-size: medium; "></b> 
</div></div>]]>
        
    </content>
</entry>

<entry>
    <title>Authenticating to a WCF service with a SAML bearer token</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2012/01/authenticating-to-a-wcf-servic.html" />
    <id>tag:travisspencer.com,2012://1.142</id>

    <published>2012-01-22T14:40:55Z</published>
    <updated>2012-01-22T21:05:05Z</updated>

    <summary><![CDATA[A question that has been coming up a lot lately is how does one send a SAML bearer token to downstream WCF service?&nbsp;In each of the recent cases, a front-end app was being presented with a token that it needed...]]></summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term=".NET" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="net" label=".NET" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="geneva" label="geneva" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="pingidentity" label="PingIdentity" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="security" label="security" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sts" label="sts" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wcf" label="WCF" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wif" label="wif" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[<div style="text-align: left;">A question that has been coming up a lot lately is <b>how does one send a SAML bearer token to downstream WCF service?</b>&nbsp;In each of the recent cases, a front-end app was being presented with a token that it needed to convert to SAML before calling the back-end service. To do this, the Web app would send the incoming token or some other credential to an STS, get the SAML token back, and include it in its request to the next service as shown in the following sketch:</div><div><br /></div><div style="text-align: center;"><img alt="token_translation2.png" src="http://travisspencer.com/blog_images/token_translation2.png" width="379" height="275" class="mt-image-none" /></div><div><br /></div><div>To create such a system using .NET requires certain config on the client and server, so I'll enumerate what's required on each. <span style="background-color: yellow; font-weight: bold">At the end of this post, you'll find links to other blog&nbsp;entries&nbsp;w/ more detail and a link to download a sample project.</span></div><div><br /></div><div><b>Web Service Client</b></div><div><br /></div><div><ul><li><a href="http://travisspencer.com/blog/2010/03/getting-a-token-from-pingfeder.html">Get a bearer token from the STS</a> using the credential the client has (another token, username/password, cert, etc.)</li><li>Call the service</li><ul><li>Use the&nbsp;WS2007FederationHttpBinding binding and set the security mode to&nbsp;WSFederationHttpSecurityMode.TransportWithMessageCredential</li><li>On the binding's security object, <a href="http://travisspencer.com/blog/2012/01/cryptographic-operations-are-r.html">set the Message.IssuedKeyType to&nbsp;SecurityKeyType.BearerKey</a></li><li>When <a href="http://travisspencer.com/blog/2012/01/cryptographic-operations-are-r.html#comment-413232175">creating the channel factory</a>, call the&nbsp;ConfigureChannelFactory extension method from WIF</li><li>When using the factory to create the channel, call <a href="http://travisspencer.com/blog/2012/01/cryptographic-operations-are-r.html">CreateChannelWithIssuedTokenand and pass it the SAML token</a> you got from the STS</li></ul></ul></div><div><br /></div><div><b>Web Service</b></div><div><div><br /></div><div><ul><li>Use the&nbsp;WS2007FederationHttpBinding binding w/ transport security (as in the client)</li><li>Like in the binding of the client, set the Message.IssuedKeyType to&nbsp;SecurityKeyType.BearerKey</li><li>Make sure it's expecting the assertion to be signed by the cert of the STS (by wiring up an IssuerNameRegistry that will check)</li><li>Configure the <a href="http://travisspencer.com/blog/2009/02/getting-your-geneva-terms-stra.html">audience restriction</a>&nbsp;to be the same one included in the SAML assertion</li></ul>If you're self-hosting your WCF service on Windows 7, check out this&nbsp;write up&nbsp;from Aviad P. about&nbsp;<a href="http://aviadp.blogspot.com/2010/05/configuring-self-hosted-wcf-service.html">using netsh to configure HTTPS</a>. (This was the part of all this that took the longest for me. Grr!)</div><div><br /></div><div>If after reading the above, things aren't quite clear yet, check out these blog posts for more details:</div></div><div><br /></div><div><ul><li><a href="http://travisspencer.com/blog/2009/02/getting-your-geneva-terms-stra.html">Getting your Geneva Terms Straight</a></li><li><a href="http://travisspencer.com/blog/2012/01/cryptographic-operations-are-r.html">Cryptographic operations are required but token has no keys</a>
</li><li><a href="http://travisspencer.com/blog/2010/03/getting-a-token-from-pingfeder.html">Getting a token from PingFederate using WIF</a></li></ul></div><div><br /></div><div>If you're still stuck, have a look at this sample&nbsp;(licensed under the&nbsp;<a href="http://www.gnu.org/licenses/gpl-2.0.html">GNU GPL</a>), leave a comment here, and/or&nbsp;<a href="http://travisspencer.com/contact-me.html">email me</a>.</div><div><br /></div><div><div style="text-align: center;"><a href="http://travisspencer.com/blog_images/CallingBackendServiceWithBearerSamlToken.zip"><img alt="zipfile.jpg" src="http://travisspencer.com/blog_images/zipfile.jpg" width="117" height="111" class="mt-image-none" /></a></div><div style="text-align: center;"><a href="http://travisspencer.com/blog_images/CallingBackendServiceWithBearerSamlToken.zip"></a><a href="http://travisspencer.com/blog_images/CallingBackendServiceWithBearerSamlToken.zip">CallingBackendServiceWithBearerSamlToken.zip</a></div></div>]]>
        
    </content>
</entry>

<entry>
    <title>A Manageable System for Managing Passwords</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2012/01/a-managable-system-for-managin.html" />
    <id>tag:travisspencer.com,2012://1.141</id>

    <published>2012-01-18T14:47:52Z</published>
    <updated>2012-01-30T12:11:52Z</updated>

    <summary>Tons of passwords are an unfortunate reality. I&apos;m working hard every day to reduce the number of passwords that we have to use around the Web. Till it gets to a management number though, we need a way to cope....</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Security" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="passwords" label="passwords" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="security" label="security" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[<p>Tons of passwords are an unfortunate reality. I'm working hard every day to reduce the number of passwords that we have to use around the Web. Till it gets to a management number though, we need a way to cope. Everyone has a technique -- some put their passwords in a spreadsheet, others write them on post-its stuck to their computer screen, others use the same password(s) everywhere, some use a password manager in their browser. All of tese techniques have various security implications, however. We have to manage this chaos some how though, so the security issues are often disregarded. Is there a more secure way?</p>

<p>A better alternative would be one that doesn't require you to write anything down, isn't locked away in a computer that you don't have ready access to, and is unique per site and per account. One such technique is to create a set of steps, an algorithm, that you follow to create a unique password for every user account on every site that requires one. To do this, start by using something from the Web site that won't change, like the name; this is your "seed" value. For instance, your algorithm could be something like this:
</p><ol>
<li>Capitalize the first letter of the Web site's name and make the rest lowercase.</li>
<li>Take the first 4 characters of this name. If it is less than four characters, add underscores to make it at least four characters long.</li>
<li>Add some word that contains a symbol and a number and is easy to remember (e.g., P@nda1). The result is the password to use on the site.</li>
</ol>
<p></p>

<p>So, using this sample algorithm, the password for CNN would be this:
</p><ol>
<li>Cnn</li>
<li>Cnn_</li>
<li>Cnn_P@nda1</li>
</ol>
<p></p>

<p>For Spotify, it would be this:
</p><ol>
<li>Spot</li>
<li>Spot</li>
<li>SpotP@nda1</li>
</ol>
<p></p>

<p>The result is a strong passwords that while difficult to remember is easy to reproduce because the necessary steps are memorable. There's a problem w/ this though. If a baddie ever sees just two of your passwords, they'll have a very easy time guessing any of your others because they are so similar. So, here's an easy fix that makes things more secure</p>

<p>Download an app to your phone that can generate a password from an input phrase. This app should produce the same password every time it's given the same input. It should produce passwords that includes uppercase, lowercase, numbers, and symbols.  This app should not have permission to access the Internet. Some of the free ones require it, so they can download ads. Who knows though? They might also be uploading your passwords. An example of a good one for Android is <a href="https://market.android.com/details?id=com.quicosoft.passwordgeneratorpro">Password Generator Pro</a>.</p>

<p>Now, when you have to sign up for a new account and create a password, use your algorithm as described above. However, don't use that as the password. Instead, use it as input to the app. This will produce a random password from a phrase that's hard to guess but associated to the site you're visiting. With the the site-specific "seed," the common algorithm, and an app that's running on your phone which generates strong passwords, you'll have a pretty easy system for managing the chaos where you don't have to write anything down, each password is unique, and they can't be guessed.</p>

<p><b>Make sure you don't let people know your algorithm though or all this security breaks down.</b></p>

<p>If you have a better way to manage this mess or if you think there are issues w/ this system, leave a comment here or <a href="http://travisspencer.com/contact-me.html">drop me a line</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>AT&amp;T&apos;s use of OAuth in new API Platform</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2012/01/atts-use-of-oauth-in-new-api-p.html" />
    <id>tag:travisspencer.com,2012://1.140</id>

    <published>2012-01-15T00:53:51Z</published>
    <updated>2012-01-16T20:34:45Z</updated>

    <summary><![CDATA[Last Monday, AT&amp;T announced that they have launched a new API platform. As I wrote about on Kin Lane's API Evangelist blog, the PaaS includes various components to help developers quickly build and launch new applications. One of these is...]]></summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Security" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="api" label="API" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="att" label="AT&amp;T" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="cloudcomputing" label="Cloud Computing" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="oauth" label="oauth" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="security" label="security" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[Last Monday, <a href="http://www.attinnovationspace.com/innovation/story/a7779618">AT&amp;T announced</a> that they have launched a new API platform. As <a href="http://www.apievangelist.com/2012/01/16/atts-new-cloud-api-platform/">I wrote about on Kin Lane's API Evangelist blog</a>, the PaaS includes various components to help developers quickly build and launch new applications. One of these is an HTML5 SDK that simplifies what mobile Web application developers have to do to securely call the mobile network operator's new cloud services.<br />
<br />
The carrier is securing their API with OAuth 2. They support both the authorization code and client credentials grant types defined by that spec. <a href="http://travisspencer.com/assets_c/2012/01/att-oauth2-100.html" onclick="window.open('http://travisspencer.com/assets_c/2012/01/att-oauth2-100.html','popup','width=991,height=489,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://travisspencer.com/assets_c/2012/01/att-oauth2-thumb-400x197-100.gif" alt="att-oauth2.gif" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" height="197" width="400" /></a>They also allow users to authenticate to the Authorization Server (AS) w/ a username/password, a <a href="http://en.wikipedia.org/wiki/MSISDN">MSISDN</a> and a PIN, or by simply being connected to their network. Also, each of <a href="https://developer.att.com/developer/apiCatalogPage.jsp?passedItemId=9700222">the services</a> has a different scope. To get approval to use them, the app developer includes these when redirecting the subscriber to AT&amp;T's AS.<br />
<br />
The various authentication mechanisms are interesting, but what's even more intriguing to me is a <a href="http://www.sencha.com/products/touch">Sencha Touch</a> plug-in that is included w/ the SDK and how it works in tandem w/ a proxy. The plug-in exposes a JavaScript object model for the new cloud services that works naturally w/ this popular toolkit. Extending Sencha Touch like this allows developers who are already using that framework to quickly integrate the carrier's new services. For others that are not, it allows them to build UIs that look and feel like native apps on various mobile platforms while simultaneously simplifying the use of AT&amp;T's API. To see how, let me explain how the Sencha Service Access Layer (SAL) works w/ the proxy.<br />
<br />
<a href="http://travisspencer.com/assets_c/2012/01/att-paas-arch-103.html" onclick="window.open('http://travisspencer.com/assets_c/2012/01/att-paas-arch-103.html','popup','width=404,height=557,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://travisspencer.com/assets_c/2012/01/att-paas-arch-thumb-300x413-103.png" alt="att-paas-arch.png" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" height="413" width="300" /></a>As shown in the following figure, all requests to the AT&amp;T cloud go through an intermediary. This proxy is hosted by the same developer as the HTML5 app. The first time a user invokes the application, it will call the proxy which will find that it doesn't have an OAuth Access Token (AT) or Refresh Token (RT). For this reason, it will return an error rather than calling the carrier's cloud service. The Sencha plug-in will catch this and pop up an IFRAME displaying AT&amp;T's OAuth AS. (The samples don't display the address, but I would.) The user will authenticate as described above, and the AS will redirect the IFRAME to the callback handler which is hosted on the same server as the proxy. It will exchange the Access Code (AC) provided on the query string for an AT and RT. These will be persisted in a session. Subsequently, when methods are called on the plug-in, a request will be made to the proxy, the session will be used to find the AT, and the proxy will tack it onto the request that it forwards to AT&amp;T.<br />
<br />
This new API and its SDK provide an innovative way of using OAuth that simplifies the work that mobile Web application must do. The docs were great, the samples were very helpful, and I quickly figured out how to use the toolkit. I also found it interesting that a helper was used here to <a href="http://travisspencer.com/blog/2011/09/integrating-oauth-with-mobile.html">aid in securely consuming services from mobile apps</a> as I've talked about doing for other use cases.<br />
<br />
If you have questions or thoughts about this or the <a href="http://www.apievangelist.com/2012/01/16/atts-new-cloud-api-platform/">other blog post I wrote about this new API</a>, please feel free to lave a comment here or <a href="http://travisspencer.com/contact-me.html">drop me a note</a>.]]>
        
    </content>
</entry>

<entry>
    <title>Cryptographic operations are required but token has no keys</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2012/01/cryptographic-operations-are-r.html" />
    <id>tag:travisspencer.com,2012://1.139</id>

    <published>2012-01-07T09:32:19Z</published>
    <updated>2012-01-07T10:09:31Z</updated>

    <summary>Here&apos;s the scenario: You&apos;re creating a .NET app that uses active federation to get a token from an STS and submit it to a downstream service. That other service might be another STS or it might be a Web service...</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term=".NET" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="net" label=".NET" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="geneva" label="geneva" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="security" label="security" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sts" label="sts" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wcf" label="WCF" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wif" label="wif" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[Here's the scenario: You're creating a .NET app that uses active federation to get a token from an STS and submit it to a downstream service. That other service might be another STS or it might be a Web service written in .NET or some other language (doesn't matter). The token that you're getting from the STS is a <b>bearer token</b>. You have some code like this:<br /><br />private static void CallWebService(SecurityToken token)<br />{<br />&nbsp;&nbsp;&nbsp; var factory = GetServiceChannelFactory&lt;IFoobarService&gt;();<br />&nbsp;&nbsp;&nbsp; var channel = factory.CreateChannelWithIssuedToken(token);<br /><br />&nbsp;&nbsp;&nbsp; var order = channel.DoFoo();<br />}<br /><br />When the call to DooFoo is made, you get an error like this:<br /><br />The signing token Generic XML token:<br />&nbsp;&nbsp; validFrom: 01/07/2012 09:33:36<br />&nbsp;&nbsp; validTo: 01/07/2012 10:03:36<br />&nbsp;&nbsp; InternalTokenReference: Saml2AssertionKeyIdentifierClause( Id = 'U8ovpOcJlJFu7udUreVI_4I69vj' )<br />&nbsp;&nbsp; Token Element: (Assertion, urn:oasis:names:tc:SAML:2.0:assertion)<br />&nbsp;has no keys. <b>The security token is used in a context that requires it to perform cryptographic operations, but the token contains no cryptographic keys. Either the token type does not support cryptographic operations, or the particular token instance does not contain cryptographic keys.</b> Check your configuration to ensure that cryptographically disabled token types (for example, UserNameSecurityToken) are not specified in a context that requires cryptographic operations (for example, an endorsing supporting token).<br /><br />To fix this, do two things:<br /><br /><ol><li>Make sure the binding you're using for the service (not the STS, that doesn't matter) is WS2007FederationHttpBinding not WS2007HttpBinding or WSHttpBinding.</li><li>On that binding, set Security.Message.IssuedKeyType to SecurityKeyType.BearerKey.</li></ol><p>Error goes away and now you can fix the next problem ;-)</p><p>So, what was the deal? The token you had in hand was a bearer token, meaning there is no requirement on the presenter when submitting the token to prove that it was indeed the entity that got the token from the STS; however, in its default configuration, WCF is trying to do just that. Because the token doesn't have a <a href="http://travisspencer.com/blog/2009/02/what-is-a-proof-key.html">proof key</a> in it (the cryptographic key the error is talking about), WCF can't compute the digital signature it thinks it should send along.<br /></p><p>Alternatively, if you really do want to prove to the RP Web service that you were the one who got the token from the STS, ask for a Holder of Key (HoK) assertion. You can do this by changing the TokenType in the RST, but your STS will have to support this.</p><p>If you have questions on this, leave a comment below or <a href="http://travisspencer.com/contact-me.html">shoot me a mail</a>.<br /></p>]]>
        
    </content>
</entry>

<entry>
    <title>Calling One OAuth-protected API from Another</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2011/10/calling-an-oauth-10a-api-from.html" />
    <id>tag:travisspencer.com,2011://1.138</id>

    <published>2011-10-28T20:06:25Z</published>
    <updated>2011-10-28T22:51:32Z</updated>

    <summary>I got an email the other day from Pedro Félix, asking for my thoughts on an OAuth scenario that he was wondering about and discussing with Howard Dierking. As Pedro and I talked, I learned that he had a really...</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Security" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="oauth" label="oauth" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="security" label="security" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="twitter" label="Twitter" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[I got an email the other day from <a href="http://pfelix.wordpress.com/">Pedro Félix</a>, asking for my thoughts on <a href="http://stackoverflow.com/questions/7813135/any-references-regarding-an-oauth-2-0-scenario-where-the-client-is-a-web-servi">an OAuth scenario</a> that he was wondering about and <a href="http://codebetter.com/howarddierking/2011/10/24/some-more-thoughts-on-oauth-2-sample/">discussing</a> with <a href="https://twitter.com/howard_dierking">Howard Dierking</a>. As Pedro and I talked, I learned that he had a really interesting problem on his hands. Basically,<span style="font-weight: bold;"> </span><b>he wanted to create an OAuth 2.0 protected service that called an OAuth 1.0a protected service </b>(e.g., Twitter). So, what he had on his hands was a bunch of clients, tokens, services, and two different protocols that do things similarly but w/ slightly different names. Very confusing stuff.<br /><br />To begin making sense of all this, it's helpful to list out what we know:<br /><br /><ul><li>Pedro wants to call the Twitter API from his own API.</li><li>The Twitter service is an OAuth 1.0a Resource Server (RS).</li><li>Twitter has an OAuth 1.0a Authorization Server (AS).</li><li>The Twitter service naturally only trusts it's own AS.</li><li>Pedro's service is an OAuth 2 RS and an OAuth 1.0a Twitter client.</li><li>Pedro has an OAuth 2 AS.</li><li>Pedro's service naturally only trusts his own AS.</li><li>The
 Web app that calls Pedro's service is an OAuth 2.0 client and must 
submit Access Tokens (ATs) emitted by his own AS (not Twitter's) when 
calling his service.</li><li>The Resource Owner (RO) is a Twitter user and will authorize Pedro's service to call the Twitter API to modify their data.</li><li>The RO authenticates to Pedro's AS using Twitter's OAuth 1.0a AS.</li><li>Pedro's AS asks the RO to authorize the third-party client to access his service which in turn will access Twitter's.<br /></li></ul><br />With these basics in mind, have a look the the following picture that presents an overview of the actors involved:<br /><br /><img alt="oauth-to-oauth2.gif" src="http://travisspencer.com/blog_images/oauth-to-oauth2.gif" class="mt-image-none" style="" width="400" height="363" /><br /><br /><br />Now, to get an idea of how Pedro's service would call Twitter's, flip through animations in the following slide deck.<br />

<div style="width:425px" id="__ss_9929458"> <strong style="display:block;margin:12px 0 4px"></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9929458" marginwidth="0" marginheight="0" scrolling="no" width="425" frameborder="0" height="355"></iframe> <div style="padding:5px 0 12px"><a href="http://www.slideshare.net/travisspencer" target="_blank"></a> </div> </div><div><br />See how one OAuth protected resource can call another? Pretty cool stuff! It's also cool that if instead Pedro wanted to call the Facebook graph API which uses OAuth 2, it would work almost the exact same way. As if that we're cool enough though, what's even cooler is that this isn't just theory. I was able to implement this in PingFederate in about half the time it took me to write this blog post! If I have some time over the weekend when I'm not celebrating my little one's second birthday, I'll try to post a screencast.<br /><br /> Anyway, thanks Pedro and Howard for inviting me into your conversation. If you or anyone else has questions about this or other OAuth matters, please feel free to post a comment here or <a href="http://travisspencer.com/contact-me.html">send me a mail</a>.<br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>Implementing new OAuth Technique on Android</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2011/10/implementing-new-oauth-techniq.html" />
    <id>tag:travisspencer.com,2011://1.137</id>

    <published>2011-10-25T13:35:11Z</published>
    <updated>2011-10-25T15:11:27Z</updated>

    <summary>The other day I wrote about a way to use OAuth w/ mobile apps that was not susceptible to phishing and does not use the password anti-pattern. I just had to code it up and make sure it worked. What...</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Security" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="oauth" label="oauth" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="pingidentity" label="PingIdentity" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[The other day <a href="http://travisspencer.com/blog/2011/09/integrating-oauth-with-mobile.html">I wrote about a way to use OAuth w/ mobile apps</a> that was not susceptible to phishing and does not use the password anti-pattern. I just had to code it up and make sure it worked. What better time then 4 AM when the house is quite? Ah, jet leg ;-)<br /><br />Using <a href="https://twitter.com/vogella">Lars Vogel's</a> <a href="http://www.vogella.de/articles/AndroidCloudToDeviceMessaging/article.html">tutorial on C2DM</a>, <a href="https://www.pingidentity.com/resource-center/oauth-essentials.cfm">PingFederate's new OAuth server</a>, and a little Python Web app running on <a href="http://www.cherrypy.org/">CherryPy</a>, I found that it does actually work! Here's the high-level points to be aware of if you want to implement this:<br /><br /><ul><li>The <a href="http://code.google.com/android/c2dm/">C2DM API</a> is in beta, and you'll need to <a href="http://code.google.com/android/c2dm/signup.html">sign up for access</a> using a Google account. Developer accounts have a <a href="http://code.google.com/android/c2dm/quotas.html">limited quota</a>.<br /></li><li>You need to provide the email address you sign up w/ and a password to the <a href="http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html#Request">Google ClientLogin service</a> to get an OAuth-like Access Token (AT). You don't have to use your own password though; you can <a href="http://www.google.com/support/accounts/bin/static.py?page=guide.cs&amp;guide=1056283&amp;topic=1056286">create one specifically for this purpose</a> (which you'll have to do if you're <a href="http://googleblog.blogspot.com/2011/02/advanced-sign-in-security-for-your.html">using 2FA w/ your account</a> like I am).<br /></li><li>These tokens need to be renewed every so often, so, in your Web app, keep an eye out for errors. (It's not indicated by the HTTP status code but the contents of the body IIRC.)<br /></li><li>PingFederate's OAuth token endpoint is configured w/ a self-signed SSL cert by default, so you'll need to <a href="http://stackoverflow.com/questions/995514/https-connection-android#answer-1000205">work around that during development</a>.</li><li>There can be a bit of leg between the time you publish the OAuth Access Code (AC) and the time your app gets the message. Meanwhile, your user will be looking at a blank white browser window. To avoid this second or so delay, you can register a customer scheme in your app. Then, in the helper Web app, return a 302 to that as soon as you send the AC to the Google C2DM service. This will cause the app to come to the foreground immediately. Alternatively, put a little spinner in the Web page.<br /></li></ul>That's basically it. If you follow Lars' tutorial and keep these things in mind, I'm sure you'll be up and running in no time -- especially if you've woken up before anyone else and it's really quite out ;-) Here's a little demo of it running that will hopefully motivate you to get it coded up too. If you get stuck, <a href="http://travisspencer.com/contact-me.html">drop me a note</a>.<br /><br />
<object style="height: 390px; width: 640px"><param name="movie" value="http://www.youtube.com/v/SjqRBeKTKVw?version=3&amp;feature=player_profilepage" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed src="http://www.youtube.com/v/SjqRBeKTKVw?version=3&amp;feature=player_profilepage" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="640" height="360"></object>]]>
        
    </content>
</entry>

<entry>
    <title>Integrating OAuth with Mobile Apps</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2011/09/integrating-oauth-with-mobile.html" />
    <id>tag:travisspencer.com,2011://1.136</id>

    <published>2011-09-02T11:22:07Z</published>
    <updated>2011-10-21T22:53:39Z</updated>

    <summary>When creating a native mobile app, it is often necessary to call RESTful Web services securely using OAuth. To do this, the native app needs an Access Token (AT). There are various ways for the app to get such a...</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Security" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="oauth" label="oauth" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="rest" label="REST" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="security" label="security" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="webservices" label="Web Services" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[When creating a native mobile app, it is often necessary to call RESTful Web services securely using OAuth. To do this, the native app needs an Access Token (AT). There are various ways for the app to get such a token, each presenting certain pros and cons. Around the Web, you will find two primary suggestions on how to do this:<br /><br /><ol><li>From the native app, pop open a browser to the Authorization Server (AS) where the user will authenticate and authorize the native app to access their resources. Return the AT to the native app via a scheme registered with the mobile OS.<br /></li><li>Embed a Web browser control in the native app that renders the AS's Web pages inside it and get the AT as it goes by.<br /></li></ol>The problem with the first is that multiple applications can register for the same scheme, opening up the native app to phishing. The latter is a problem because the native app can see everything that goes by including the Resource Owner's (RO's) credentials. This is OK if you trust the app not to do that, but that isn't always the case and is reminiscent of the password anti-pattern that OAuth was designed to fix. For more details on these attacks, see <a href="http://w2spconf.com/2011/papers/felt-mobilephishing.pdf">this whitepaper</a> (PDF).<br /><br />At IIW this week, <a href="http://www.personal.com/">Personal's</a> CTO, <a href="https://twitter.com/TarikTech">Tarik Kurspahic</a>, organized a session to talk about how best to get OAuth tokens into native apps. In it, he, <a href="https://twitter.com/scottylogan">Scotty Logan</a> of Stanford University, myself, and the other participants came up with the following alternative to the popular suggestions above which does not allow the installed app to see the RO's credentials and is not susceptible to phishing. <br /><br />Here's a diagram showing what we came up w/.<br /><br /><img alt="oauth_mobile.gif" src="http://travisspencer.com/blog_images/oauth_mobile.gif" class="mt-image-none" style="" height="581" width="567" /><br /><br />This is basically traditional 3-legged OAuth w/ a twist, but it's involved. So let me explain:<br /><br /><ol><li>The native app pops open the mobile phone's browser to a Web page that is developed and hosted by the same org that owns the native app. On the URL of this request is the <a href="http://code.google.com/android/c2dm/#push">registration ID</a> of the app. This ID is unique to the app on a particular device and is provided by the Google or Apple notification service (see below).</li><li>This Web page redirects the RO's Web browser to the AS. In the 302, it stores the registration ID in a cookie.</li><li>The RO authenticates to the AS and grants the native app access their resources.</li><li>The AS redirects the RO back to the helper page which is registered as the callback. On the query string of this request in the Access Code (AC) and the cookie w/ the registration ID is also sent.<br /></li><li>Rather than resolving this code for an AT as in a traditional Web server flow, it sends the AC as the payload to either Google's or Apple's notification service. To do this, the helper app needs to use an app-specific credential to authenticate to the notification service. By authenticating the call w/ this app-specific key and by providing the saved registration ID, only the right app on the right device will receive the AC. </li><li>The notification service sends the message to the appropriate app on the appropriate mobile device. <br /></li><li>The app then sends the AC to the AS to get an AT.</li><li>It can then use the AT to securely call the API.<br /></li></ol><br />After the session, I ran this by <a href="https://twitter.com/paulmadsen">Paul Madsen</a>, <a href="https://twitter.com/weeUnquietMind">Brian Campbell</a>, and others. No one found any issues w/ it, but, like some in the session, they wondered why such a complicated arrangement was needed. Till the folks on the Android team and at Apple provide secure IPC in their mobile OSes, I don't see any alternative unless you can make certain assumptions or are comfortable w/ the risks associated w/ the common alternatives. If you know a better way or see any security issues w/ this, please leave a comment below or <a href="http://travisspencer.com/contact-me.html">drop me a line</a>.<br /><br />Thanks all for a great IIW and see ya in the spring!<br />]]>
        
    </content>
</entry>

<entry>
    <title>Update on OpenID and OAuth</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2011/05/update-on-openid.html" />
    <id>tag:travisspencer.com,2011://1.134</id>

    <published>2011-05-09T07:30:56Z</published>
    <updated>2011-05-09T12:14:29Z</updated>

    <summary>OpenID and OAuth are undergoing a lot of work ATM, and it can be confusing to those that aren&apos;t in the thick of it to keep up w/ where things stand. Based on what I heard last week at IIW,...</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Security" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="iiw" label="IIW" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="oauth" label="oauth" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="openid" label="OpenID" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="security" label="security" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[OpenID and OAuth are undergoing a lot of work ATM, and it can be confusing to those that aren't in the thick of it to keep up w/ where things stand. Based on what I heard last week at IIW, where a lot of this work happens, I thought I'd put together an update in hopes that it helps.<br><br>After OpenID 2.0 was around for a while, Google and IINM Facebook proposed a new version of the standard called OpenID Connect. This version of the protocol uses OAuth on the front-channel to securely access an API on the back-channel to get user attributes. Around the same time, a need in Japan to provide higher levels of assurance (LOA) and secure interaction w/ Web APIs from mobile applications resulted in the creation of another derivative of the protocol called OpenID Artifact Binding (AB). Last fall at IIW, the authors of each of these vNext protocols started working to align their efforts. The combined spec was commonly referred to by the authors and other insiders as OpenID ABC (as in Artifact Binding + Connect). This harmonization was tricky though because OAuth 2, which they each depend on, wasn't done and the timeframes of the initial customer needing OpenID AB and funding its development might not allow for the work to wait till OAuth was ready.<br><br>As of last week, it looks like the stars are aligning and these two updates of OpenID will be merged. This result will be called OpenID Connect rather than OpenID 3.0, OpenID AB, or OpenID ABC. It also looks like OAuth will finish in time for OpenID Connect to normatively reference it, something that isn't allowed by the IETF (which governs that emerging standard) unless the spec has been officially ratified. If OpenID Connect finishes before OAuth 2, it will have to reference the latest draft (which hopefully won't happen). A draft of OpenID Connect is on tap for Julyish.<br><br>OAuth was conceived of and developed in an open community where it became increasingly popular. Because of concerns about intellectual property rights (IPR), however, many large organizations couldn't or wouldn't adopt it. For this reason, it was submitted to the IETF and an IPR regime was put in place to alleviate such concerns. Soon after, a security issue was found, and the community rallied to fix it. This update was also contributed to the IETF. Not long after, Microsoft created a RESTful token issuance protocol which they called OAuth WRAP. This protocol wasn't compatible w/ OAuth in anyway, but, to the chagrin of some in the OAuth community, used its brand. Unlike OAuth proper, WRAP didn't support signatures; it relied solely on transport security and didn't define a way to do security at the message level. Signatures were purported to be the Achilles' Heel of OAuth which tripped up many developers, so this change would make implementation simpler and adoption greater (its proponents said). As a result, it too was contributed to the IETF and formed the basis of OAuth 2.<br><br><div style="text-align: center;"><img alt="" src="http://travisspencer.com/blog_images/oauth-timeline.gif" class="mt-image-none  yui-img" height="212" width="400"><br></div><br>Since then, support for signatures has been added and other ideas from OAuth proper have been fused together w/ WRAP. As the emerging standard grew, it was decided to break it apart into a core specification and other supporting ones. Some of supporting standards are JSON Web Tokens (JWT) which defines a way of representing security token in JSON (think WS-Security w/ curly braces). There are also specs for defining specific types of tokens, namely bearer and signed tokens. A supplementary profile defined by my colleague Brian Campbell specifies how a client should send a SAML assertion to an OAuth Authorization Server (AS) when it wants an access token in exchange. Currently, it is expected that the main specifications will be finalized in Julyish around the same time the draft of OpenID Connect will surface.<br><br>Tony Nadalon, who has been much more involved in this process than I have will be giving <a href="http://www.id-conf.com/speakers/326">his update tomorrow at EIC</a>, If you're here in Munich, don't miss that. (If he says anything contradictory to what I've written, I'll update this post.) In the meantime, if you read something that isn't accurate here, you have details to add, or if you have questions/comments, please <a href="http://travisspencer.com/contact-me.html">let me know</a>.]]>
        
    </content>
</entry>

<entry>
    <title>Calling On-prem Web Services from the Cloud</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2011/04/calling-on-prem-web-services-f.html" />
    <id>tag:travisspencer.com,2011://1.133</id>

    <published>2011-04-25T10:56:40Z</published>
    <updated>2011-04-27T07:07:31Z</updated>

    <summary>As organizations begin using and deploying cloud applications, some of their services are left on-premises (for various reasons), resulting in a hybrid architecture. In such deployments, the on-prem services sometimes need to be invoked securely from the cloud. When doing...</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Cloud Computing" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="net" label=".NET" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="cloudcomputing" label="Cloud Computing" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="geneva" label="geneva" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="pingidentity" label="PingIdentity" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="security" label="security" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sts" label="sts" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wif" label="wif" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[<p>As organizations
begin using and deploying cloud applications, some of their services are left
on-premises (for various reasons), resulting in a hybrid architecture. In such
deployments, the on-prem services sometimes need to be invoked securely from
the cloud. When doing so, an STS can be used to broker trust from the cloud
into the organization. Unfortunately, the <span style="font-style:italic">token</span>
issued by the IdP when authenticating end users isn't always available to the
cloud-based caller due to restrictions/limitations of the cloud platform. In
such cases, the on-prem STS can't be given a token asserted by a trusted issuer
that it can validate and transform. As a result, the on-prem services do not
have all the data needed to make authorization decisions, enforce licensing
agreements, etc. One possible solution to this problem is to allow the
cloud-based caller to specify in the message sent to the STS certain
end-user-related data that should be put in the token that is minted. This will
then be passed along to the on-prem services in a token asserted by the local
STS. This idea is shown in the following figure:</p>

<p style="text-align: center;"><img alt="" src="http://travisspencer.com/blog_images/clip_image001.png" class="mt-image-none  yui-img" height="327" width="430"></p>

<p>At first, this may
seem odd since the STS is the asserting party and it is being <span style="font-style:italic">told</span> what to assert. In cases where there is <span style="font-weight:bold">a trusted subsystem in place between the STS and the
cloud app</span>, however, it is safe IMO. Consider the alternative where the
cloud app doesn't have the original security token. Since the interface of an
STS is restricted to security tokens (by design), the client must create one
using the identity attributes provided to it by the PaaS environment in which
it's running. In other words, if the token asserted by the IdP isn't available,
the cloud app has to cook one up. In this case, it is the asserter, resulting
in the same sort of situation where it's the authority not the STS. The nice
thing about passing the end user data in the message is that the caller needn't
create a security token. There are tradeoffs w/ this approach, but there always
are ;-)</p>

<p>The WS-Trust
specification allows any XML to be included in the RST that the client sends to
the STS. Ping Identity has used this extensibility point in the protocol to
allow callers to include name/value pairs that PingFederate should include when
minting security tokens. As a result, it is very easy using that STS to
implement the sort of architecture described above. To do so, you would <a href="http://documentation.pingidentity.com/display/PF64/Managing+STS+Request+Parameters">configure
the STS w/ the attribute names</a> that can be passed in the request, stipulate
what to do if they are not (fault or do nothing), and include them in the RST.
Totally simple.</p>

<p>To make this even
simpler though, I extended WIF's RequestSecurityToken and
WSTrustRequestSerializer classes to make the client-side programming model
natural and easier for .NET developers. Using these, a cloud-based STS client
could pass the end user's identity info in the request rather than having to
create a security token. The result would look something like this:</p><pre style="color:#000000;background:#ffffff;"><span style="color:#800000; font-weight:bold; ">private</span> <span style="color:#800000; font-weight:bold; ">static</span> RequestSecurityTokenResponse RequestSecurityToken<span style="color:#808030; ">(<br></span> <span style="color:#696969; "></span>UserData userData<span style="color:#808030; ">)</span>
<span style="color:#800080; ">{</span>
 <span style="color:#696969; ">// Send a request parameter in the RST sent to the PingFederate </span>
 <span style="color: rgb(105, 105, 105);">// STS. These should be included in the security token that it <br></span> <span style="color:#696969; ">// </span><span style="color:#696969; ">mints</span> <span style="color:#696969; ">and sends back in the RSTR.</span>
 var factory <span style="color:#808030; ">=</span> GetChannelFactory<span style="color:#808030; ">(</span><span style="color:#808030; ">)</span><span style="color:#800080; ">;</span>
 <span style="background-color: yellow;">var requestParams <span style="color:#808030; ">=</span> <span style="color:#800000; font-weight:bold; ">new</span> RequestParameters<span style="color:#808030; ">(</span><span style="color:#800000; ">"</span><span style="color:#0000e6; ">ShoeSize</span><span style="color:#800000; ">"</span><span style="color:#808030; ">,</span> <br></span>  <span style="background-color: yellow"></span> <span style="background-color: yellow"></span><span style="background-color: yellow">userData<span style="color:#808030; ">.</span>ShoeSize<span style="color:#808030; ">,</span> <span style="color:#800000; ">"</span><span style="color:#0000e6; ">HairColor</span><span style="color:#800000; ">"</span><span style="color:#808030; ">,</span> userData<span style="color:#808030; ">.</span>HairColor<span style="color:#808030; ">)</span><span style="color:#800080; ">;</span></span>
 var rst <span style="color:#808030; ">=</span> <span style="color:#800000; font-weight:bold; ">new</span> TravisSpencer<span style="color:#808030; ">.</span>IdentityModel<span style="color:#808030; ">.</span>Protocols<span style="color: rgb(128, 128, 48);">.<br></span>  <span style="background-color: yellow"></span>WSTrust<span style="color:#808030; ">.</span>RequestSecurityToken<span style="color:#808030; "></span><span style="color:#808030; "></span>
 <span style="color:#800080; ">{</span><br>  <span style="background-color: yellow"></span> <span style="background-color: yellow"></span><span style="background-color: yellow">RequestParameters = requestParams,</span><br>   <span style="background-color: yellow"></span>RequestType <span style="color:#808030; ">=</span> WSTrust13Constants<span style="color:#808030; ">.</span>RequestTypes<span style="color:#808030; ">.</span>Issue<span style="color:#808030; ">,</span>
  <span style="background-color: yellow"></span> AppliesTo <span style="color:#808030; ">=</span> <span style="color:#800000; font-weight:bold; ">new</span> EndpointAddress<span style="color:#808030; ">(</span>appliesTo<span style="color:#808030; ">)</span><span style="color:#808030; ">,</span> 
 <span style="color:#800080; ">}</span><span style="color:#800080; ">;</span>
 RequestSecurityTokenResponse rstr<span style="color:#800080; ">;</span>
 var channel <span style="color:#808030; ">=</span> factory<span style="color:#808030; ">.</span>CreateChannel<span style="color:#808030; ">(</span><span style="color:#808030; ">)</span> <span style="color:#800000; font-weight:bold; ">as</span> WSTrustChannel<span style="color:#800080; ">;</span>
 var token <span style="color:#808030; ">=</span> channel<span style="color:#808030; ">.</span>Issue<span style="color:#808030; ">(</span>rst<span style="color:#808030; ">,</span> <span style="color:#800000; font-weight:bold; ">out</span> rstr<span style="color:#808030; ">)</span><span style="color:#800080; ">;</span>

 <span style="color:#800000; font-weight:bold; ">return</span> rstr<span style="color:#800080; ">;</span>
<span style="color:#800080; ">}</span>
</pre>


<p>If you have
questions about this or if you have this sort of problem and would like to
talk, please <a href="http://travisspencer.com/contact-me.html">let me know</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Federation, Entitlement Management, and the Cloud</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2011/04/federation-and-entitlement-man.html" />
    <id>tag:travisspencer.com,2011://1.132</id>

    <published>2011-04-15T10:44:23Z</published>
    <updated>2011-04-21T12:01:31Z</updated>

    <summary>Now that I&apos;m w/ Ping Identity in Sweden, it was only a matter of time before I bumped into the guys at Axiomatics. When I was in Stockholm the other day, we had fika and talked about federation, entitlement management,...</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Security" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="axiomatics" label="Axiomatics" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="cloudcomputing" label="Cloud Computing" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="eic" label="EIC" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="entitlementmangement" label="Entitlement Mangement" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="identity" label="Identity" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="identitymanagment" label="identity managment" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="pingidentity" label="PingIdentity" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="security" label="security" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[Now that <a href="http://travisspencer.com/blog/2010/12/moving-to-sweden.html">I'm w/ Ping Identity in Sweden</a>, it was only a matter of time before I bumped into the guys at <a href="http://www.axiomatics.com/">Axiomatics</a>. When I was in Stockholm the other day, we had <a href="http://en.wikipedia.org/wiki/Fika_%28coffee_break%29">fika</a> and talked about federation, entitlement management, financial services, and the upcoming <a href="http://www.id-conf.com/">EIC conference</a>. While we sipped our coffee, we discussed what it would look like to put our products, <a href="http://www.pingidentity.com/our-solutions/pingfederate.cfm">PingFederate</a> and <a href="http://www.axiomatics.com/products/axiomatics-policy-server.html">Axiomatics Policy Server</a> (APS), together to form a best-of-breed solution that provides organizations like financial institutions with the ability to easily get prospects into the <a href="http://books.google.se/books?id=19p4etAwSukC&amp;lpg=PA72&amp;ots=RvR8MfA5PR&amp;dq=%22customer%20corridor%22&amp;pg=PA72#v=onepage&amp;q&amp;f=false">customer corridor</a> by leveraging identities that they already have while simultaneously removing authentication and authorization from their line of business (LOB) applications.<br><br>Before our <a href="http://sv.wikipedia.org/wiki/Bullar">bullar</a> were done, we had come up w/ an architecture that used PingFederate's <a href="http://www.pingidentity.com/our-solutions/sso-cloud-identity.cfm">Cloud Identity Connectors</a> to reduce the number of steps <i>prospective </i>retail banking customers have to perform when deciding whether or not to do business with a particular financial institution. Using these, prospects can connect with Facebook, Google, Twitter, or other social networks to easily provide basic information about themselves (e.g., the country they live in). With this, a bank can show the prospect personalized and targeted information such as local contact phone numbers, state- or country-specific terms of service, local market news (e.g., exchange rates for the Krona if in Sweden or USD if in the States), and locations of nearby branches and ATMs. Using existing identities, organizations can provide Web surfers with more relevant information, helping them find what they need to decide to begin doing business with the provider.<br><br>In the banking scenario that we were chatting about as well as in many others, security in critical. In such cases, social sign-on, though helpful in reducing friction and increasing conversion rates, cannot provide a high enough level of assurance (LoA) that a person really is who they say they are. To overcome this, after someone signs up for an account, a bank would verify their physical identity and then provide them w/ a new digital identity. Using the new one and <i>not</i> a social network identity, the customer could gain access to higher value assets like online banking. This account would be stored in a directory maintained by the financial institution. Even with this and the support for all the different protocols used by the various social networks, our architecture was simple because <a href="http://www.pingidentity.com/our-solutions/pingfederate.cfm?#panel3">PingFederate supports so many types of identity providers</a>. The overall scheme we cooked up is shown in the following sketch:<br><br><img alt="" src="http://travisspencer.com/blog_images/PingFederate%2BAxiomatics.gif" class="mt-image-none  yui-img" height="450" width="481"><br><br>When a prospect or customer accesses the banking Web site, they are given the opportunity to use a social login or an identity provided by the bank. Regardless, information about the requested page and how the user authenticated is sent to APS in a XACML message which renders a decision about whether or not access should be granted or denied. As a result, if a prospect has authenticated using a social networking account, APS will not allow them to access sensitive area of the Web site; instead it will redirect them back to the login page where they can login using a more trustworthy identity. If APS decides that access should be allowed to the page, which buttons, tabs, bank accounts, and other elements should be render will also be determined using claims asserted by PingFederate.<br><br>With an architecture like this, the application doesn't have to understand the numerous federation protocols and security tokens used by the various social networks. It also doesn't have to interface directly with the identity store where customers are kept which could be an LDAP directory, a RDBMS, a mainframe, and/or something else. The LOB application handles identities as claims asserted by PingFederate, giving it <i>one </i>normalized representation of the customer or prospect. Authorization rules that governs access to resources are also maintained outside of the application. Policies can be stored centrally and updated without recompiling or redeploying the application. <br><br>After finishing our coffee, we couldn't help ourselves; it seemed so simple, we had to try to implement it. Before I had to catch my train home, we had the basics working. It didn't require any custom coding whatsoever. (The only coding needed was for the online banking application because neither of us had one of those.) <br><br>Given that we are both going to be at <a href="http://www.id-conf.com/">EIC</a>, we thought we might show it off there. Stay tuned on that. In the meantime, if you have questions or thoughts about this, please <a href="http://travisspencer.com/contact-me.html">drop me a line</a>.]]>
        
    </content>
</entry>

<entry>
    <title>Upcoming Conferences</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2011/04/upcoming-conferences.html" />
    <id>tag:travisspencer.com,2011://1.131</id>

    <published>2011-04-14T06:48:26Z</published>
    <updated>2011-04-14T07:27:51Z</updated>

    <summary>Connecting w/ you all here, on Twitter, and elsewhere around the intertubes is great, but it is no substitute for meeting face to face. In hopes that I can do so w/ as many of you as possible, I wanted...</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Misc" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="catalyst" label="Catalyst" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="cis" label="CIS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="csa" label="CSA" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="identitymanagment" label="identity managment" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="iiw" label="IIW" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="misc" label="misc" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[Connecting w/ you all here, on <a title="" target="" href="http://twitter.com/travisspencer">Twitter</a>, and elsewhere around the intertubes is great, but it is no substitute for meeting face to face. In hopes that I can do so w/ as many of you as possible, I wanted to let you know that I'll be at a number of upcoming events. If you're attending any of these, please <a title="" target="" href="http://www.travisspencer.com/contact-me.html">drop me a line</a>, so we can hookup. Here's the specifics:<br><br><ul><li>I'll be presenting on the fundamentals of Identity and Access Management (IdM) at the <a title="" target="" href="http://www.surrey.ac.uk/computing/news/events/2011/introduction_to_identity_and_access_management.htm">University of Surrey</a> outside of London next Tuesday at 14:00. (<a title="" target="" href="http://www.travisspencer.com/contact-me.html">Ping me</a> right away if you'd like to attend.)<br></li><li>I'll  be on a panel at the <a title="" target="" href="http://cloud-security.org.uk/csa-summit/">Cloud Security Alliance (CSA) Summit</a> in London next Thursday talking about information risk management w/ folks from Symantec, Qualys, and others.</li><li>I'll be in Portland, Oregon from April 30 to May 1 to <a title="" target="" href="http://www.georgefox.edu/offices/academic_affairs/commencement/index.html">graduate from GFU</a> w/ my MBA :-)<br></li><li>Off to San Francisco after that for the <a title="" target="" href="http://iiw.idcommons.net/Main_Page">Internet Identity Workshop (IIW)</a> from May 2 to 5.</li><li>Then, I'll be presenting and participating in some panel discussions at the <a title="" target="" href="http://www.id-conf.com/">European Identity Conference (EIC)</a> in Munich, Germany from May 10 to 13.</li><li>July 18 to 21, I'll be attending and presenting at the <a title="" target="" href="http://www.cloudidentitysummit.com/">Cloud Identity Summit</a> in Keystone (which is in the Rockies outside of Denver, Colorado).</li></ul>I may also attend <a title="" target="" href="http://www.gartner.com/technology/summits/na/catalyst/">Catalyst</a> in San Diego at the end of July. If you're going to be at that or any of the others, please <a title="" target="" href="http://www.travisspencer.com/contact-me.html">let me know</a>. I'd love to get together for a coffee.<br>]]>
        
    </content>
</entry>

</feed>
