필자는 인증을 위해서뿐만 아니라 토큰의 실제 가치를 가지기 위해 필요한 프로젝트 작업을하고 있습니다.스프링 보안 oAuth 2.0 UAA는 자동으로 토큰 값을 얻습니다.
우리는 oAuth2.0 스프링 보안이 적용된 스프링 부트 응용 프로그램을 가지고 있으며 문제는 내가 호출 할 때마다 유효한 토큰을 제공하는 메서드를 찾을 수 없다는 것입니다. 이 순간
, 내가 자바로 코딩 된 포스트 방법 원료를 가지고 있지만은 다음과 같이 수행하는 봄 보안 구현이 있어야합니다 : 이- 가 호출되는 것을 처음으로,이 요청을 토큰을 저장합니다.
- 다음은 토큰이 만료되었는지 확인하고 만료 된 경우에만 새 토큰을 요청합니다.
어디에서 찾을 수 있습니까?
편집 내 프로젝트에 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();
}
"자동 생성"- 내가 한 일을 좋아합니다. – radoh
"다른 서버로 보내야합니다."라는게 무슨 뜻입니까? 이 서버에서 다른 보호 된 리소스에 액세스하려고합니까? – raiyan