인증 : 유저의 신원을 확인하는 작업(유저가 누구인가)
인가 : 유저에게 특정 리소스에 접근할 수 있는 권한을 주는 작업(유저가 어떤 권한을 가지는가)
oauth2는 인가 프로세스이고, oidc는 인증 프로세스 이다.
OIDC는 oAuth2를 확장한 인증 방식이다.
oAuth 는 사용자 ID를 바로 제공하지 않고 authorization code을 제공한다. 이후 authorization code를 authorization server로 전달하여 다시 access token을 제공받는다.
이후 클라이언트는 이 access token으로 resource server로 정보가 필요할 때마다 access token을 통해 인가를 진행한다.
OIDC는 authorization code로 ID token과 access token을 동시에 발급을 받을 수 있다. oauth2의 경우 authorization code 전달 -> access token 발급 -> 유저 정보 요청 -> 유저 정보 전송 의 과정을 거치나, OIDC는 authorization code를 전달하면 Id Token, access token을 둘다 전달 받는다. ID token은 JWT 형식으로 유저 식별 정보를 제공한다. 즉, oAuth 와 달리 통신과정이 절반으로 줄어든다. (oauth2가 2번 통신할 때 oidc는 1번으로 줄일 수 있다.)
OAuth2의 스코프에 openid 뿐만이 아니라 추가적인 스코프를 추가로 포함한다면 ID 토큰에 유저에 대한 정보를 추가적으로 얻어올 수 있다.
참고
https://hudi.blog/open-id/
https://www.samsungsds.com/kr/insights/oidc.html