Ich habe Spring Boot App, die OAuth 2.0 und Authorization Server verwendet. Wenn ich versuche, auf die gesicherte Seite zuzugreifen, habe ich auf der Anmeldeseite meines Autorisierungsservers (Blitz Identity Provider) umgeleitet, und hier funktioniert alles super. Mein Problem ist, dass Ich Berechtigungs-Token in @Controller (auf gesicherter Seite) nicht extrahieren kann. Dieses Token möchte ich später zur Autorisierung in der zweiten Anwendung verwenden.So extrahieren Sie das Authentifizierungstoken in @Controller
- Versuchte this thing (in Antwort) und es funktionierte, habe ich mein Token zurück, aber wie Sie sehen können, ist es ein hard von Benutzernamen und Passwort Parameter und es ist wie Login über Login - ich weiß nicht müssen sich ein zweites Mal auf der authentifizierten Seite einloggen ( ).
- zur Ausgabe Versuchte authentication.getDetails(), zeigt es, Token-Typ und> wie < Token Token, aber es ist nicht genug.
- Versucht, Token in Request-Response-Header zu suchen, aber es nicht gefunden, so Authorization Server sendet es nicht in Headern.
Hier sind 2 Dateien, die Ihnen helfen können, einen Teil meines Kontextes zu verstehen.
application.yml
server:
port: 8080
context-path:/
session:
cookie:
name:FIRSTSESSION
security:
basic:
enabled: false
oauth2:
client:
clientId: test_id
clientSecret: f3M5m9a2Dn0v15l
accessTokenUri: http://server:9000/blitz/oauth/te
userAuthorizationUri: http://server:9000/blitz/oauth/ae?scope=test_scope
resource:
userInfoUri: http://server:9000/blitz/oauth/me
logging:
level:
org.springframework.security: DEBUG
SsoController.java
@EnableOAuth2Sso
@Controller
public class SsoController {
@RequestMapping("/secondService")
public String getContent(HttpServletRequest request, Model model) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
model.addAttribute("submittedValue", authentication.getDetails());
return "secondService";
}
}
Also, was können Sie vorschlagen? Wie kann ich Autorisierungstoken in diesem Fall extrahieren?
Ja! Genau das habe ich gebraucht! Ich habe mein Token erhalten, indem ich diesen Code implementiert habe: OAuth2AuthenticationDetails = auth = (OAuth2AuthenticationDetails) SecurityContextHolder.getContext(). GetAuthentication(). GetDetails(); accessToken = auth.getTokenValue(); – Artemoon