2017-10-17 10 views
0

필자는 인증을 위해서뿐만 아니라 토큰의 실제 가치를 가지기 위해 필요한 프로젝트 작업을하고 있습니다.스프링 보안 oAuth 2.0 UAA는 자동으로 토큰 값을 얻습니다.

우리는 oAuth2.0 스프링 보안이 적용된 스프링 부트 응용 프로그램을 가지고 있으며 문제는 내가 호출 할 때마다 유효한 토큰을 제공하는 메서드를 찾을 수 없다는 것입니다. 이 순간

, 내가 자바로 코딩 된 포스트 방법 원료를 가지고 있지만은 다음과 같이 수행하는 봄 보안 구현이 있어야합니다 :

  1. 가 호출되는 것을 처음으로,이 요청을 토큰을 저장합니다.
  2. 다음은 토큰이 만료되었는지 확인하고 만료 된 경우에만 새 토큰을 요청합니다.

어디에서 찾을 수 있습니까?

편집 내 프로젝트에 2 개 개의 다른 봄의 인스턴스가

: 권한 부여 서버 - 클라우드 파운드리 UAA 서버 - 그리고 리소스 서버 - 토큰을 요청하고 코딩 하나입니다 나에게서부터로.

인증 서버는 AuthorizationServerTokenServices를 JWT 버전에서 사용하며 자원 서버가 거기에서 토큰을 가져올 때 다른 서버로 보내야하므로 디코드되고 사용되는 것이 아니라 보관되기를 원합니다.

또한 내 응용 프로그램은 웹 응용 프로그램이 아니므로 Facebook에 로그인 할 로그인 페이지가 없으므로 Client Credentials Grant Type을 사용하여 토큰을 얻어야합니다.

디코딩하지 않아야하기 때문에 Single Sign-On을 사용할 수 없습니다.

이 내 현재의 구현 : 어떻게 내가 본 것은이 문제를 해결할 수있는 보안 봄 몇 가지 방법이 있다는 것입니다에서

public String obtainAccessToken() throws ClientProtocolException, IOException { 
     HttpClient httpclient = HttpClients.createDefault(); 

     String userPass64 = new String("User and password"); 

     HttpPost httppost = new HttpPost("localhost:8080/uaa/oauth/token?grant_type=client_credentials");  
     httppost.setHeader("Content-Type", "application/x-www-form-urlencoded"); 
     httppost.setHeader("Authorization", "Basic " + userPass64); 

     //Execute and get the response. 
     HttpResponse response = httpclient.execute(httppost); 
     String responseBody = EntityUtils.toString(response.getEntity()); 

     ObjectMapper mapper = new ObjectMapper(); 
     TokenMessage tokenMessage = mapper.readValue(responseBody, TokenMessage.class); 

     return tokenMessage.getAccess_token(); 
    } 
+0

"자동 생성"- 내가 한 일을 좋아합니다. – radoh

+0

"다른 서버로 보내야합니다."라는게 무슨 뜻입니까? 이 서버에서 다른 보호 된 리소스에 액세스하려고합니까? – raiyan

답변

0

.

기본 방법은 AuthorizationServerTokenServices 인터페이스에서 처리하는 것입니다. 그리고 그것으로 토큰을 저장하는 다른 방법을 가질 수 있습니다. 예 : JDBCTokenStore, InMemoryTokenStoreJwtTokenStore입니다. 여기에 대한 자세한 내용은 여기 : http://projects.spring.io/spring-security-oauth/docs/oauth2.html#managing-tokens

그러나 내가 어떤 종류의 응용 프로그램을 작성하는지 알지 못하기 때문에 기능에 대한 단일 사인을 개발하고 Facebook이 인증 토큰을 처리하도록 할 수 있습니다. 스프링 부트를 사용하는 것에 대한 훌륭한 자습서는 여기에서 찾을 수 있습니다. https://spring.io/guides/tutorials/spring-boot-oauth2/

+0

빠른 응답을 보내 주셔서 감사합니다. 나는 정확하게 설명하지 않았다. 리소스 서버와 별도로 권한 부여 서버 (Cloud Foundry UAA)가있는 아키텍처가 있습니다. AuthorizationServerTokenServices는 Authorization 서버와 관련이 있지만 리소스 서버에도 저장하려고합니다. 내 응용 프로그램의 문제는 웹 응용 프로그램이 아니기 때문에 Facebook에 로그인 할 로그인 페이지가 없으므로 클라이언트 자격 증명 부여 유형을 사용하여 토큰을 얻어야합니다. 따라서 Single Sign On은 가능하지 않습니다. – BigEndian32