OAuth
직접 서버에서 인증과 관련된 로직을 처리할 필요 없이 인증을 중개하는 외부 서버를 이용한기술
학습목표
- OAuth의 키워드를 설명할 수 있다.
- Authorization Code와 Access Token의 차이에 대해 이해할 수 있다.
- Authorization 서버와 Resource 서버의 차이에 대해 이해할 수 있다.
소셜 로그인 인증 방식은 OAuth 2.0이라는 기술을 바탕으로 구현된다.
전통적으로 서버에서 인증을 처리해주는것과 달리 OAuth는 인증을 중개해주는 매커니즘이다.
보안된 리소스가 액세스하기 위해 클라이언트에게 권한을 제공하는 프로세스를 단순화하는 프로토콜이다.
이미 사용자 정보를 가지고 있는 웹 서비스에서 사용자의 인증을 대신 해주고, 접근 권한에 대한 토큰을 발급한 후, 이를 이용해 내 서버에서 인증이 가능해진다.
OAuth를 활용하면 유저는 자주 사용하는 서비스의 ID와 PW만 기억하면 되므로 편하다. 그리고 검증되지 않은 어플리케이션에서 OAuth를 사용하여 로그인한다면, 유저의 민감한 정보가 어플리케이션에 노출될 일이 없고 인증 권한에 대한 허가를 미리 유저에게 구해야하기 때문에 보안상 이점도 있다.
OAuth 작동 메커니즘
- OAuth 주체
1. Resource Owner(사용자)
2. Resource Server & Authorization Server(사용중인 서비스)
Resource Server : 이미 사용 중인 서비스(네이버, 카카오 등)의 서버 중 사용자의 정보를 저장하고 있는 서버
Authorization Server : 이미 사용 중인 서비스의 서버 중 인증을 담당하는 서버
3. Application(새로운 서비스)
- OAuth 인증 방식의 종류와 흐름
*Grant Type : Authorization Server에서 Access Token을 받아오는 방식
1. Implicit Grant Type (암묵적 허가) : 기존 서비스에 로그인만 되어있다면 새로운 서비스에 바로 액세스 토큰을 내어주기 때문에 보안성이 떨어져 인증 단계를 한 단계 추가한 2번방식을 주로 사용한다.
1. 사용자가 Application에 접속합니다.
2. Application에서 Authorization Server로 인증 요청을 보냅니다.
3. Authorizaiton Server는 유효한 인증 요청인지 확인한 후 액세스 토큰을 발급합니다.
4. Authorization Server에서 Application으로 액세스 토큰을 전달합니다.
5. Application은 발급받은 액세스 토큰을 담아 Resource Server로 사용자의 정보를 요청합니다.
6. Resource Server는 Application에게서 전달받은 액세스 토큰이 유효한 토큰인지 확인합니다.
7. 유효한 토큰이라면, Application이 요청한 사용자의 정보를 전달합니다.
2. Authorization Code Grant Type (인증 코드 허가) : 1에 사용한 인증 단계가 추가로 있기 때문에 비교적 안전하다. 토큰을 앱의 client에 노출시키지 않고 server에서만 관리하도록 만들 수도 있기 때문에 소셜 로그인을 구현하는 방식의 선택지가 늘어나게 된다.
1. 사용자가 Application에 접속합니다.
2. Application에서 Authorization Server로 인증 요청을 보냅니다.
3. Authorizaiton Server는 유효한 인증 요청인지 확인한 후 Authorization Code를 발급합니다.
4. Authorization Server에서 Application으로 Authorization Code를 전달합니다.
5. Application이 Authorization Code로 발급받은 Authorization Code를 전달합니다.
6. Authorizaiton Server는 유효한 Authorization Code인지 확인한 후 액세스 토큰을 발급합니다.
7. Authorization Server에서 Application으로 액세스 토큰을 전달합니다.
8. Application은 발급받은 액세스 토큰을 담아 Resource Server로 사용자의 정보를 요청합니다.
9. Resource Server는 Application에게서 전달받은 액세스 토큰이 유효한 토큰인지 확인합니다.
10. 유효한 토큰이라면, Application이 요청한 사용자의 정보를 전달합니다.
3. Refresh Token Grant Type (refresh 토큰 허가) : 액세스 토큰이 만료되었을 때 리프레시 토큰을 사용해서 액세스 토큰을 받아오는 인증방식. 어플리케이션은 다시 발급 받은 액세스 토큰을 사용해서 Resource Server에서 사용자의 정보를 받아오게 된다.
- OAuth의 장점
1. 쉽고 안전하게 새로운 서비스를 이용할 수 있다.
- 사용자는 OAuth를 통해 특정 사이트에 정보를 일일이 입력하지 않아도 쉽게 가입 가능
- 정보를 해당 서비스에 직접 노출하지않아 직접 가입보다 안전
- 어플리케이션 또한 사용자의 정보를 직접 가지고 있는 것 보다 위험성이 덜하다.
2. 권한 영역을 설정할 수 있다.
- OAuth 인증으로 모든 영역을 허가하지 않고 사용자는 원하는 정보에만 접근을 허락 할 수 있어서 안전하다.
- OAuth 설정 페이지에서는 어플리케이션에서 필요한 정보를 선택할 수 있다. 사용자는 원하는 정보만 선택적 제공할 수 있다.
1. Getting Ready
2. Accessing Data in an OAuth Server
'네트워크' 카테고리의 다른 글
[Proxy] CORS 에러를 해결하는 방법 (2) | 2023.06.07 |
---|---|
[인증/보안] Token (2) | 2023.05.03 |
[인증/보안] cookie/session (2) | 2023.05.02 |
[ngrok] 3004오류 (2) | 2023.05.01 |
[네트워크/HTTP] HTTP (0) | 2023.04.29 |