오늘은 부트캠프 58일차이면서 프로젝트 3일차이다. 오전에 간단한 회의를 거친 후 어제 못한 JWT와 스프링 시큐리티에 대한 기능과 설정을 마쳤고 내가 알고 있는 부분은 일단 다 끝냈고, 내일 부족한 부분과 아직 구현하지 못한 로그아웃 기능을 구현을 할 것이다. 처음에 JWT와 시큐리티에 대한 강의를 이해하지 못하고 이 정도가 있구나라고 생각했는데 다시 궁금한게 생겨서 강의를 다시 보니 조금 이해가 가는 듯 했다.
오늘 배운 것
1. Authentication과 Authorization
- Authentication은 로그인이고, Authorization은 권한이다. 권한 부여는 사용자의 신원이 성공적으로 인증된 후에 발생합니다.
- Authentication/인증
- 로그인과 같이 사용자 또는 프로세스의 신원을 확인하는 프로세스
- 인증에 사용하기 위해 제공하는 데이터(자격 증명)는 이미 저장된 데이터와 비교함
- 이 데이터는 인증 서버에 저장되며, 가장 일반적인 인증 방법은 비밀번호를 사용하는 것
- 인증에서는 비밀번호 기반 인증, SSO, API 인증, Barcode 인증, 생체 인증 등이 있음
- 줄여서 AuthN이라고도 함
- Authentication Factors
- 지식기반 : 사용자만 알고 있는 것 ex> 패스워드, 이름, 주민번호, 사번 등
- 소유기반 : 사용만 소유하고 있는 것 ex> 인증서, OTP, SMS인증, USB 토큰 등
- 속성기반 : 생체기반으로 사용자만의 고유 속성 ex> 지문, 홍채, 정맥, 얼굴, 행동양식 등
- Authentication Techniques
- 비밀번호 기반 인증
- 사용자의 신원을 확인하기 위해 비밀번호가 필요
사용자는 먼저 이메일 주소 및 비밀번호와 같은 필요한 세부 사항을 제공하여 계정을 작성한 뒤 액세스
비밀번호없는 인증- 사용자는 매직 링크 또는 이메일 또는 문자 메시지를 통해 전달 된 OTP를 통해 로그인
- 2FA(Two Factor Authentication) / MFA(Multi Factor Authentication)
- 2 단계 또는 다중 요소 인증을 사용하여 추가 보안 계층을 강화 및 유연한 인증
- Single Sign On
- SSO를 통해 사용자는 단일 자격 증명 세트로 여러 응용 프로그램에 액세스 할 수 있음
- 한 번의 시스템 인증을 통해 다양한 정보시스템에 재인증없이 접근할 수 있도록 개발된 방식
- Social Authentication
- 소셜 네트워킹 플랫폼의 기존 자격 증명으로 확인하고 인증
- 이 방법은 Facebook, Twitter, Google 등과 같은 소셜 네트워킹 플랫폼의 기존 자격 증명을 사용하여 사용자를 식별함
- API Authentication
- API 인증은 서버에서 서비스에 액세스하려는 사용자 식별을 인증하는 프로세스
- API Key / Token
- 생체인증
- 신원을 확인하기 위해 개인의 독특한 생물학적 특징의 사용을 포함
- 사용자의 생체 데이터가 캡처되어 데이터베이스에 저장된 후 사용자 인증을 확인하기 위해 비교
- 홍채, 지문, 얼굴, 행동 인식등이 있음
- Authorization / 권한부여
- 권한부여는 누가 무엇을 할 수 있는지 결정하는 규칙
- 파일, 데이터 등과 같은 시스템 리소스에 대한 액세스 수준을 결정하는 데 사용되는 보안 메커니즘
- 예로 DBA는 데이터베이스 작성 및 삭제 권한이있는 반면 Software Engineer는 읽기 및 쓰기 권한만 주어짐
- 기본적으로 개인에게 조직의 기밀 리소스에 대한 부분 또는 전체 액세스 권한이 부여되는 프로세스
- 기술에는 역할 기반 액세스 제어, JSON 웹 토큰, SAML, OpenID 권한 부여, 0Auth 등이 있음
- 줄여서 AuthZ라고도 함
- Authorization Techniques
- API keys
- 이 방법은 인증 및 권한 부여에도 사용됨
- 사용자가 등록 중에 시스템에 대한 인증 된 액세스 권한을 얻으려고하면 API key를 생성 받아 사용함
- API Key는 일반적으로 요청의 URL 또는 헤더에 포함하는 긴 문자열
- API 키는 주로 API를 호출하는 사람을 식별하는 수단으로 사용
- 이 방법은 AuthN 및 Authz 모두에서 사용
- 시스템-시스템 및 사용자-시스템 권한 관리를 위해 RBAC ( 역할 기반 액세스 제어 )를 구현할 수 있음
- HMAC (Hash-Based Message Authentication Code)
- 암호화에서 HMAC은 암호화 해시 기능과 비밀 암호화 키를 포함하는 특정 유형의 메시지 인증 코드
- 다른 MAC(Message Authentication Code)과 마찬가지로 데이터 무결성과 메시지의 신뢰성을 동시에 확인하는 데 사용될 수 있음
- JWT / JSON Web Token
- JWT는 당사자간에 안전하게 데이터를 전송하기위한 공개 표준이며 사용자는 공개 / 개인 키 쌍을 사용하여 권한을 부여받음
- SAML / Security Assurance Markup Language
- 디지털 서명 된 XML 문서를 통해 인증 정보를 교환하는 표준 싱글 사인온 형식 (SSO)
- 서비스 공급자와 아이덴티티 공급자라는 두 엔터티 간의 XML 기반 인증 및 권한 부여 시스템
- OpenID
- 인증 서버의 인증을 기반으로 사용자 신원을 확인하게 Authentication에 더 가까움
- 이를 통해 클라이언트는 Authorization Server의 인증을 기반으로 최종 사용자 ID를 확인할 수 있을뿐만 아니라
- 최종 사용자에 대한 상호 운용 가능하고 REST와 유사한 기본 프로파일 정보를 얻을 수 있음
- OAuth
- 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용 접근 위임을 위한 개방형 표준
- 이 매커니즘은 여러 기업들에 의해 사용되는데, 이를테면 아마존, 구글, 페이스북, 마이크로소프트, 트위터가 있으며 사용자들이 타사 애플리케이션이나 웹사이트의 계정에 관한 정보를 공유할 수 있게 허용