이 시리즈의 모든 글 보기 : oauth
이 슬로그는 OAuth 인증의 기본 구조를 이해하고, 닷넷 프로젝트에서 활용하는 방법에 대해 알아 보는 것을 목표로 합니다.
아시다시피, "인증"이라는 주제는 매우 광범위하고, 광범위한 만큼 많은 용어도 많이 등장하며, 무엇보다 "진화적"이라는 특성 때문에, 한 사람이 이 지식을 완벽히 업데이트하는 것이 사실 상 불가능합니다. (인증만 전문으로 개발자가 아니라면 말이죠)
그럼에도 불구하고, 그 근간을 이루는 규칙과 그 규칙의 구현 방식, 그리고, 그 규칙에서 사용하는 용어들을 명확히 이해할 필요가 있습니다.
왜냐하면, 대부분의 경우 인증을 스스로 구현하는 비효율 보다는 유상 또는 무상의 라이브러리를 사용하는 효율을 선택하는데, 각 라이브러리 마다 용어가 통일되어 있지 않고, 구현 방식도 약간의 차이가 있기 때문에, 기준이 되는 지식이 없으면 라이브러리를 사용하는데 어려움을 느낄 수 있습니다.
인증은 진화 중
인증이 진화적인 이유는 보안 수단이기 때문입니다.
보안은 새로운 공격 패턴으로 현재의 보안 방식이 무너지면, 이를 막기 위한 수단이 도입되거나, 완전히 새로운 형식으로 변경되는 일을 반복합니다.
이는, 현재 시점에 널리 인정되는 인증 표준 혹은 인증 방식도 언제든 변경될 가능성이 있음을 의미합니다.
이 글에서 다룰, OAuth 및 그것의 구현 스펙인 OIDC(OpenId Connect) 도 마찬가지입니다.
뿐만 아니라, 2024년 현재, 많은 인증 서비스들은 OAuth 표준(을 바탕으로하는 OIDC)을 따르는 인증 서비스도 제공하는데 그치지 않고, 그것의 약점을 보완한 자기만의 방식으로 동작하는 인증 서비스도 제공하기도 합니다. 물론 그 서비스도 OAuth 표준을 따릅니다.(뭔 말인지…)
예를 들어, GitHub 가 제공하는 인증 서비스를 살펴 보면, 인증 서비스의 클라이언트를 가리킬 때, OAuth apps과 GitHub Apps 라는 두 가지 용어가 등장합니다.
전자는 OAuth 표준을 따르는 인증 서비스의 클라이언트를 가리키고, 후자는 깃허브만의 인증 서비스의 클라이언트를 가리킵니다.
Differences between GitHub Apps and OAuth apps - GitHub Docs
글의 내용을 보시면 아시겠지만, GitHub Apps도 OAuth 표준을 따른다고 명시하고 있습니다.
이렇게 업계 표준을 보완한 자체 인증 방식을 추가하는 추세는 깃허브 뿐만 아니라 다른 서비스들에게도 확대되고 있으며, 결국은 다시 OAuth 가 되었든 새로운 표준이 되었든, 업계 표준의 변경을 유발할 것입니다.
용어의 혼란
인증의 이해를 어렵게 하는 또 다른 요인 중 하나는 용어의 혼란입니다.
현재 데이터 보안은 보통 두 단계로 나누는 것이 표준적인 절차로 굳혀졌습니다.
- 인증, Authentication
- 인가, Authorization
그런데, 이 두 용어는 구현 시점에 따라 혹은 구현자 마다, 다른 이름으로 혹은 혼용해서 사용하는 경우가 많습니다.
대표적인 예로, Http 해더 중 인증(Authentication)과 관련된 해더의 이름이 "Authorization"입니다.
이 혼용은 이 해더가 보안의 개념이 인증과 인가로 분리되어 자리 잡기 전에 도입되었기 때문인 것 같습니다.
뿐만 아니라, 닷넷 개발자에게 익숙한 ClaimsPrincipal 이라는 개념은 Asp.Net Core 혹은 닷넷에서만 사용하는 개념입니다.
다음 글에서는 본격적으로 OAuth 에 등장하는 개념에 대해 알아 보도록 하겠습니다.