spring-projects / spring-security

Spring Security
http://spring.io/projects/spring-security
Apache License 2.0
8.72k stars 5.87k forks source link

Map With Long Key Causes HttpMessageNotWritableException with spring-security-oauth2-jose version 5.8.1 #12668

Closed willweyant closed 3 months ago

willweyant commented 1 year ago

Describe the bug While following upgrade of spring security in preparation for move to Spring Boot 3 (Spring 6) from Spring Boot 2.7.8, we encountered an issue in a SpringBootTest for a RestController. We have a JWT token with two Map<Long,String> properties. It seems that a Map key of any other number type works except for Long with the upgrade. We were able to trace the issue to the nimbus-jose-jwt dependency version 9.24.4 provided via spring-security-oauth2-jose (version 5.8.1). nimbus-jose-jwt version 9.22 works fine.

To Reproduce Upgrade a spring boot 2.7.8 application with spring-security to 3 following directions here: [https://docs.spring.io/spring-security/reference/5.8/migration/index.html]. Write a spring boot test to call a GET resource with a Authorization header with Bearer token containing a Map<Long, String> property. The test fails with an exception similar to this:

Expected behavior A Map with a Long key should still work in a JWT token.

Sample Not able to provide code from application.

sjohnr commented 3 months ago

@willweyant thanks for reaching out! I apologize for the delay in response.

We have a JWT token with two Map<Long,String> properties.

A Map with a Long key should still work in a JWT token.

Numbers in JSON (RFC 8259) are defined as integers (which would map to java.lang.Integer) and object keys are strings. I don't believe it's possible for such a Map to be represented in JSON.

We were able to trace the issue to the nimbus-jose-jwt dependency version 9.24.4 provided via spring-security-oauth2-jose (version 5.8.1). nimbus-jose-jwt version 9.22 works fine.

The nimbus-jose-jwt project is a separate project from Spring Security. You would be best suited to reach out on the issue tracker for the nimbus-jose-jwt project.

I'm going to close this issue since it's for an external project. If you still believe this is a bug in Spring Security, please provide a minimal, reproducible sample and I'll be happy to take a look.