spec: Specify DCR, Audience Binding, Third Party App#5750
Conversation
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
- Define third-party client concept; deprecate static third_party_app YAML entry - Extract API Resources and Scopes from m2m.md into api-resource.md; add allow_any_client_access flag - Revise access token audience binding: opaque token by default for third-party clients; aud=[resource_uri] only when resource is specified - Change IAT from self-signed JWT to opaque token issued via Admin API; remove single-use restriction - Redesign DCR application_type: web/native for third-party, first_party_spa/native/traditional_webapp/confidential for first-party - Remove token_endpoint_auth_method from DCR; fixed per application_type Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Updated. Here is a summary: Third-Party Clients
API Resources and Scopes
Access Token Audience Binding
Initial Access Token (IAT)
DCR application_type Field
DCR token_endpoint_auth_method Field
|
|
@tung2744 haven't read the doc in details yet, just responding on summary:
I still think we want to support creating 3rd party client application from portal (how to store it is another thing), but feature-wise "3rd parties client must be created via DCR" seems incorrect. (Implementation could be another ticket though)
What's the intention on this?
For first-party client, do we really want to do this? or we allow them to specify ....? And I assume even if you do this, we allow multiple resources + project endpoint at
As previously commented, maybe we should have first_party vs 3rd_party as a attribute instead of app type? By making it app_type, we seems overloading a lot of attributes that could potentially conflict with other oidc spec on it... |
What I want to do is to deprecate the existing
It is the same purpose as
I assume you mean we do
I would like to clarify to ensure we are talking about the same thing, the application_type here is referring to the parameter of the DCR /register endpoint. We actually have two choice here:
Now it is 1. I did not do 2 because:
|
ok, but than we probably shouldn't say DCR is the only way for 3rd party app.
I think this is werid and not obvious for client what this attributes does. We need both a better naming and description. (More specific for DCR open registration
Than what if a 1st party app want to authorize for
Actually I was thinking more like:
I haven't thought through which approach is better. Yet I feel like the above seems less dangerous than what you proposed / we originally have (creating more application_type to signal it):
(and we don't run into similar confusion when we need to adopt new OIDC protocol like this time) BTW, it seems in your summary you didn't mention IAT for 1st party app vs 3rd party app, so how to limit it for now? Or IAT is always for 3rd party app only and 1st party app (UC1) is for future work? See if you have think through all of the above, and let me know when you think I should read the whole spec again but not just your summary? (Yet I think via the summary we can discuss and align some design principle / use cases clarity) p.s. I would be on leave til next Wed, maybe the best time to review it again is next Wed morning (or pls schedule with me separately.) |
Do not allow. Reason:
There is also no reason for putting So for this case just request
Let me also think if we can have a better naming for allow_any_client_access.
Actually, I am trying to make it unrelated to the static config (And thus, unrelated to x_application_type). Removal of So I suggest just to treat I see some other services also overloading But it is indeed not very common. If overloading
I think the purpose of IAT should be limited to authorization. It can authorize the caller to create first party client, but whether to create a first party client should still be decided by the caller and be reflected in the request.
I think no change from the initial design. If there is an IAT, first party app creation is allowed. Third party app is allowed no matter you have a IAT or not. I think you have already get most of the idea from my summary. See if the above answers your question, or we further discuss later. |
Just wanna stress that I think it is not just naming, but the concept behind...
I would strongly oppose this. An IAT that can create 1st party vs 3rd party application have vastly difference security profile. In fact I always think the only decision for us is either DO NOT allow register of 1st party application via DCR at all (drop UC1), or the bottom line is make it explicit which IAT can do so. (btw, hence it is better if we have some prefix on the IAT token, like prod vs test token in Stripe, so it is very obvious to users they're leaking a sensitive or non-sensitive tokens, e.g. Since the decision of 1st party or 3rd party app is by type of IAT, hence the parameter of |
ref DEV-3608