-
Notifications
You must be signed in to change notification settings - Fork 13
feat: add client credentials as a MUST #245
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -113,7 +113,11 @@ from a browser or an application. | |||||||||||||||||||||
|
|
||||||||||||||||||||||
| Therefore, this specification assumes the use of the | ||||||||||||||||||||||
| [Authorization Code Flow](https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowSteps) with | ||||||||||||||||||||||
| PKCE, in accordance with OAuth and OIDC best practices. It is also assumed that there are no | ||||||||||||||||||||||
| PKCE, in accordance with OAuth and OIDC best practices, for interactive browser-based login. | ||||||||||||||||||||||
| For non-interactive use cases such as scripts, automated agents, and server-to-server communication, | ||||||||||||||||||||||
| this specification also requires support for the | ||||||||||||||||||||||
| [Client Credentials Grant](https://www.rfc-editor.org/rfc/rfc6749#section-4.4). | ||||||||||||||||||||||
| It is also assumed that there are no | ||||||||||||||||||||||
| preexisting trust relationships with the OP. This means that client registration, whether dynamic, | ||||||||||||||||||||||
| or static, is entirely optional. | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
|
|
@@ -288,13 +292,31 @@ Solid-OIDC defines the following `scope` value for use with claim requests: | |||||||||||||||||||||
| REQUIRED. This scope requests access to the End-User's `webid` Claim. | ||||||||||||||||||||||
| </dl> | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| # Client Credentials Grant # {#client-credentials} | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| Authorization Servers MUST support the OAuth 2.0 Client Credentials Grant [[!RFC6749]] (Section 4.4) | ||||||||||||||||||||||
| to enable non-interactive authentication for scripts, automated agents, and server-to-server | ||||||||||||||||||||||
| communication. | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| When using the Client Credentials Grant, the Client authenticates with the OP using a | ||||||||||||||||||||||
| `client_id` and `client_secret` pair previously obtained through client registration | ||||||||||||||||||||||
| (either static or dynamic). The Client sends a token request to the OP's token endpoint | ||||||||||||||||||||||
| with `grant_type=client_credentials` and the `webid` scope. | ||||||||||||||||||||||
jeswr marked this conversation as resolved.
Show resolved
Hide resolved
Comment on lines
+301
to
+304
|
||||||||||||||||||||||
| When using the Client Credentials Grant, the Client authenticates with the OP using a | |
| `client_id` and `client_secret` pair previously obtained through client registration | |
| (either static or dynamic). The Client sends a token request to the OP's token endpoint | |
| with `grant_type=client_credentials` and the `webid` scope. | |
| When using the Client Credentials Grant, the Client MUST be registered with the OP and | |
| authenticate using a `client_id` and `client_secret` pair previously obtained through | |
| client registration (either static or dynamic). This requirement is an exception to the | |
| general statement in the Core Concepts section that client registration is optional. The | |
| Client sends a token request to the OP's token endpoint with `grant_type=client_credentials` | |
| and the `webid` scope. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@acoburn @joachimvh can you confirm this is accurate with your implementations?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See comment above, I would not normatively require the use of a client_secret.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note that the grant_types_supported metadata field of OpenID connect is optional. I don't think it makes sense to introduce a MUST therefore, in particular given that this is an OAuth grant type.
Copilot
AI
Feb 15, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This requirement duplicates the one already stated in the Client Credentials Grant section (lines 310-311). The same requirement appears twice: once in the Client Credentials Grant section and once here in the Conformance Discovery section. Consider removing the duplication by keeping only one of these statements, or if both are intentional, clarify why the requirement is repeated. Typically, the discovery/conformance section would be the natural place for such metadata requirements, making lines 310-311 potentially redundant.
| Additionally, the OP MUST include `client_credentials` in its `grant_types_supported` | |
| metadata property to indicate support for non-interactive authentication | |
| via the Client Credentials Grant (see [[#client-credentials]]). | |
| Additionally, an OP that supports non-interactive authentication | |
| via the Client Credentials Grant (see [[#client-credentials]]) indicates this support by including | |
| `client_credentials` in its `grant_types_supported` metadata property. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Only to implement this change if we go with MAY wording over MUST.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would avoid making any assumptions on which assertions a client provides to the AS for the client credentials grant. Quite a few Authorization Services rely on public keypairs to authenticate clients, cfr. RFC7523, for example this is the case in MS Entra
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For example this draft PR to CSS uses RFC7523