목차
- Spring Security OAuth2 - Handler
- Spring Security OAuth2 - Login 페이지 Customizing 하기
- Spring Security OAuth2를 이용한 로그인 구현 - 사용자 정보 가져오기
- Spring Security OAuth2를 이용한 로그인 구현 - Spring boot OAuth2 인증 살펴보기
- Spring Security OAuth2를 이용한 로그인 구현 - OAuth2를 이용한 인증 사용하기
- Google OAuth2 인증 방식 이해하기
- OAuth2를 이용한 로그인 구현 이해하기
OAuth2를 이용한 로그인 구현 이해하기
OAuth란?
OAuth란 Open Authorization의 약자이며 사용자 인증을 대신해서 해주고 Client에게 Access Token을 발급해 사용자 Resource에 대한 접근 권한(Authorization)을 제공하는 방법이다.
OAuth가 등장하기 이전에는 각 사이트 별로 사용자 Id와 Password를 입력해 인증을 하고 정보를 저장하는 방식이였다. 때문에 사용자 입장에서는 본인의 Id와 Password를 각 사이트에 등록해야 한다는 신뢰성 적인 문제와 각 사이트에서는 사용자 정보를 관리하고 책임져야 하는 문제점이 있었다. 해당 문제를 해결하기 위해 등장한 방법이 OAuth 인증 방식이다.
OAuth2 사용하기
Web Application을 기준으로 OAuth2를 사용하기 위한 방법은 크게 3가지가 있다.
- Resource Server(Google, Naver 등) 에 Application을 등록
- Resource Owner 사용자 인증을 통해 Autorization Code 를 가져오기
- Client가 획득한 Autorization Code를 이용해 Access Token 을 발급 받기
1. Resource Server에 Application 등록하기
Resource Server에 Application을 등록하게 되면 Clinet Id 와 Client Secret 그리고 Authorized redirect URIs 를 받을 수 있다.
2. Resource Owner 인증 URI
Reousrce Owner가 OAuth 방식으로 Client에 사용자 인증을 시도하면 특정 URL로 리다이렉트를 진행한다.
Client에서 Resource Server로 Redirect한 주소는 아래와 같다.
https://accounts.google.com/o/oauth2/v2/auth/oauthchooseaccount? |
Request Parameter
- response_type
- Google OAuth 2.0 End-Point 가 인증 코드를 반환하는지 여부를 결정한다.
- 웹 서버 애플리케이션의 경우 매개 변수 값을 code로 설정(resource server가 authorization code 를 발행)
- client_id
- Resource Server에서 Client에 발행해준 Id
- scope
- client가 resource server에 필요한 리소스에 대한 access범위 를 지정한다.
- state
- 애플리케이션이 권한 요청과 권한 서버의 응답 사이의 상태를 유지하기 위해 사용하는 문자열 값을 지정합니다.
- 사용자가 권한을 인증한 후 동일한 값이 반환되는지 확인한다.
- CSRF 공격을 막는데 사용되는 값
- redirect_uri
- Oauth2를 이용해 Resource Server로부터 인증을 마친 사용가자 이동할 URI
- authorization code 를 받기 위한 URI
- 일반적인 redirect_uri는 {baseUrl}/login/oauth2/code/{registrationId} 의 형식을 띈다.
- google의 경우 redirect_uri의 경우 localhost:8080/login/oauth2/code/google 이다.
- flowName
- 무엇을 위한 접근인지 나타내기 위한 parameter
3. Authorization code
사용자가 Resource Server ID 와 Password 를 이용해 인증을 마치게 되면 Client로 Authorization code가 전송된다.
4. Access Token 획득하기
Resource Server로부터 Access Token을 발급 받기 위한 요청으로 Resource Server로부터 받은
Authorization Code 와 Client Id , Client Secret , Redirect URI 를 Parameter로 보낸다.
서버측으로 Acces Token을 획득하기 위한 요청
https://www.googleapis.com/oauth2/v4/token? |
응답값으로 Resource Server로부터 Access Token획득
{ |
참고
Open-Id : https://openid.net/specs/openid-connect-discovery-1_0.html
Oauth2 : https://tools.ietf.org/html/rfc6749
구글 Oauth2 API : https://developers.google.com/identity/protocols/oauth2
생활코딩 Oauth2(구) : https://www.youtube.com/watch?v=y5nNX5w0eqc&t=1s
생활코딩 Oauth2 : https://www.youtube.com/watch?v=hm2r6LtUbk8&list=PLuHgQVnccGMA4guyznDlykFJh28_R08Q-