<div dir="ltr">The demo shows a running POC of OpenID Connect Token Bound Authentication in action. <br><br><div><div><div class="gmail_quote">---------- Forwarded message ----------<br>From: <b class="gmail_sendername">Brian Campbell</b> <span dir="ltr"><<a href="mailto:bcampbell@pingidentity.com">bcampbell@pingidentity.com</a>></span><br>Date: Fri, Mar 24, 2017 at 3:11 PM<br>Subject: Token Binding Demo Online<br>To: IETF Tokbind WG <<a href="mailto:unbearable@ietf.org">unbearable@ietf.org</a>><br><br><br><div dir="ltr"><div>I put up a demonstration of some token binding functionality that I wanted to share. There are a few parts to it, which I'll attempt to describe below. <br><br></div><div>At <a href="https://unbearable-bc.ping-eng.com:3000/open/" target="_blank">https://unbearable-bc.ping-<wbr>eng.com:3000/open/</a> is a token binding capable reverse proxy (of sorts) that is proxying requests to <a href="http://httpbin.org/" target="_blank">http://httpbin.org/</a> with a little path rewriting. If you go to <a href="https://unbearable-bc.ping-eng.com:3000/open/headers" target="_blank">https://unbearable-bc.ping-<wbr>eng.com:3000/open/headers</a> with a token binding (-10 to -13) capable browser, for example, you should see the a dump of the request headers including "Sec-Token-Binding". <br><br></div><div>The reverse proxy is also set up with some access control and will proxy from <a href="https://unbearable-bc.ping-eng.com:3000/" target="_blank">https://unbearable-bc.ping-<wbr>eng.com:3000/</a> to <a href="http://httpbin.org/" target="_blank">http://httpbin.org/</a> but require an authenticated session to do so. And it's using <a href="http://openid.net/specs/openid-connect-token-bound-authentication-1_0.html" target="_blank">OpenID Connect Token Bound Authentication</a> with an IDP at <a href="https://token-provider-bc.ping-eng.com:9031" target="_blank">https://token-provider-bc.<wbr>ping-eng.com:9031</a> to authenticate users. <br><br></div><div>So, for example, if you go to <a href="https://unbearable-bc.ping-eng.com:3000/headers" target="_blank">https://unbearable-bc.ping-<wbr>eng.com:3000/headers</a> without a session you will be redirected to the authorization endpoint at that IDP and presented with a login page. 

Use USERNAME: brian and PASSWORD: Test5555 on that page. After login, you'll be sent back to the relying party via the <a href="https://openid.net/specs/oauth-v2-form-post-response-mode-1_0.html" target="_blank">Form Post Response Mode</a> where the ID Token is sent though the browser. If you grab that token and decode it, there should be a confirmation method claim that has the hash of the Token Binding ID used with the relying party (i.e. "cnf": {"tbh": "...hash..."}).<br><br></div><div>The relying party sets up its own session from the OIDC SSO, which is a cookie named PA.unbearable that is a JWT. The page at <a href="https://unbearable-bc.ping-eng.com:3000/headers" target="_blank">https://unbearable-bc.ping-<wbr>eng.com:3000/headers</a> will dump the headers including that cookie. If you decode that JWT, you should also see that the local session is token bound with the confirmation method claim.<br><br></div><div>Things will still work when using a non token binding capable browser but none of the tokens will be token bound. <br></div><div><br></div><div>As a reminder, you can <span class="gmail-m_-3014243907988755182gmail-il">enable</span> Token Binding in <span class="gmail-m_-3014243907988755182gmail-il">Chrome</span> by putting chrome://flags/#enable-token-<wbr>binding into the address bar. <span class="gmail-m_-3014243907988755182gmail-il">Chrome and </span><span class="gmail-m_-3014243907988755182gmail-il"><span class="gmail-m_-3014243907988755182gmail-il">Chrome </span>Canary‎ are what I've been using to play with this. I'm hopping someone with the TB enabled Edge/IE can poke around on this demo too.<br><br><br></span></div><div><br><br><br><br><div><br></div></div></div>
</div><br></div></div></div>