Hi,
I've always thought OAuth2 clients are out of the picture here, except that the resource server needs to introspect a client's token and it (the resource server) needs to authenticate to the introspection endpoint. Letting the actual OAuth2 clients (confidential or public ones) also introspect the endpoint would indeed conflate the roles, and overload the access token response protocol which provides all the info the actual client needs to know. The client only need to know the token info that lets it talk to the resource server, it does not need to introspect it like resource server does in order to make an authorization decision.

+1 to what Justin says...

Cheers, Sergey
On 20/07/15 10:39, Justin Richer wrote:
In OAuth, the token is opaque to the client. Clients in general don’t
need to know the kinds of token information that’s returned from the
introspection endpoint. Clients already get information about scopes and
expiration from the token endpoint, what else do they need? If they need
more information, this should be specified as an extension to the token
endpoint, in my opinion. Note that early drafts of this document
targeted both clients and protected resources, but after discussion with
both implementors and the working group, this was pulled back to just
the resource server because that’s what people are doing with it.

A single piece of software can be both an OAuth client and an OAuth
protected resource, but those are two different roles in the system and
shouldn’t be conflated.

  — Justin

On Jul 20, 2015, at 9:34 AM, William Denniss <wdenn...@google.com
<mailto:wdenn...@google.com>> wrote:

Even if the primary target is the protected resource, is there a
reason to exclude use by clients?

The stated reason for this requirement in the spec is to prevent token
scanning, but there are other ways to prevent that.

On Mon, Jul 20, 2015 at 7:01 AM, Justin Richer <jric...@mit.edu
<mailto: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 <mailto: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
    <mailto: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 <mailto: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 <http://aaronparecki.com/>

        On Sat, Jul 18, 2015 at 10:04 PM Justin Richer
        <jric...@mit.edu <mailto: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 <mailto: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 <http://aaronparecki.com/>
            @aaronpk <http://twitter.com/aaronpk>

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



        _______________________________________________
        OAuth mailing list
        OAuth@ietf.org <mailto: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