I would argue that it's exactly the process that you describe below that makes my original comparison accurate. As a strawman example, OAuth2 core specifies a bunch of parameters that get sent to the Auth Endpoint, like scope and response_type. OpenID Connect defines a few more, like display. In order to get these protected by a signature, I have to take them out of the HTTP parameters and put them into a secondary object for message transit. What I believe you're missing is that there are times where I don't *want* to bundle everything up into a container object. Sure it's a relatively straightforward process to create a JSON object and sign it with JWS, but then the server has to unfurl the whole thing. What if I *want* to use my existing HTTP processors for pulling out variables? What if I need to do routing based on these? Connect takes the approach of letting you specify things in both the object and the query params and has rules about how their values have to match. The way we've had to do this in one of our systems is to take that signed JSON, preprocess it, and pretend that it's a parameter map so that other parts of the system can make any sense of it. I don't want to have to repeat that for every API I want to protect in a similar manner.

Are there use cases for putting everything into a single object? Absolutely! It's a great thing to be able to do, and we are using JWT and its kin all over the place to do just that. In Connect's case, there were other, more complex data structures that were at play that the request object uses. But if I just wanted to protect the default parameters with a signature, why should I jump through the hoops of putting it into a container? Are you really suggesting that in order to get signature protection on parameters, we should put everything into container objects? To me, this feels like a move back to SOAP more than anything else, and I'd like an alternative.

Could the MAC-draft be a lot better at defining these parameters? Absolutely, which is why I think we need to fix it. History informs us but it doesn't define us: Just because it hasn't been done right yet doesn't mean that it can't be done. Signing with the MAC algorithm *should* be simple. It should be at least as easy and powerful as OAuth1, and hopefully much easier if we do it right. I think that there have been real suggestions about *how* to do this as well.

At the end of the day, I think we need both approaches for different uses and deployments.

 -- Justin

On 08/14/2012 03:17 PM, Mike Jones wrote:
Replying to Justin's point about the OpenID Connect signed request object, 
Justin, I don't believe this comparison is accurate.  When an OpenID Request 
Object is signed, a single, self-contained object is being signed.  The signing 
described in the MAC spec signs a combination of payload elements and transport 
elements.  It's a testament to the complexity of this approach that Eran kept 
changing which elements were signed and which weren't in successive drafts.

Signing an OpenID Connect Request Object is simple (just apply JWS).  Signing 
using the MAC algorithm is an exercise left to the reader...

                                -- Mike

-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of Phil 
Hunt
Sent: Friday, August 10, 2012 10:03 AM
To: Richer, Justin P.
Cc: [email protected] WG
Subject: Re: [OAUTH-WG] MAC Discussion

There's no reason why the spec, or key elements of it can't be re-used.

But to assume it should be "THE" spec, goes against previous formal consensus 
(can't remember if it was Quebec or Paris meeting) and jumps the gun on defining what the 
problem is. If we jump into a spec without defining the problem, we're guessing.  What I 
saw of the previous email discussion was a lot of circular debate indicating no clear 
problem definition.

I agree, it would be nice to re-use code from previous implementations.  But 
that strikes me as an issue to raise when we discuss the implementation based 
upon future consensus of the problem.

Phil

@independentid
www.independentid.com
[email protected]





On 2012-08-10, at 7:49 AM, Richer, Justin P. wrote:

On Aug 10, 2012, at 3:00 AM, Hannes Tschofenig wrote:

Justin wrote:
"
I believe that there's value in per-message signing completely apart from the 
channel level encryption.
"

May well be. But we have to figure out what exactly the reasons are why there 
is value.
Yes, there is value in this, and that's why we're collecting a handful of use 
cases to support this. Otherwise, people wouldn't keep reinventing this. See 
SAML and OpenID Connect's signed request object for other examples.

Bill wrote:
"
I find the idea of starting from scratch frustrating. MAC solves a set of 
specific problems and has a well defined use case.
"

This would be a very quick process if we had ever done our home work properly.
It's not done, but it's not empty. Why throw it out? Whether or not we continue 
the draft itself or import its best ideas into a new draft is beside the point.

So, what are the problems it tries to solve? Yesterday I found an old 
presentation about MAC and the basic argument was that it has better 
performance than TLS. While that's true it is not a good argument per se. 
However, performance is not the only factor to look at and the negative 
performance impact caused by TLS is overrated.
This is a red herring, as pointed out by other use cases.

Here is the slide set I am talking about:
http://www.tschofenig.priv.at/Why_are_we_Signing.pdf

In many cases I had noticed that more time was spent with the pictures (in 
slides and blog post) than with the content. That's not good IMHO.

Bill, we can hardly call a specification "complete" if many of us don't know what problem 
it solves. John phrases it nicely as "Part of the problem with MAC has been that people could 
never agree on what it was protecting against." I am also interested in hearing about 
deployment constraints that people have. Blaine always said that many developers cannot get TLS to 
work. I am sure that's true but OAuth 2.0 requires TLS to be used anyway to secure the interaction 
with the authorization server.
It solves this problem: How can I use the framework of OAuth to get a temporary 
signing key that I can use to protect HTTP messages with signing (without 
stuffing my parameters into a structured document like a SAML or JWT 
assertion)? There are many justifications for that problem and use cases that 
expand on this, but that's the core thing that the MAC does.

Note: I am not saying that we are not going to standardize something like the 
MAC token (maybe with different details) but let us spend a little bit of time 
to figure out what threats we want to deal with.
It's not just about threats, it's about capabilities and features.

-- Justin

_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth
_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth
_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth



_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to