EzKorry / spring-summer

0 stars 0 forks source link

스프링 시큐리티 OAuth2 (유튜브 강좌) #3

Open EzKorry opened 4 years ago

EzKorry commented 4 years ago

https://www.youtube.com/watch?v=NQM1hghpF0Q

EzKorry commented 4 years ago

문제 by 민영

  1. Spring Oauth2 에서 Resource Owner, client, Resource Server, Authorization Server 네 가지 역할 및 관계를 설명하라
  2. csrf란?
  3. 인증과정에서 cors설정이 필요한 이유는?
EzKorry commented 4 years ago

문제 by 태훈

  1. refresh_tokenaccess_token의 역할은 무엇인가?
  2. @bean 어노테이션의 역할은?
  3. 어떤 dependency가 유효한지 (groupIdartifactId 등) 확인하려면 어디를 들어가서 확인하는가?
EzKorry commented 4 years ago

문제 by 민영

  1. Spring Oauth2 에서 Resource Owner, client, Resource Server, Authorization Server 네 가지 역할 및 관계를 설명하라
  2. csrf란?
  3. 인증과정에서 cors설정이 필요한 이유는?
  1. 각 역할 설명

    • Resource Owner : 사용자. 일반 서비스를 이용하는 사람
    • Client : 우리가 개발하는 서버. 사용자에게 서비스를 제공해줘야 하는 입장이지만 인증 관련된 건 안함.
    • Resource Server : REST API 서버. 액세스 토큰을 기반으로 관련 정보를 받아옴.
    • Authorization Server : 인증 서버. 리소스 서버와 같을 수도 있음. 클라이언트가 여기에 요청해서, 엑세스 토큰이나 리프레시 토큰을 받음.
    • Resource Server 와 Authorization Server는 같을 수 있음. 구글이나 페이스북 등.
  2. csrf란? (구글링함 ㅋㅋ)

    • 웹 어플리케이션 취약점 중 하나로, 인터넷 사용자가 자신의 의지와는 무관하게 특정 웹사이트를 공격하게 하는 것이다.
    • 원리는, 어떤 사이트(페이스북 등)에서 로그인 한 상태해커가 만든 페이지에 들어갔을 때, 사용자는 의도치 않게 권한을 가진 채로 페이스북에게 나쁜 짓을 하게 되는 셈!
    • 막는 방법은 두 가지
      • Referrer(요청한 쪽)이 똑같은지 (예: *.facebook.com) 검증.
      • csrf 토큰을 미리 설정하여 서버 쪽에서 저장하고 있고, 이를 정상적인 페이스북 페이지에는 그대로 노출시킨다. 요청이 들어오면 이 토큰이 서로 일치하는지 확인한다. . 해커가 만든 사이트에는 이 토큰을 알 수 있는 방법이 없으므로 방어가 된다.
      • Double Submit Cookie 검증이란 것도 있는데 다음 기회에 알아보자구요!
  3. 인증 과정에서 cors 설정이 필요한 이유는?

    • 보안 상의 이유로 동일 출처 정책(same-origin policy)을 지키고 있지만, 예외적으로 다른 서버나 포트에 있는 리소스를 요청해야 할 필요가 있을때 (예를 들어 서비스는 service.com 에서 하고 있지만 여기에 포함된 스크립트에서 resource.com 에 요청하여 정보를 가지고 와야 할 때) cors 설정을 해주면 합법적으로 가능하다.
    • 방법은 service에서 response 해줄 때, 헤더에다가 resource.com에 요청하는 것은 괜찮다고 명시해주면 됨.
    • 인증 과정에서는 Resource Owner 입장에서 요청은 client에게 준 다음 응답 받았는데, 인증 요청은 추가적으로 Authorization Server나 Resource Server에게 날려야 하므로 client에서 Authorization Server와 Resource Server가 허용되도록 설정해주어야 함.
hasterprin commented 4 years ago
  1. refresh_token 과 access_token의 역할은 무엇인가? 보안을 위해 access token을 만료 시간을 짧게 두는 것이 일반적인데 이는 사용자가 로그인을 자주해줘야하는 불편함이 따라옴. 그래서 만료 시간이 훨씬 긴 refresh token을 발급해서 access token 만료 시 새로 access token을 발급받을 수 있게 함. 따라서 access token은 자주 바껴서 보안안전 + 사용성 두 마리 다잡았다 할 수 있음

  2. @bean 어노테이션의 역할은? 메소드에서 반환된 클래스를 ioC 컨테이너에 등록하는 역할. component랑 다른게 얘는 클래스에다가 붙임

  3. 어떤 dependency가 유효한지 (groupId나 artifactId 등) 확인하려면 어디를 들어가서 확인하는가? 어엄…메이븐 빌드할 때 유효성 없다고 에러나지 않나? 제대로 정리되어있는건 모르겠당...