@@ -34,6 +34,7 @@ import (
3434 "github.com/lestrrat-go/jwx/v2/jwt"
3535 "github.com/stretchr/testify/require"
3636 "github.com/tetratelabs/telemetry"
37+ "golang.org/x/oauth2"
3738 "google.golang.org/grpc/codes"
3839 "google.golang.org/grpc/test/bufconn"
3940 "google.golang.org/protobuf/proto"
@@ -125,10 +126,11 @@ var (
125126 yesterday = time .Now ().Add (- 24 * time .Hour )
126127 tomorrow = time .Now ().Add (24 * time .Hour )
127128
128- sessionID = "test-session-id"
129- newSessionID = "new-session-id"
130- newNonce = "new-nonce"
131- newState = "new-state"
129+ sessionID = "test-session-id"
130+ newSessionID = "new-session-id"
131+ newNonce = "new-nonce"
132+ newState = "new-state"
133+ newCodeVerifier = "new-code-verifier"
132134
133135 basicOIDCConfig = & oidcv1.OIDCConfig {
134136 IdToken : & oidcv1.TokenConfig {
@@ -190,12 +192,14 @@ var (
190192}`
191193
192194 wantRedirectParams = url.Values {
193- "response_type" : {"code" },
194- "client_id" : {"test-client-id" },
195- "redirect_uri" : {"https://localhost:443/callback" },
196- "scope" : {"openid email" },
197- "state" : {newState },
198- "nonce" : {newNonce },
195+ "response_type" : {"code" },
196+ "client_id" : {"test-client-id" },
197+ "redirect_uri" : {"https://localhost:443/callback" },
198+ "scope" : {"openid email" },
199+ "state" : {newState },
200+ "nonce" : {newNonce },
201+ "code_challenge" : {oauth2 .S256ChallengeFromVerifier (newCodeVerifier )},
202+ "code_challenge_method" : {"S256" },
199203 }
200204
201205 wantRedirectBaseURI = "http://idp-test-server/auth"
@@ -228,7 +232,7 @@ func TestOIDCProcess(t *testing.T) {
228232 tlsPool := internal .NewTLSConfigPool (context .Background ())
229233 h , err := NewOIDCHandler (basicOIDCConfig , tlsPool ,
230234 oidc .NewJWKSProvider (newConfigFor (basicOIDCConfig ), tlsPool ), sessions , clock ,
231- oidc .NewStaticGenerator (newSessionID , newNonce , newState ))
235+ oidc .NewStaticGenerator (newSessionID , newNonce , newState , newCodeVerifier ))
232236 require .NoError (t , err )
233237
234238 ctx := context .Background ()
@@ -949,7 +953,7 @@ func TestOIDCProcessWithFailingSessionStore(t *testing.T) {
949953 }
950954
951955 h , err := NewOIDCHandler (basicOIDCConfig , tlsPool , oidc .NewJWKSProvider (newConfigFor (basicOIDCConfig ), tlsPool ),
952- sessions , oidc.Clock {}, oidc .NewStaticGenerator (newSessionID , newNonce , newState ))
956+ sessions , oidc.Clock {}, oidc .NewStaticGenerator (newSessionID , newNonce , newState , newCodeVerifier ))
953957 require .NoError (t , err )
954958
955959 ctx := context .Background ()
@@ -1094,7 +1098,8 @@ func TestOIDCProcessWithFailingJWKSProvider(t *testing.T) {
10941098 sessions := & mockSessionStoreFactory {store : oidc .NewMemoryStore (& clock , time .Hour , time .Hour )}
10951099 store := sessions .Get (basicOIDCConfig )
10961100 tlsPool := internal .NewTLSConfigPool (context .Background ())
1097- h , err := NewOIDCHandler (basicOIDCConfig , tlsPool , funcJWKSProvider , sessions , clock , oidc .NewStaticGenerator (newSessionID , newNonce , newState ))
1101+ h , err := NewOIDCHandler (basicOIDCConfig , tlsPool , funcJWKSProvider , sessions , clock ,
1102+ oidc .NewStaticGenerator (newSessionID , newNonce , newState , newCodeVerifier ))
10981103 require .NoError (t , err )
10991104
11001105 idpServer := newServer (wellKnownURIs )
@@ -1425,7 +1430,7 @@ func TestLoadWellKnownConfigError(t *testing.T) {
14251430 cfg .ConfigurationUri = "http://stopped-server/.well-known/openid-configuration"
14261431 sessions := & mockSessionStoreFactory {store : oidc .NewMemoryStore (& clock , time .Hour , time .Hour )}
14271432 _ , err := NewOIDCHandler (cfg , tlsPool , oidc .NewJWKSProvider (newConfigFor (basicOIDCConfig ), tlsPool ),
1428- sessions , clock , oidc .NewStaticGenerator (newSessionID , newNonce , newState ))
1433+ sessions , clock , oidc .NewStaticGenerator (newSessionID , newNonce , newState , newCodeVerifier ))
14291434 require .Error (t , err ) // Fail to retrieve the dynamic config since the test server is not running
14301435}
14311436
@@ -1447,7 +1452,7 @@ func TestNewOIDCHandler(t *testing.T) {
14471452 t .Run (tt .name , func (t * testing.T ) {
14481453
14491454 _ , err := NewOIDCHandler (tt .config , tlsPool , oidc .NewJWKSProvider (newConfigFor (basicOIDCConfig ), tlsPool ),
1450- sessions , clock , oidc .NewStaticGenerator (newSessionID , newNonce , newState ))
1455+ sessions , clock , oidc .NewStaticGenerator (newSessionID , newNonce , newState , newCodeVerifier ))
14511456 if tt .wantErr {
14521457 require .Error (t , err )
14531458 } else {
0 commit comments