Hi Mike, Hi all,

I read through draft-ietf-oauth-jwt-bearer-06 in an attempt to find out whether I would be able to produce an interoperable implementation from this document.

A few minor things came to my mind:

Section 3:

You write:
"
   1.   The JWT MUST contain an "iss" (issuer) claim that contains a
        unique identifier for the entity that issued the JWT.  Issuer
        values SHOULD be compared using the Simple String Comparison
        method defined in Section 6.2.1 of RFC 3986 [RFC3986], unless
        otherwise specified by the application.
"

What is not stated here is what are the two values that are compared against each other. One value is the issuer claim from the JWT and the other value is the, I guess, an entry from a whitelist of trusted issuers.



You write:
"
   2.   The JWT MUST contain a "sub" (subject) claim identifying the
        subject of the transaction.  The subject MAY identify the
        resource owner for whom the access token is being requested.

        A.  When using a JWT as an authorization grant, the subject
            SHOULD identify an authorized accessor for whom the access
            token is being requested (typically the resource owner, or
            an authorized delegate).

        B.  For client authentication, the subject MUST be the
            "client_id" of the OAuth client.
"

Should this rather read:

"
   2.   The JWT MUST contain a "sub" (subject) claim identifing the
        principal that is the subject of the JWT. Two cases need to
        be differentiated:

        A.  For the authorization grant, the subject
            SHOULD identify an authorized accessor for whom the access
            token is being requested (typically the resource owner, or
            an authorized delegate).

        B.  For client authentication, the subject MUST be the
            "client_id" of the OAuth client.
"

Why isn't the SHOULD under (A) actually a MUST? Then, the current text in A is so fuzzy that it actually doesn't allow someone to create a test case to test whether an implementation is interoperable or not. With B the situation is different. Is there something else we can say for A?

You write:

"
 3.   The JWT MUST contain an "aud" (audience) claim containing a
        value that identifies the authorization server as an intended
        audience.  The token endpoint URL of the authorization server
        MAY be used as a value for an "aud" element to identify the
        authorization server as an intended audience of the JWT.  JWTs
        that do not identify the authorization server as an intended
        audience MUST be rejected.  Audience values SHOULD be compared
        using the Simple String Comparison method defined in Section
        6.2.1 of RFC 3986 [RFC3986], unless otherwise specified by the
        application.
"

If the endpoint URL of the AS is not used then what else? Wouldn't it be useful to say "The token endpoint URL of the authorization server
        MUST be used as a value for an "aud" element to identify the
        authorization server as an intended audience of the JWT."?

Then, I have a suggestion for re-phrasing this sentence from :
"
        Audience values SHOULD be compared
        using the Simple String Comparison method defined in Section
        6.2.1 of RFC 3986 [RFC3986], unless otherwise specified by the
        application.
"
to:

"
In the absence of an application profile standard specifying
otherwise, a compliant JWT Bearer application MUST compare the audience values using the Simple String Comparison method defined in Section
        6.2.1 of RFC 3986 [RFC3986].
"

The same can actually be applied to the issuer claim as well.
Given that the JWT had been updated to align it with the JOSE work I suspect that this document also requires an update.


Section 5 about "Interoperability Considerations" says:

"
Specific items that require agreement are as
   follows: values for the issuer and audience identifiers, the location
   of the token endpoint, and the key used to apply and verify the
   digital signature or keyed message digest over the JWT.
"

I believe that this list is not correct.

What is needed is:

* At the authorization server there needs to be a whitelist of trusted issuers. For a succesful protocol run the JWT needs to be created by an issuer who is in the whitelist.

* Along with the entry in the whitelist of trusted issuers needs to be a key.

There is no new endpoint URL defined by this document. As such, I wouldn't mention those.

I also do not think that the audience identifier needs to be agreed if you define it as the token endpoint URL of the authorization server (as I suggested above).

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

Reply via email to