Skip to content

Commit 2d67a84

Browse files
committed
feat: add client credentials as a MUST
1 parent c15c153 commit 2d67a84

1 file changed

Lines changed: 31 additions & 4 deletions

File tree

index.bs

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,11 @@ from a browser or an application.
113113

114114
Therefore, this specification assumes the use of the
115115
[Authorization Code Flow](https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowSteps) with
116-
PKCE, in accordance with OAuth and OIDC best practices. It is also assumed that there are no
116+
PKCE, in accordance with OAuth and OIDC best practices, for interactive browser-based login.
117+
For non-interactive use cases such as scripts, automated agents, and server-to-server communication,
118+
this specification also requires support for the
119+
[Client Credentials Grant](https://www.rfc-editor.org/rfc/rfc6749#section-4.4).
120+
It is also assumed that there are no
117121
preexisting trust relationships with the OP. This means that client registration, whether dynamic,
118122
or static, is entirely optional.
119123

@@ -288,13 +292,31 @@ Solid-OIDC defines the following `scope` value for use with claim requests:
288292
REQUIRED. This scope requests access to the End-User's `webid` Claim.
289293
</dl>
290294

295+
# Client Credentials Grant # {#client-credentials}
296+
297+
OpenID Providers MUST support the OAuth 2.0 Client Credentials Grant [[!RFC6749]] (Section 4.4)
298+
to enable non-interactive authentication for scripts, automated agents, and server-to-server
299+
communication.
300+
301+
When using the Client Credentials Grant, the Client authenticates with the OP using a
302+
`client_id` and `client_secret` pair previously obtained through client registration
303+
(either static or dynamic). The Client sends a token request to the OP's token endpoint
304+
with `grant_type=client_credentials` and the `webid` scope.
305+
306+
The OP MUST validate the `client_id` and `client_secret`, and if valid, MUST return
307+
a DPoP-bound Access Token. The Client MUST include a valid DPoP proof [[!DPOP]]
308+
with the token request.
309+
310+
The OP MUST advertise `client_credentials` in its `grant_types_supported`
311+
metadata property in its OpenID Connect Discovery 1.0 [[!OIDC-DISCOVERY]] document.
312+
291313
# Token Instantiation # {#tokens}
292314

293315
Assuming one of the following options
294-
- Client ID and Secret, and valid DPoP Proof (for dynamic and static registration)
316+
- Client ID and Secret, and valid DPoP Proof, using either the Authorization Code Grant or the Client Credentials Grant
295317
- Dereferencable Client Identifier with a proper Client ID Document and valid DPoP Proof (for a Solid client identifier)
296318

297-
the OP MUST return A DPoP-bound OIDC ID Token.
319+
the OP MUST return a DPoP-bound OIDC ID Token.
298320

299321
## DPoP-bound OIDC ID Token ## {#tokens-id}
300322

@@ -401,10 +423,15 @@ requested resource.
401423
An OpenID Provider that conforms to the Solid-OIDC specification MUST advertise it in the OpenID Connect
402424
Discovery 1.0 [[!OIDC-DISCOVERY]] resource by including `webid` in its `scopes_supported` metadata property.
403425

426+
Additionally, the OP MUST include `client_credentials` in its `grant_types_supported`
427+
metadata property to indicate support for non-interactive authentication
428+
via the Client Credentials Grant (see [[#client-credentials]]).
429+
404430
<div class="example">
405431
<pre highlight="json">
406432
{
407-
"scopes_supported": ["openid", "offline_access", "webid"]
433+
"scopes_supported": ["openid", "offline_access", "webid"],
434+
"grant_types_supported": ["authorization_code", "refresh_token", "client_credentials"]
408435
}
409436
</pre>
410437
</div>

0 commit comments

Comments
 (0)