Commit b24bb99
committed
feat: add PKCE support for OIDC authentication
This adds support for PKCE (Proof Key for Code Exchange) when Coder acts as an
OIDC client. PKCE is an OAuth 2.0 extension that prevents authorization code
interception attacks, making authentication more secure especially for public
clients.
## Changes
- Add `CODER_OIDC_PKCE` environment variable (default: false)
- Add `--oidc-pkce` flag to enable PKCE for OIDC authentication
- Modify ExtractOAuth2 middleware to:
- Generate PKCE code verifier when initiating auth flow
- Store verifier in HttpOnly cookie
- Include code_challenge (S256) in authorization request
- Pass code_verifier during token exchange
- Update all ExtractOAuth2 call sites with pkceEnabled parameter
## Configuration
To enable PKCE for OIDC authentication:
```bash
export CODER_OIDC_PKCE=true
```
Or via CLI:
```bash
coder server --oidc-pkce
```
## Security
- Uses S256 challenge method (SHA256 hash of verifier)
- Verifier stored in HttpOnly cookie for CSRF protection
- Compatible with all major IdPs that support PKCE (Okta, Azure AD, Keycloak, etc.)
Related: RFC 7636 - Proof Key for Code Exchange1 parent 3641404 commit b24bb99
File tree
5 files changed
+60
-15
lines changed- coderd
- httpmw
- codersdk
5 files changed
+60
-15
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
940 | 940 | | |
941 | 941 | | |
942 | 942 | | |
943 | | - | |
| 943 | + | |
| 944 | + | |
944 | 945 | | |
945 | 946 | | |
946 | 947 | | |
| |||
1289 | 1290 | | |
1290 | 1291 | | |
1291 | 1292 | | |
1292 | | - | |
| 1293 | + | |
| 1294 | + | |
1293 | 1295 | | |
1294 | 1296 | | |
1295 | 1297 | | |
1296 | 1298 | | |
1297 | 1299 | | |
1298 | 1300 | | |
1299 | | - | |
| 1301 | + | |
| 1302 | + | |
1300 | 1303 | | |
1301 | 1304 | | |
1302 | 1305 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
40 | 40 | | |
41 | 41 | | |
42 | 42 | | |
43 | | - | |
| 43 | + | |
| 44 | + | |
44 | 45 | | |
45 | 46 | | |
46 | 47 | | |
| |||
133 | 134 | | |
134 | 135 | | |
135 | 136 | | |
136 | | - | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
137 | 151 | | |
138 | 152 | | |
139 | 153 | | |
| |||
163 | 177 | | |
164 | 178 | | |
165 | 179 | | |
166 | | - | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
167 | 194 | | |
168 | 195 | | |
169 | 196 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
50 | 50 | | |
51 | 51 | | |
52 | 52 | | |
53 | | - | |
| 53 | + | |
54 | 54 | | |
55 | 55 | | |
56 | 56 | | |
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
61 | | - | |
| 61 | + | |
62 | 62 | | |
63 | 63 | | |
64 | 64 | | |
| |||
82 | 82 | | |
83 | 83 | | |
84 | 84 | | |
85 | | - | |
| 85 | + | |
86 | 86 | | |
87 | 87 | | |
88 | 88 | | |
| |||
97 | 97 | | |
98 | 98 | | |
99 | 99 | | |
100 | | - | |
| 100 | + | |
101 | 101 | | |
102 | 102 | | |
103 | 103 | | |
104 | 104 | | |
105 | 105 | | |
106 | 106 | | |
107 | 107 | | |
108 | | - | |
| 108 | + | |
109 | 109 | | |
110 | 110 | | |
111 | 111 | | |
| |||
117 | 117 | | |
118 | 118 | | |
119 | 119 | | |
120 | | - | |
| 120 | + | |
121 | 121 | | |
122 | 122 | | |
123 | 123 | | |
| |||
133 | 133 | | |
134 | 134 | | |
135 | 135 | | |
136 | | - | |
| 136 | + | |
137 | 137 | | |
138 | 138 | | |
139 | 139 | | |
| |||
144 | 144 | | |
145 | 145 | | |
146 | 146 | | |
147 | | - | |
| 147 | + | |
148 | 148 | | |
149 | 149 | | |
150 | 150 | | |
| |||
160 | 160 | | |
161 | 161 | | |
162 | 162 | | |
163 | | - | |
| 163 | + | |
164 | 164 | | |
165 | 165 | | |
166 | 166 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
40 | 40 | | |
41 | 41 | | |
42 | 42 | | |
| 43 | + | |
| 44 | + | |
43 | 45 | | |
44 | 46 | | |
45 | 47 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
680 | 680 | | |
681 | 681 | | |
682 | 682 | | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
683 | 686 | | |
684 | 687 | | |
685 | 688 | | |
| |||
2186 | 2189 | | |
2187 | 2190 | | |
2188 | 2191 | | |
| 2192 | + | |
| 2193 | + | |
| 2194 | + | |
| 2195 | + | |
| 2196 | + | |
| 2197 | + | |
| 2198 | + | |
| 2199 | + | |
| 2200 | + | |
| 2201 | + | |
2189 | 2202 | | |
2190 | 2203 | | |
2191 | 2204 | | |
| |||
0 commit comments