Commit 2ee36f3
committed
plugin/oauth2: cache OAuth2 tokens per authorization code
The CloudStack OAuth2 login flow exchanges the same one-time
authorization code twice: once in verifyOauthCodeAndGetUser to fetch
the user's email, and once in the subsequent oauthlogin call that
authenticates the user. Unconditionally exchanging the code broke the
login flow, as Google rejects the second exchange of a one-time code
with invalid_grant.
Cache the exchanged tokens keyed by the authorization code instead
(bounded size, short TTL): the second phase of a login reuses the
tokens obtained for its own code, while distinct logins never share
state, keeping the provider thread-safe. Failed exchanges are not
cached, so a failure cannot poison subsequent logins.
Tested on a 4.22.0.0 environment: concurrent Google logins succeed and
a failed login no longer breaks subsequent ones.1 parent eace76f commit 2ee36f3
2 files changed
Lines changed: 53 additions & 9 deletions
File tree
- plugins/user-authenticators/oauth2/src
- main/java/org/apache/cloudstack/oauth2/google
- test/java/org/apache/cloudstack/oauth2/google
Lines changed: 26 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| 20 | + | |
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
| |||
28 | 29 | | |
29 | 30 | | |
30 | 31 | | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
31 | 35 | | |
32 | 36 | | |
33 | 37 | | |
| |||
37 | 41 | | |
38 | 42 | | |
39 | 43 | | |
| 44 | + | |
| 45 | + | |
40 | 46 | | |
41 | 47 | | |
42 | 48 | | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
43 | 57 | | |
44 | 58 | | |
45 | 59 | | |
| |||
92 | 106 | | |
93 | 107 | | |
94 | 108 | | |
95 | | - | |
| 109 | + | |
96 | 110 | | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
102 | 120 | | |
103 | | - | |
104 | | - | |
| 121 | + | |
| 122 | + | |
105 | 123 | | |
106 | 124 | | |
107 | 125 | | |
| |||
Lines changed: 27 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
188 | 188 | | |
189 | 189 | | |
190 | 190 | | |
191 | | - | |
| 191 | + | |
192 | 192 | | |
193 | 193 | | |
194 | 194 | | |
| |||
213 | 213 | | |
214 | 214 | | |
215 | 215 | | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
216 | 242 | | |
0 commit comments