@@ -113,7 +113,11 @@ from a browser or an application.
113113
114114Therefore, 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
117121preexisting trust relationships with the OP. This means that client registration, whether dynamic,
118122or 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
293315Assuming 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.
401423An OpenID Provider that conforms to the Solid-OIDC specification MUST advertise it in the OpenID Connect
402424Discovery 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