본문 바로가기

STUDY/Spring

Spring Boot | Spring Security OAuth2 (2) grant_type password, postman / Curl로 테스트

grantType을 다르게(password) 해서 토큰을 받아보자

1. SecurityConfig 수정

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

2. Oauth2AuthorizationConfig 수정

endpointsauthenticationManager설정해주고, authorizedGrantTypes"password"항목을 추가했다.

@AllArgsConstructor
@Configuration
@EnableAuthorizationServer    // OAuth2 권한 서버
public class Oauth2AuthorizationConfig extends AuthorizationServerConfigurerAdapter {

    private final AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.authenticationManager(authenticationManager);
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
                .withClient("clientId") // 클라이언트 아이디
                .secret("{noop}clientSecret") // 클라이언트 시크릿
                .redirectUris("http://localhost:8081/oauth2/callback")
                .authorizedGrantTypes("authorization_code", "password")
                .scopes("read", "write")    // 해당 클라이언트의 접근 범위
                .accessTokenValiditySeconds(60 * 60 * 4)            // access token 유효 기간 (초 단위)
                .refreshTokenValiditySeconds(60 * 60 * 24 * 120)    // refresh token 유효 기간 (초 단위)
                .autoApprove(true);   // OAuth Approval 화면 나오지 않게 처리
    }
}

3. Postman으로 테스트하기

우선 Authorization의 Type은 Basic Auth로 설정하고, username(ClientId)과 password(ClientSecret)을 적는다.

헤더에는 Content-Type을 설정

Body에 값을 전달한다 grant_type이 password!

access_token을 발급받을 수 있다.

4. Curl로 테스트하기

Curl은 리눅스환경에서는 기본으로 사용할 수 있다.

헤더에 Authorization으로 Basic인증을 해야 하는데, Base64로 인코딩 된 값을 전송해야 한다.

clientID:clientSecret형식을 인코딩하면 된다.

DevPal - Online Base64 encoder

curl -X POST http://localhost:8081/oauth/token 
    -H 'Authorization: Basic [Base64로 인코딩된 값]' 
    -d 'username=[유저네임]&password=[비밀번호]&grant_type=password'