25P by neo 2달전 | favorite | 댓글 8개
  • "auth"라는 용어는 인증(authentication)과 권한 부여(authorization) 두 가지 의미를 가짐
  • 이로 인해 라이브러리나 패키지 이름에서 혼란이 발생함
  • "authn"과 "authz"라는 용어는 명확하지 않고 이해하기 어려움

인증과 권한 부여의 차이

  • 인증(authentication): 사용자가 누구인지 확인하는 과정
  • 권한 부여(authorization): 사용자가 무엇을 할 수 있는지 결정하는 과정
  • 두 개념은 서로 다르며, 하나를 해결한다고 다른 문제가 해결되지 않음

"permissions"와 "login" 사용 제안

  • 인증을 "login"으로, 권한 부여를 "permissions"로 명확히 구분할 것을 제안함
  • "login"은 명사와 동사 형태로 사용 가능함
    • 명사: 시스템에 접근하기 위해 입력하는 정보
    • 동사: 시스템을 사용하기 위해 로그인하는 행위
  • "permissions"는 명사 형태로 사용하며, 동사 형태로는 "check permissions"를 사용함

명확한 용어 사용의 장점

  • 소프트웨어 엔지니어 외의 다른 분야 사람들도 쉽게 이해할 수 있음
  • 더 나은 추상화를 가능하게 함
  • 인증과 권한 부여를 별도의 모듈로 분리하여 설계할 수 있음

GN⁺의 의견

  • 명확한 용어 사용의 중요성: 용어가 명확하면 커뮤니케이션이 원활해지고, 오해를 줄일 수 있음.
  • 추상화의 이점: 인증과 권한 부여를 분리하면 시스템 설계가 더 유연해지고 유지보수가 쉬워짐.
  • 다른 용어의 사용 예시: "login"과 "permissions" 외에도 "access control" 같은 용어도 고려해볼 만함.
  • 기술 도입 시 고려사항: 새로운 용어를 도입할 때는 팀 내에서 충분한 논의와 합의가 필요함.
  • 관련 프로젝트 추천: 인증과 권한 부여를 분리한 대표적인 프로젝트로는 OAuth와 OpenID Connect가 있음.

개발자끼리는 auth 대신 authn, authz를, 사용자와 접점이 있는 문서나 컨트롤러/파사드에 login, permission을 사용하는건 동의할 만 합니다. 다만 authn, authz까지 없애자는 건 그럴 필요가 있나 싶습니다

본문에 지적하듯이 auth가 인증과 권한을 중의적으로 사용되어 혼란스럽긴 했었죠. 순순한 개발자 외 다른 분야와 comm을 위해 좀 더 일반적인 용어를 통해 분리하는 건 바람직한 시도 같습니다.

일부러 둘을 합쳐서 auth라고 하는 거 아닌가요?

Hacker News 의견
  • "Authorize"와 "Authenticate"는 중세 시대부터 사용된 훌륭한 단어임. 두 단어의 의미는 크게 변하지 않았음.
  • 이 두 단어는 암호 시스템에서 중요한 차이를 가짐. 혼동을 줄이기 위해 단어를 바꾸는 것은 도움이 되지 않을 것 같음.
  • "auth"라는 이름 때문에 혼란이 생긴다는 주장은 설득력이 부족함. 단어를 바꾸는 것이 문제를 해결하지 못할 것 같음.
  • "authn"과 "authz"라는 약어를 사용하는 것이 좋음. 하지만 긴 단어를 사용하는 것도 괜찮음.
  • "Identity"와 "Access" Management (IAM)는 표준 용어임. 개인적으로 "authnz"라는 용어를 선호함.
  • "Login"은 토큰이나 키 기반 인증을 포함하지 않음. 서비스 계정은 로그인하지 않지만 인증과 권한 부여가 필요함.
  • Authn과 Authz의 구분이 명확하지 않음. 때로는 명확한 용어보다 멋진 용어를 더 좋아하는 것 같음.
  • IAM 시스템에서 "auth"라는 용어를 사용하는 데 문제가 없었음. 더 구체적인 표현이 필요할 때는 적절한 구를 사용하면 됨.
  • "login"과 "permissions"는 시스템의 전체 의미와 복잡성을 포착하지 못함. 인증은 로그인보다 더 많은 의미를 가짐.
  • 인증과 권한 부여는 밀접하게 관련되어 있음. 인증 없이 권한 부여가 불가능함.
  • 로그인은 인증의 대체 용어로 적합하지 않음. 인증에는 로그인이 필요하지 않은 경우도 있음.
  • "auth"는 인증과 권한 부여를 모두 의미할 수 있음. 두 개념이 자주 함께 사용되기 때문임.
  • 인증과 권한 부여는 IT와 정보 보안에서 표준 용어임. 혼란을 피하려면 완전한 단어를 사용하는 것이 좋음.
  • "authn"과 "authz"는 기술적인 사람들 사이에서 충분히 사용 가능함. 일반 대중에게는 "login"과 "permissions"를 사용하는 것이 좋음.
  • 실생활에서도 유사한 개념이 존재함. 예를 들어, 작업 배지는 신원을 확인하고 접근 권한을 부여함.
  • 권한 부여와 권한은 동일하지 않음. 권한은 특정 사용자에게 할당되지 않은 권리나 특권임.
  • 권한 부여는 두 가지 의미를 가질 수 있음. 사용자가 특정 작업을 수행할 수 있는 권한을 부여하는 과정과 이를 확인하는 과정임.
  • "access control"은 런타임 접근 제어를 의미할 수 있음. 애플리케이션이 사용자 인증 후 수행하는 작업임.
  • "authN"과 "authZ"는 충분히 적절하고 잘 이해됨. 권한 부여는 항상 권한과 사용자의 연결과 관련됨.

Authentication 과 Authorization 둘 다 Auth 로 줄일 수 있는게 문제라면,
본문에서 언급됐던 것 같이 Authn, Authz 로 충분할거 같은데 말이죠...
이게 명확하지 않다 생각했다면, Authenty, Authory 까지 좀 더 풀어도 괜찮을거구요.

권한 시스템은 또 퍼미션 형태가 있고 acl 형태가 있고 또 그러면 어찌 구분하려고..?
뭔가 억지 같은데...

아마 비개발팀원과의 소통비용을 줄이려는 시도 아닌가 싶습니다만, 살짝 투머치네요.

Authentication 과 authorization 이 있는데 왜 굳이...