[Openid-specs-ab] Add claim filter to user info request

Torsten Lodderstedt torsten at lodderstedt.net
Sat May 4 11:51:32 UTC 2013

Hi Nat,

Am 04.05.2013 07:38, schrieb Nat Sakimura:
> "Permanent access to claim a and b" has to be bound to a purpose. If
> at a later date, when additional grant to "claim c" is made, it is
> likely that the purpose would be different, since if the purpose was
> the same, the grant request for c were requested to start with a and
> b. The access token issued in the second transaction may allow the
> client to query a, b, and c only if the purpose was the same AND the
> subject did understand that they were taken together.

Let's assume this is the case. In order to support such a case, the spec
should state that the actual claim set returned in a user info response
is based on the authorization grant underlying the access token, which
might differ from the claim set requested in the transaction used to
obtain the access token.

As a general note:
We should not mix the authorization request to access data and the
actual attribute/claim query. In contrast to OpenID 2.0./AX those
aspects could and should be distinguished in Connect. In my opinion, the
user info endpoint should always allow the client to obtain _all_ claims
it is authorized for. This should hold true independent of the way the
consent is given (inbound or out of bound).

The OAuth/Connect request "just" triggers login and, if needed, user
consent. Claims can be queried at any time afterwards either be using
the access token issued as result of the login request or using another
access token obtained using a refresh token issued in this transaction
as well.

Treating the authorization request and the attribute query as the same
has some unpleasant implications.

1) The client has to perform additional OpenID requests in order to
change the user info response.
a) request to end-user authorization endpoint with changed claim set
b) exchange auth code id and access token
c) access user info endpoint (if data are not transfered in id token)
This has a negative impact on the application's performance. Moreover,
performing such a request full screen will yield a bad user experience.
Performing it in a (invisible or small) iframe will probably fall prey
to the browser's 3rd party cookie policy.

2) the OP has to maintain transactional state with every code, access
and refresh token, resulting in a more complex and less scalable

In our implementation, we store the user's consent in a database and ask
the user for another consent only if the actual login request asks for
claims not already covered by this database record. The access token
then "just" refers to the respective record for the particular user and
client. If the end-user revokes the respective authorization (in our
account management portal), the user info endpoint will refuse to
provide user data any longer.


> Re: SCIM, current UserInfo endpoint schema lacks enterprise oriented
> claims. I was suggesting that perhaps we need them. OpenID Connect
> used to have the ability to specify the schema for userinfo endpoint,
> which was removed by https://bitbucket.org/openid/connect/issue/801/
> (It was resolved very quickly and the discussion is not recorded in
> the ticket so I cannot track the discussion easily for now). The
> reason we had "schema" parameter there was that we could state "scim"
> or "poco" there so that we can use the same access interface as
> userinfo while using different schema. That's what I was thinking of.
> 2013/5/3 Torsten Lodderstedt <torsten at lodderstedt.net
> <mailto:torsten at lodderstedt.net>>
>     Hi Nat,
>     the current behaviour is limited. It does not consider persistent
>     authorization grants. Suppose, the user grants a client permanent
>     access to claim a and b in the initial transaction and to claim c
>     in a second transaction. In my opinion, the access token issued in
>     the second transaction must allow the client to query a, b, and c.
>     Regarding SCIM: are you saying openid connect is inappropriate for
>     enterprise scenarios?
>     regards,
>     Torsten.
>     Nat Sakimura <sakimura at gmail.com <mailto:sakimura at gmail.com>>
>     schrieb:
>         The behavior is correct. The access token represents the
>         "consent". When obtaining the consent, the purpose
>         specification and data minimization principle should apply,
>         thus giving wide range consent at the beginning and later
>         filtering is not only unadvisable but also sometimes illegal.
>         In the enterprise use case, it is deemed that the personal
>         data that the enterprise has have been granted the user
>         consent out of band so that the data can be used without
>         explicit consent at runtime. It is an implicit consent model.
>         Under such circumstances, filtering at the runtime may make
>         sense, but in the enterprise cases, perhaps SCIM endpoint is
>         more appropriate source of employee data.
>         Nat
>         2013年5月2日木曜日 Torsten Lodderstedt torsten at lodderstedt.net
>         <mailto:torsten at lodderstedt.net>:
>             Hi all,
>             please take a look at
>             https://bitbucket.org/openid/connect/issue/832/standard-41-add-claim-filter-to-user-info
>             and give your feedback.
>             I think the way to control the claim set returned by the
>             user info endpoint needs some clarification/improvement.
>             regards,
>             Torsten.
>             ----------------------------------------------------------
>             It seems the claim set returned by the user info response
>             is controlled by the scope/claim parameter of the openid
>             authorization request. This means a client must acquire a
>             new access token in order to effectively change the
>             response of the user info endpoint. Seems a bit strange to me.
>             Moreover, it also requires the client to specify all
>             claims it wants to query when obtaining the access token.
>             For our internal applications, this would mean to send up
>             to 40 claim names in an authorization although access is
>             not authorized by the user but a system policy on a per
>             client base. This unnecessary increases the request size
>             (URL length).
>             I think a parameter to list the claims a client wants to
>             obtain would be very useful and a reasonable extension to
>             the current design.
>             _______________________________________________
>             Openid-specs-ab mailing list
>             Openid-specs-ab at lists.openid.net
>             http://lists.openid.net/mailman/listinfo/openid-specs-ab
> -- 
> Nat Sakimura (=nat)
> Chairman, OpenID Foundation
> http://nat.sakimura.org/
> @_nat_en

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openid.net/pipermail/openid-specs-ab/attachments/20130504/4fc39277/attachment-0001.html>

More information about the Openid-specs-ab mailing list