스프링 시큐리티 OAuth2/OAuth 2.0 Client Fundamentals

클라이언트 앱 시작하기 - application.yml/ OAuth2ClientProperties

webmaster 2023. 1. 14. 16:06
728x90

클라이언트 권한 부여 요청 시작

클라이언트 권한 부여 요청

  1. 클라이언트가 인가서버로 권한 부여 요청을 하거나 토큰  요청을 할 경우 클라이언트 정보 및 엔드포인트 정보를 참조해서 전달한다
  2. application.yml 환경설정 파일에 클라이언트 설정과 인가서버 엔드포인트 설정을 한다
  3. 초기화가 진행되면 application.yml  에 있는 클라이언트 및 엔드포인트 정보가 OAuth2 ClientProperties의 각 속성에 바인딩된다
  4. OAuth2 ClientProperties에 바인딩되어 있는 속성의 값은 인가서버로 권한부여 요청을 하기 위한 ClientRegistration 클래스의 필드에 저장된다
  5. OAuth2 Client는 ClientRegistration를 참조해서 권한부여 요청을 위한 매개변수를 구성하고 인가서버와 통신한다

application.yml

application.yml

  • registration : 클라이언트 설정
    • authorization-grant-type : OAuth 2.0 권한 부여 타입(authorization code, password.. 등 여러 가지 방식이 있다)
    • client-id : 서비스 공급자에 등록된 클라이언트 아이디
    • client-name: 클라이언트 이름
    • client-secret: 서비스 공급자에 등록된 클라이언트 비밀번호
    • redirect-uri: 일종의 콜백, 인가서버에서 권한 코드 부여 후 클라이언트로 리다이렉트 하는 위치
    • clientAuthenticationMethod: 클라이언트 자격증명 전송방식 (client -> 인가서버로 전송하는 방식을 의미한다)
    • scope: 리소스에 접근 제한 범위, 인가서버에 스코프가 정의가 되어 있어야 하며 client 서버에 토큰을 전달해 줄 때, scope를 포함시켜 전달한다.
  • provider : 공급자 설정
    • authorization-uri : OAuth2.0 권한 코드 부여 엔드 포인트(코드 요청 엔드포이트)
    • issuer-uri : 서비스 공급자 위치
    • jwk-set-uri: OAuth2.0 JwkSetUri 엔드 포인트
    • token-uri: OAuth2.0 토큰 엔드 포인트
    • user-info-uri: OAuth2.0 UserInfo 엔드포인트
    • user-name-attribute: OAuth2.0 사용자명을 추출하는 클레임명

OAuth2 ClientProperties(prefix="spring.security.oauth2.client)

OAuth2ClientProperties

  • Registration 은 인가 서버에 등록된 클라이언트 및 요청 파라미터 정보를 나타낸다
  • Provider는 공급자에서 제공하는 엔드포인트 등의 정보를 나타낸다
  • 클라이언트 및 공급자의 정보를 registration / provider 맵에 저장하고 인가서버와의 통신 시 각 항목을 참조하여 사용한다
    • 네이버, 구글, 페이스북 등등 다양한 인증 서버 properties 값을 각각의 Registation, Provider에 저장하여 사용하면 된다.

TEST

application.yml 작성(keycloak에서 설정한 client, user 기반으로 입력)

server:
  port: 8081
spring:
  security:
    oauth2:
      client:
        registration:
          keycloak:
            client-id: oauth2-client-app
            client-secret: xSlqD456gfAeLZO93BLbTwQys0NEc8KL
            client-name: oauth2-client-app
            redirect-uri: http://localhost:8081/login/oauth2/code/keycloak #콜백 주소, spring security filter가 해당 uri를 받는게 정의되어 있다.
            authorization-grant-type: authorization_code
            client-authentication-method: client_secret_basic #post, none 등이 더 있다
            scope:
              - openid
              - profile
              - email
        provider:
          keycloak:
            authorization-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/auth
            token-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/token
            issuer-uri: http://localhost:8080/realms/oauth2
            user-info-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/userinfo
            jwk-set-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/certs
            user-name-attribute: preferred_username #사용자 정보를 가지고 올 키(keykloak은 이값으로 되어있다)

인증서버에 valid URI에 redirectUri 추가

RedirectUri 추가

  • keycloak 인증 서버에서 redirectURI를 추가해 주어야 한다.
728x90