[Openid-specs-ab] openid connect specs review

Johnny Bufu jbufu at janrain.com
Thu Jul 7 00:29:48 UTC 2011


Hello spec editors,

I've given a close read to the following specifications. Below are 
comments about parts that I've found unclear or confusing, and questions 
for which I didn't find answers in the specs and would hold me back if I 
were to implement them.

Thanks,
Johnny

----------------------------------------------------------------

Core (draft 07 / June 29, 2011):

1. Terminology

"Claims Provider" is not formally defined, but used in another definition.

Base64url is defined but not used anywhere.

UserInfo Endpoint... "returns information about the current user":
The impression is that the UserInfo Endpoint is called without involving 
the user/agent (a back-channel/API-like call). It's not clear what 
"current" would mean in this case - perhaps "associated with the 
presented access token"?

RP is defined as "Client and Resource Servers"
UserInfo Endpoint is defined as "protected resource"

It can be inferred that the UserInfo Endpoint is a protected resource 
served by the RP (since the RP is the only defined Resource Server).

3. Messages

"ID Token" is referenced but not defined.

3.1.1.  Authorization Request

response_type: "Acceptable values are code, token, and none."

Is the list complete? If yes, see next review item. If not, and anything 
is acceptable (per protocol binding specs, I imagine) what's the purpose 
in listing only some of the acceptable values here (instead of deferring 
to the relevant specs)?

3.1.2 Authorization Response

"Response values for other requested response_type parameters are 
returned in the Access Token Endpoint (Need Confirmation)."

It is implied that other response_type values are accepted than the ones 
listed in section 3.1.1.

3.1.3.1.  Error Codes

It's not clear to me how error codes can be extended:
"by string prefixed by x_".

Which "string"? Any error code string that someone wants to come up 
with, or only the ones that have already been defined in OAuth 2.0 and 
OpenID Connnect Core?

4.2.  JSON Serialization

Where is the "openid": {...} (JSON) construct from the example defined? 
This comes in as a surprise in the reading of the spec.

----------------------------------------------------------------

Framework (draft 01 / July 5, 2011):

2.  Terminology

Identity Provider has the same definition as OpenID Provider in Core: if 
it's the same entity then OP should be used; if different then the 
definition should point out what the difference is.

3.1.1.  OpenID Request Object

"the OpenID Request object is passed as the value of a "request" OAuth 
2.0 parameter"

OAuth 2.0 doesn't define a parameter named "request" that I could find.

ID Token is referenced but not defined.

Session Token referenced but not defined.

3.2.  Authorization Response

Pointer should be to Core/Section 3.1.2 instead of 4.1.2.

3.3.1.  Error Codes

Does session_selection_required correspond to an error in processing the 
prompt:select_account from a Authorization Request?

The error codes seem to convey what the server wants, and not 
necessarily what generated the error and would be more helpful in fixing 
it by the one who receives the error.

4.  UserInfo Endpoint

"Claims object" not formally defined - reader left to guess/assume it's 
the same as ""clm" object" described in section 3.1.1 / OpenID Request 
Object.

4.3.  Requests

"RESERVED" is capitalized but not defined by RFC2119; capitalization 
suggest specially defined meaning. I suggest it shouldn't be capitalized 
if there is no special meaning defined elsewhere.

What is a (request/response) schema? I didn't find a definition or 
introduction to the purpose of schema in any of the specs I've read so 
far. See also the related note on UserInfo / Section 2.1.

4.4.  Responses

"See the OpenID Connect Core [OpenID.CC] specification on how to request 
a different format."

Core doesn't define UserInfo response formats.

8.2.  Authorization Response Verification
8.4.  UserInfo Response Verification

"3.Check that current time is within the validity period."

It not clear what is and who defines the validity period. Are 
verification steps 2 & 3 just SSL certificate verification?

8.2.  Authorization Response Verification

Is "User Info API request" the same as a regular request to the UserInfo 
Endpoint (these are not referred to as APIs before this occurrence)? If 
so then the same spelling should be used to avoid confusion that it 
might be something else.

----------------------------------------------------------------

UserInfo (draft 03 / July 05, 2011):

2.  UserInfo Endpoint

Claim objects are not formally defined.

2.1.  Requests

Which endpoint type from OAuth 2.0 / Bearer Token does the UserInfo 
Endpoint comply to?

What constitutes a (valid) schema name that MAY be used?

What's the difference between the terms "schema" and "format" in the 
context of the UserInfo specification? They seem to be used 
interchangeably - if there is no difference and neither is formally 
defined, I suggest using the more generic "format" term.

"RESERVED" is capitalized but not defined by RFC2119; capitalization 
suggest specially defined meaning. I suggest it shouldn't be capitalized 
if there is no special meaning defined elsewhere.

2.2.  Responses

"See the OpenID Connect Core [OpenID.CC] specification on how to request 
a different format."

Core doesn't define UserInfo response formats.

----------------------------------------------------------------

HTTP Redirect Binding (draft 01 / June 30, 2011):

3.1.  Authorization Code Flow

"the party that receives message MUST verify it according to the 
verification rule set in OpenID Connect Core 1.0 [OpenID.CC] and OpenID 
Connect Framework 1.0 [OpenID.CF]."

There are no rules defined in Core.

3.1.1.1.  Query Parameters Method

Which HTTP methods are allowed? Being a HTTP binding profile I would 
expect, as an implementer, to find this answer here.

3.1.1.1.1.  Client sends a request to the Authorization Server

"any other valid means of directing the User-Agent to the URL" is 
ambiguous and open-ended, a HTTP binding specification should define 
what's acceptable.

scope: "openid" is missing from example.

3.1.1.2.  Request Parameter Method

"The JWT object MAY be signed or signed and encrypted via JWS [JWS] and 
JWE [JWE] respectively, thereby providing non-repudiation and/or 
security of the request."

Non-repudiation is only one of the main benefits provided by signatures, 
while "security" is a too-generic term. I would suggest:
"providing authentication, integrity, non-repudiation and/or 
confidentiality"

And again, the allowed HTTP methods should be specified.

The second example should be replaced with the actual JWT (as the 
comment there says).

3.2.5.1.  End-User Grants Authorization

Core defines only code, token, none as acceptable response_type values, 
which would suggest that id_token would then be unacceptable. (See also 
note on Core/Section 3.1.1)

Also, I couldn't find where "id_token" is listed as possible/acceptable 
value for the response_type parameter, and what its meaning would be.

----------------------------------------------------------------



More information about the Openid-specs-ab mailing list