Ahhh, I see what you&#39;re going for.&nbsp; It&#39;s a very interesting idea.<br><br><div><span class="gmail_quote">On 8/30/07, <b class="gmail_sendername">James Henstridge</b> &lt;<a href="mailto:james@jamesh.id.au">james@jamesh.id.au
</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">On 30/08/2007, John Ehn &lt;<a href="mailto:john@extremeswank.com">john@extremeswank.com
</a>&gt; wrote:<br>&gt; James,<br>&gt;<br>&gt; Sorry, but I&#39;m having problems following the flow.&nbsp;&nbsp;It seems like an<br>&gt; interesting idea, though.&nbsp;&nbsp;Can you provide with a little more information on<br>&gt; how these components would interact?
<br><br>Okay.&nbsp;&nbsp;The basic idea was that instead of creating a special protocol<br>for two OpenID relying parties to communicate with each other was for<br>the web services data provider to act as an OpenID provider.<br><br>
So, lets assume that the data consumer wants an auth token for the<br>user identified by <a href="http://user.identifier.url">http://user.identifier.url</a>.&nbsp;&nbsp;With normal OpenID<br>authentication, you&#39;d perform discovery to find the user&#39;s OpenID
<br>provider.&nbsp;&nbsp;To request an auth token though we need to talk to the data<br>provider, so instead we skip discovery and perform an authentication<br>request to the data provider&#39;s endpoint.&nbsp;&nbsp;The parameters might look
<br>something like this:<br><br> * openid.mode = checkid_setup<br> * openid.claimed_id = <a href="http://user.identifier.url">http://user.identifier.url</a><br> * openid.identity = <a href="http://user.identifier.url">http://user.identifier.url
</a><br> * openid.return_to = <a href="http://data.consumer/.">http://data.consumer/.</a>..<br> * openid.ns.auth = ...<br> * (additional parameters related to the auth token request)<br><br>The data provider would then decide whether to grant the auth token
<br>(possibly by performing OpenID authentication against<br><a href="http://user.identifier.url">http://user.identifier.url</a>, and/or asking the user), then send a<br>response back like:<br><br> * openid.mode = id_res<br>
 * openid.claimed_id = <a href="http://user.identifier.url">http://user.identifier.url</a><br> * openid.identity = <a href="http://user.identifier.url">http://user.identifier.url</a><br> * openid.return_to = <a href="http://data.consumer/.">
http://data.consumer/.</a>..<br> * openid.ns.auth = ...<br> * openid.auth.token = ...<br> * openid.auth.secret = ...<br><br>The data consumer knows that the request came from the data provider<br>due to the signature on the OpenID response.&nbsp;&nbsp;The data provider knows
<br>which user to create the token for because it was present in the<br>OpenID request.&nbsp;&nbsp;The data provider can verify that the web browser<br>user is that user because control gets transferred to the data<br>provider during the authentication process.
<br><br>This all assumes that the data consumer has already authenticated the<br>user, so knows which identity URL to request a token for from the data<br>provider.<br><br>&gt; I was really trying to keep everything dumb and simple.&nbsp;&nbsp;The concept I was
<br>&gt; going for was &quot;piggy-back on OpenID, but include a way to programmatically<br>&gt; log on to the OpenID Provider&quot;.&nbsp;&nbsp;The problem I saw with OpenID was that<br>&gt; there are about a million different ways to authenticate with an OpenID
<br>&gt; Provider, from HTML forms to digital certificates.&nbsp;&nbsp;Most require the User<br>&gt; Agent to be a web browser.&nbsp;&nbsp;However, there is no standard way to just pass a<br>&gt; credential that can prove that you are who you say you are.
<br><br>Well, OpenID authentication requests are designed to let the OP<br>perform whatever checking they want before sending a response.&nbsp;&nbsp;So by<br>making the data provider act as an OP, it has the same freedom<br>(including the freedom to issue its own OpenID authentication request
<br>to the user&#39;s actual OP).<br><br>&gt; I was trying to solve the problem by coming up with an automatable (if<br>&gt; that&#39;s a word) way to authenticate with an OpenID Provider.&nbsp;&nbsp;If we have<br>&gt; that, there&#39;s no need to pass around a special token, because we can just
<br>&gt; use standard OpenID authentication if we want to log on to another system.<br>&gt; So, I proposed just having the Consumer get a key from the OpenID Provider<br>&gt; that it can use to automatically authenticate with the Provider in the
<br>&gt; future.&nbsp;&nbsp;The key is passed through the user when it&#39;s granted, because you<br>&gt; need the user to approve the whole thing anyway.<br><br>I think that this makes things more complicated than need be.&nbsp;&nbsp;If you
<br>want an auth token from the data provider it seems better to ask the<br>data provider for the key directly, giving it the chance to<br>authenticate the user before responding.<br><br>This also has the benefit that it does not require any special
<br>features from the user&#39;s OP -- the extension is purely concerned with<br>the interaction between data consumer and provider.<br><br><br>&gt; I don&#39;t expect this extension to fix all problems.&nbsp;&nbsp;It&#39;s only intended to
<br>&gt; solve a specific use case (website to website info sharing).&nbsp;&nbsp;I am working<br>&gt; on two additional extensions which will solve the other problems I see:<br><br>Sure.&nbsp;&nbsp;I doubt my suggested workflow would help with those use cases
<br>either (at least without some additional components).<br><br>James.<br></blockquote></div><br>