Fix mock OAuth2 server to return valid JWTs instead of plain strings #4
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
The mock OAuth2 server was returning plain strings as tokens (e.g.,
"mock-access-token-clientID-timestamp") instead of properly formatted JWTs. This caused issues with consuming services that use Go OIDC libraries to verify tokens, as these libraries expect valid, signed JWTs.Solution
Implemented proper JWT token generation with RSA-256 signing and JWKS endpoint support:
Key Changes
JWT Generation - Created a new
internal/jwtpackage that:JWKS Endpoint - Added
/jwksendpoint that:Token Handler Updates - Modified the token generation to:
Comprehensive Testing - Added tests to verify:
Token Format
ID Token Example:
{ "alg": "RS256", "kid": "mock-key-1", "typ": "JWT" } { "aud": "test-client", "exp": 1760263656, "iat": 1760260056, "iss": "http://localhost:8080", "nonce": "d1IYgBZM8CzWfsKcyuncmQ", "sub": "user-test-client" }Access Token Example:
{ "aud": "test-client", "exp": 1760263656, "iat": 1760260056, "iss": "http://localhost:8080", "scope": ["openid", "email", "profile"], "sub": "user-test-client" }Benefits
coreos/go-oidcand similar libraries/jwks, which is now functionalTesting
Verified the implementation with:
Fixes the issue where consuming services using Go OIDC libraries were failing to verify tokens from the mock server.
Original prompt
Fixes #3
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.