2017-10-31 2 views
1

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?

Antwort

1

Wenn Sie oauth2 Autorisierung/Ressourcen-Server konfiguriert haben Sie folgenden Code versuchen:

@Autowired 
private TokenStore tokenStore; 

@RequestMapping(method = {RequestMethod.POST, RequestMethod.GET}, value = "/oauth/me") 
public Map<String, Object> userInfo(OAuth2Authentication auth){ 
    final OAuth2AuthenticationDetails details = (OAuth2AuthenticationDetails) auth.getDetails(); 
    //token 
    String accessToken = details.getTokenValue(); 
    //reference 
    final OAuth2AccessToken accessToken = tokenStore.readAccessToken(details.getTokenValue()); 
    // clientid 
    String clientId = auth.getOAuth2Request().getClientId(); 
} 

Hoffe, es hilft!

+0

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

Verwandte Themen