Zum Speichern und Abrufen von Autorisierungen habe ich einen benutzerdefinierten Autorisierungsdienst implementiert, der die OAuth2AuthorizationService-Schnittstelle implementiert. Wenn die Methode save aufgerufen wird, speichere ich den Client, den Gewährungstyp, die autorisierten Bereiche, den Prinzipal und die im Autorisierungsobjekt verfügbaren Token. Ich speichere keine Attribute des Autorisierungsobjekts, da ich keine benutzerdefinierten Attribute definiert habe.
Wenn ich die Anfrage an den /authorize-Endpunkt sende, erhalte ich den Autorisierungscode zurück und es wird wie erwartet in der Datenbank gespeichert. Wenn ich jedoch den Endpunkt /token aufrufe, um das Zugriffstoken abzurufen, wird eine Ausnahme ausgelöst.
Code: Select all
java.lang.NullPointerException: Cannot invoke "org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest.getAdditionalParameters()" because
"authorizationRequest" is null at org.springframework.security.oauth2.server.authorization.authentication.CodeVerifierAuthenticator.authenticate(CodeVerifierAuthenticator.java:97) at org.springframework.security.oauth2.server.authorization.authentication.CodeVerifierAuthenticator.authenticatelfAvailable(CodeVerifierAuthenticator.java:73) at org.springframework.security.oauth2.server.authorization.authentication.ClientSecretAuthentication Provider.authenticate(ClientSecretAuthenticationProvider.java:151) at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:182) at org.springframework.security.authentication. ObservationAuthenticationManager.lambda$authenticate$1(ObservationAuthenticationManager.java:54)
Code: Select all
OAuth2AuthorizationRequest authorizationRequest = (OAuth2AuthorizationRequest)authorization.getAttribute(OAuth2AuthorizationRequest.class.getName());
Daher möchte ich bestätigen, ob sie tatsächlich gespeichert werden muss oder ob ich vielleicht etwas falsch mache.< /p>
Ich habe versucht, ein neues Autorisierungsanforderungsobjekt zu erstellen und es der Autorisierung zuzuweisen, nachdem ich es aus der Datenbank abgerufen habe. Der Autorisierungsanforderungs-Builder ist jedoch nur für den Autorisierungsgewährungstyp und den erforderlichen Anforderungs-URI verfügbar, die ich nicht fest codieren möchte.