OAuth2 client credentials

Use OAuth2 client credentials middleware to secure HTTP endpoints

The OAuth2 client credentials HTTP middleware enables the OAuth2 Client Credentials flow on a Web API without modifying the application. This design separates authentication/authorization concerns from the application, so that application operators can adopt and configure authentication/authorization providers without impacting the application code.

Component format

apiVersion: dapr.io/v1alpha1 kind: Component metadata:  name: oauth2clientcredentials spec:  type: middleware.http.oauth2clientcredentials  version: v1  metadata:  - name: clientId  value: "<your client ID>"  - name: clientSecret  value: "<your client secret>"  - name: scopes  value: "https://www.googleapis.com/auth/userinfo.email"  - name: tokenURL  value: "https://accounts.google.com/o/oauth2/token"  - name: headerName  value: "authorization"  - name: pathFilter  value: ".*/users/.*" 

Spec metadata fields

FieldDetailsExample
clientIdThe client ID of your application that is created as part of a credential hosted by a OAuth-enabled platform
clientSecretThe client secret of your application that is created as part of a credential hosted by a OAuth-enabled platform
scopesA list of space-delimited, case-sensitive strings of scopes which are typically used for authorization in the application"https://www.googleapis.com/auth/userinfo.email"
tokenURLThe endpoint is used by the client to obtain an access token by presenting its authorization grant or refresh token"https://accounts.google.com/o/oauth2/token"
headerNameThe authorization header name to forward to your application"authorization"
endpointParamsQuerySpecifies additional parameters for requests to the token endpointtrue
authStyleOptionally specifies how the endpoint wants the client ID & client secret sent. See the table of possible values below0
pathFilterApplies the middleware only to requests matching the given path pattern".*/users/.*"

Possible values for authStyle

ValueMeaning
1Sends the “client_id” and “client_secret” in the POST body as application/x-www-form-urlencoded parameters.
2Sends the “client_id” and “client_secret” using HTTP Basic Authorization. This is an optional style described in the OAuth2 RFC 6749 section 2.3.1.
0Means to auto-detect which authentication style the provider wants by trying both ways and caching the successful way for the future.

Dapr configuration

To be applied, the middleware must be referenced in a configuration. See middleware pipelines.

apiVersion: dapr.io/v1alpha1 kind: Configuration metadata:  name: appconfig spec:  httpPipeline:  handlers:  - name: oauth2clientcredentials  type: middleware.http.oauth2clientcredentials 

Request path filtering

The pathFilter field allows you to selectively apply OAuth2 authentication based on the HTTP request path using a regex pattern. This enables scenarios such as configuring multiple OAuth2 middlewares with different scopes for different API endpoints, implementing the least privilege principle by ensuring users only receive the minimum permissions necessary for their intended operation.

Example: Separate read-only and admin user access

In the following configuration:

  • Requests to /api/users/* endpoints receive tokens with a read-only user scopes
  • Requests to /api/admin/* endpoints receive tokens with full admin scopes This reduces security risk by preventing unnecessary privilege access and limiting the blast radius of compromised tokens.
# User with read-only access scope apiVersion: dapr.io/v1alpha1 kind: Component metadata:  name: oauth2clientcredentials-users spec:  type: middleware.http.oauth2clientcredentials  version: v1  metadata:  - name: clientId  value: "<your client ID>"  - name: clientSecret  value: "<your client secret>"  - name: scopes  value: "user:read profile:read"  - name: tokenURL  value: "https://accounts.google.com/o/oauth2/token"  - name: headerName  value: "authorization"  - name: pathFilter  value: "^/api/users/.*" --- # User with full admin access scope apiVersion: dapr.io/v1alpha1 kind: Component metadata:  name: oauth2clientcredentials-admin spec:  type: middleware.http.oauth2clientcredentials  version: v1  metadata:  - name: clientId  value: "<your client ID>"  - name: clientSecret  value: "<your client secret>"  - name: scopes  value: "admin:read admin:write user:read user:write"  - name: tokenURL  value: "https://accounts.google.com/o/oauth2/token"  - name: headerName  value: "authorization"  - name: pathFilter  value: "^/api/admin/.*" 
Last modified October 30, 2025: Adds docs for v1.16.2 (#4929) (a0ce1cf)