I totally agree with that - and that’s how we gonna implement it in identity 
server.

We are planning to introduce something called a “scope secret” - it’s like a 
client secret but for resources.

— 
cheers
Dominick Baier


On 20 Jul 2015 at 07:01:48, Justin Richer (jric...@mit.edu) wrote:

Because the target isn’t the client, it’s the protected resource. We’re 
re-using OAuth’s client credentialing mechanisms (optionally, you can use 
whatever you deem necessary), but it’s not a client that’s doing it. That’s why 
it was changed to a MUST — there may be public clients out there (which could 
also use RFC7591 to become non-public), but public resource servers don’t make 
nearly as much sense.

Additionally, the discussion for this was back in December during the WGLC, and 
the time for normative changes to this particular spec is largely over at this 
stage.

 — Justin

On Jul 20, 2015, at 12:03 AM, William Denniss <wdenn...@google.com> wrote:

I see in earlier drafts that client authentication MUST was a SHOULD.

Why not put it back to a SHOULD, and make these arguments in the Security 
Considerations?  By the sound of it in some implementations there are good 
reasons for doing client authentication, but they may not apply to everyone, so 
do we need to be so prescriptive?  An error response can be added for requests 
the server deems require client authentication.

It wouldn't have to be an all-or-nothing policy choice either, a server could 
chose to reject requests from confidential clients where client authentication 
is not provided, but accept requests without client authentication from 
non-confidential clients.  A server that has sufficiently high entropy in the 
tokens, abuse protection on the endpoint, and is not concerned about an 
unrelated party (that happens to have a token intended for a different party) 
learning the token metadata, could simply not require any client authentication 
at all.

Apart from anything, it is really trivial to support non-confidential client 
usage, so why not?  Perhaps there are some use-cases that will turn up in the 
future (especially since as defined the introspection response is extensible). 
One I can think of now is debugging: it's useful during development to be able 
to inspect the tokens you get back from the AS.

Best,
William


On Sun, Jul 19, 2015 at 9:14 PM, Justin Richer <jric...@mit.edu> wrote:
In the case of a “public client” using a token, the authorization is the token 
that the resource server uses to call the introspection endpoint, along side 
the token that it is introspecting. This is exactly how the UMA protocol works: 
the resource server has a “Protection API Token” that it uses to call several 
endpoints at the AS, including the introspection endpoint. In UMA, this PAT is 
given to the resource server through a normal OAuth transaction with an end 
user who facilitates the RS->AS introduction.

And I think this is all actually a moot point because clients shouldn’t be 
doing the introspection in the first place — the whole spec is there to support 
resource servers introspecting at the auth server. So you probably don’t have 
“public client resource servers” out there. We simply re-used OAuth’s existing 
client authentication mechanism, that doesn’t make them clients. This decision 
is based on development and deployment experience (as in, several people 
independently built it exactly this way). Do you have a use case where you’ve 
got a protected resource that can’t hold credentials (either a client secret or 
a public/private keypair) to authenticate with, and can’t be introduced using 
OAuth to the AS as in UMA?

To your other point: An attacker has less of a chance of getting information 
about a token by fishing at a protected resource with tokens, since they’re not 
being returned information about the token other than the fact that the token 
worked. (Or at least it seemed to work because a result came back — you could 
easily give a suspected attacker valid-looking-but-fake data as one mitigation 
mechanism.) The introspection response can give you information about where 
else the token could be used, potentially. Additionally, the RS really ought to 
be preventing data-fishing attacks like this just for its own sake anyway. 
There are lots of techniques for doing this, but they tend to be specific to 
the kind of API that’s being served.

Requiring the resource server to authenticate with the authorization server 
also allows you to do a few other useful things. Our implementation, for 
example, limits the token information that is returned to a particular AS. This 
allows us to have tokens that can be used in multiple RS’s without those RS’s 
ever even knowing the token is powerful enough to be used elsewhere. It 
prevents information about the authorization from leaking to parties who have 
no business knowing.

Hope this helps clarify it,
 — Justin

On Jul 19, 2015, at 7:59 PM, Aaron Parecki <aa...@parecki.com> wrote:

How are public clients supposed to authenticate if there is no secret?

Isn't "fishing for valid tokens" just as much of an issue at the resource 
server? I don't see how having the introspection endpoint require client 
authentication actually solves the fishing problem since attackers could just 
fish against the resource server. In fact, if the resource server queries the 
introspection endpoint to check if tokens are valid, then that effectively 
gives an attacker a way to fish for tokens using the resource server's 
credentials.

---
Aaron Parecki
http://aaronparecki.com

On Sat, Jul 18, 2015 at 10:04 PM Justin Richer <jric...@mit.edu> wrote:
Public clients can use the token-based auth mechanism, can’t they? If you don’t 
have some form of authentication on the introspection endpoint, you end up with 
a way for people to anonymously and programmatically fish for valid token 
values. 

 — Justin

On Jul 19, 2015, at 6:30 AM, Aaron Parecki <aa...@parecki.com> wrote:

The introspection draft states that the introspection endpoint MUST require 
authentication of clients. It mentions either client authentication (id+secret) 
or a separate bearer token.

How are public clients expected to use the token introspection endpoint? I 
didn't see a note in the document about that at all.

----
Aaron Parecki
aaronparecki.com
@aaronpk

_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth



_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth



_______________________________________________  
OAuth mailing list  
OAuth@ietf.org  
https://www.ietf.org/mailman/listinfo/oauth  
_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to