2017-10-30 2 views

Antwort

0

Bei dieser Frage war es wegen Gott weiß warum geschlossen. Aber hier ist die Antwort, die ich gefunden habe. Ich habe dies auf einer Demo basiert, die Google als einen externen Autorisierungsserver verwendet. Das Problem mit den üblichen Demos ist, dass alle den Spring Authorization Server verwenden. Hier ist der Platz zum Starten http://blog.arnoldgalovics.com/2017/02/05/google-oauth-with-spring-security-as-separated-resource-server/ Dann ändern Sie den GoogleAccessTokenValidator wie folgt (unten). Fragen, Feuer weg ...

private HttpHeaders createHeaders(final String username, final String password){ 
     return new HttpHeaders() {{ 
      String auth = username + ":" + password; 
      byte[] encodedAuth = Base64.encodeBase64( 
       auth.getBytes(Charset.forName("US-ASCII"))); 
      String authHeader = "Basic " + new String(encodedAuth); 
      set("Authorization", authHeader); 
      }}; 
    } 


    @SuppressWarnings("unchecked") 
    private Map<String, ?> getPingResponse(String accessToken) { 

     //Ping speaks text/html 
     List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters(); 
     for (HttpMessageConverter<?> converter : converters) { 
      if (converter instanceof StringHttpMessageConverter) { 
       StringHttpMessageConverter stringConverter = (StringHttpMessageConverter) converter;     
       stringConverter.setSupportedMediaTypes(ImmutableList.of(new MediaType("text", "html", StringHttpMessageConverter.DEFAULT_CHARSET))); 
      } 
     }  

     //URL 
     UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(checkTokenUrl) 
       .queryParam("grant_type", "urn:pingidentity.com:oauth2:grant_type:validate_bearer") 
       .queryParam("token", accessToken);  
     String url = builder.build().encode().toUri().toString(); 

     //Basic Auth (from Ping, OAuth Settings, Manage Clients 
     HttpEntity<Object> requestEntity = new HttpEntity<Object>(createHeaders("my-trusted-client", "secret")); 

     //unused Spring exchange variables 
     Map<String, String> variables = ImmutableMap.of("ping does not", "use this"); //token only in queryParam above 

     //validation call to Ping 
     Map map = restTemplate.exchange(url, HttpMethod.POST, requestEntity, Map.class, variables).getBody();   
     return (Map<String, Object>) map; 
    } 
Verwandte Themen