OAuth 2.0

wisdom·2022년 9월 11일
0

백엔드 개발자라면?

목록 보기
27/42

스프링 시큐리티

  • 인증, 인가를 기반으로 한 스프링 하위 프레임워크
  • 인증(Authentication) 은 간단히 말하면 로그인
  • 인가(Authorization) 는 간단히 말하면 내가 유저인데 어드민 권한으로 다른 사람의 계정 정보를 보거나 유저를 삭제할 수 없듯, 권한을 의미한다.

OAuth

  • Open Authorization
  • 인증 처리를 대신 해준다.
  • 스프링 공식 OAuth 주체
    - Facebook
    - Google
  • OAuth2 Client 라이브러리

OAuth가 나오게 된 배경

  • third party application 에게 사용자의 비밀번호를 노출하지 않으면서, 어떻게 로그인(인증)과 권한(인가)를 부여할지에 대한 니즈에서 나오게 된 프로토콜

소셜 로그인 구현

  • 각각 사이트의 개발자버전 사이트에서 client-id 와 client-secret 키를 받아야 한다.
  • 추가로 scope, redirectUri, userNameAttributeName, attributes 라는 개념이 있다.

scope

  • 동의를 체크해서 데이터를 얻어오는 범위
    - name, nickname, email... etc
  • 스코프를 명시하지 않으면 google, facebook 은 OAuth2가 아닌 OpenId 방식으로 처리한다.
    - OidcService(OpenId Connect Service) 에서 처리한다.
  • OAuth는 권한 부여를 위한 것이다.
    - 인증을 마치고 어떤 요청에 권한이 있는지 체크
  • OpenId Connect 는 인증을 위한 것이다.
    - 그렇기 떄문에 OpenId 방식을 선택하면 인증을 위한 JWT(Json Web Token)을 직접적으로 만들어준다.

redirectUri

  • 기본적으로 소셜로그인 처리는 정해진 링크로 301 302(차이는 영구이동, SEO, Page Rank) 를 하고 성공이나 실패를 판단 후에 보내질 리다이렉트 경로가 있어야 한다.
  • 성공/실패 핸들러에서 직접적인 Uri로 보내줄수도 있지만, Handler가 없다면 디폴트 리다이렉트로 간다.
  • 추가로 리다이렉트 uri까지 맞아야 동작하는 소셜도 있기 때문에 개발자 사이트에 명시해줄때 알맞게 입력해야 한다.

attributes

  • 클래스의 객체로 보면 Map<String, Object> attributes 이다.
  • 각각 다른 인증마다 전달해주는 데이터들이 다르기 때문에 Map에서 값을 유동적으로 채운다.
    - 비슷하게 HttpMethod 통신도 Map으로 값을 받아올 수 있다. 대신 값이 명확하지 않고 너무 확장성 있는 코드와 API 명세에 어려움이 있기 때문에 명확하게 Request, Response DTO class로 쓸 뿐이다.

provider

  • platform
  • 요청이 들어온 서드 파티 앱

oauthId

  • socialId
  • 서드 파티 앱의 PK

보통 provider, oauthId 2개를 이용해서 DB에 저장하고 토큰을 만들게 된다.

참고

profile
문제를 정의하고, 문제를 해결하는

0개의 댓글