# authentication

310개의 포스트

09_ 인증과 인가

authentication and authorization 인증과 인가는 웹에서 상당히 중요한 개념이다. 인증은 사용자가 누구인지 확인하는 것이고, 인가는 사용자가 어떤 권한을 가지고 있는지 확인하는 것인데, 서비스에서 매우 중요한 역할을 하다 보니, 현업에서는 만져볼 일이 거의 없었다. 이번에 쿠키와 세션을 이용해서 인증과 인가를 구현하면서 이 개념들을 정리해 보려고 한다. Authentication (인증) 인증은 로그인을 생각하면 된다. 인증이 필요한 서비스에 접근할 때 사용자의 신원을 파악하기 위해서 보통 로그인을 요구한다. 로그인 방식은, 비밀번호, 지문, 카드, 핸드폰 인증 등 다양한 방법으로 이뤄지지만, 본질은 사용자가 누구인지 확인하는 것이다. Authorization (인가) 인가는 사용자나 시스템이 특정 리소스에 대한 접근 권한을 얻는(확인하는) 프로세스이다. 보통 인증 이후에 인가가 이뤄지며, 사용자의 세

6일 전
·
0개의 댓글
·
post-thumbnail

[SpringBoot] mallangShop

📍 GitHub 바로가기 1 JWT 설계 1️⃣ JWT dependency 2️⃣ SecretKey → application.properties 3️⃣ JwtUtil.java import org.springframework.beans.factory.annotation.Value; → @Value import문 수정적용 2 JWT적용 설계 > 로그인성공 → HTTP Response Header에 JWT Token 생성 후, 실어 Client에게 보냄 1️⃣ UserController.java 2️⃣ UserService.java 3 JWT인가 설계 1️⃣ 관심상품 조회 📍 ProductController.java 📍 ProductService.java 2️⃣ 관심상품 등록 📍 Prod

2023년 9월 17일
·
0개의 댓글
·
post-thumbnail

Spring Security 동작 과정 절차+JWT 토큰 방식

1. Authentication Spring Security를 직접 적용시켜본 코드를 바탕으로 정리해 보았습니다. 요청 수신 사용자가 form을 통해 로그인 정보가 담긴 Request를 로그인 uri(/api/login)로 요청한다. Authentication 절차가 일어난다. AuthenticationFilter는 UsernamePasswordAuthenticationFilter를 상속받아서 만들었습니다. ![](https://velog.velcdn.com/images/gntjd135/post/f822d66

2023년 9월 14일
·
1개의 댓글
·

JWT

JWT JWT 란? JWT(Json Web Token)는 웹에서 사용되는 JSON 형태의 토큰을 의미하는 표준 규격 주 사용 목적은 인증(Authentication) 또는 인가(Authorization) 정보를 서버와 클라이언트가 주고받을 때 사용 Authorization HTTP 헤더에 Bearer 의 형태로 클라이언트에서 서버로 전송하고, 토큰에 포함된 서명을 통해 서버에서는 위변조 여부 검증 Base64로 인코딩된 형태 구조 Header / Payload / Signature 형태로 구성 Header 에는 토큰의 유형과 서명 알고리즘 명시 Payload 에는 claim이라 지칭 되는 사용자의 인증/인가 정보 명시 Signature 에는 헤더와 페이로드가 비밀키 형태로 서명되어 저장 Json 형태이므로 Key - Value 구조이며, Key는 3글자로 줄이는 관행이 있음 sub :

2023년 9월 8일
·
0개의 댓글
·
post-thumbnail

[SpringBoot] mallangShop

📍 GitHub 바로가기 1 User 설계 1️⃣ entity > User.java 2️⃣ entity > UserRoleEnum.java 3️⃣ repository > UserRepository.java 2 UserDto 설계 1️⃣ dto > SignupRequestDto.java 2️⃣ dto > LoginRequestDto.java 3 회원가입 설계 1️⃣ controller > UserController.java 2️⃣ service > UserService.java 3️⃣ repository > UserRepository.java 4 로그인 설계 1️⃣ controller > UserController.java 2️⃣ service > UserSe

2023년 9월 1일
·
0개의 댓글
·
post-thumbnail

인증(Authentication)과 인가(Authorization)

영어도 비슷하고 의미도 유사한 것 같고 늘 헷갈리는 경우가 많았는데 이번 기회에 인증과 인가를 확실하게 구분지어 정리하고 넘어가 보려고 합니다. 인증(Authentication)과 인가(Authorization) 인증(Authentication) 인증은 해당 유저가 실제 유저인지 인증하는 개념입니다. FaceId, 웹사이트 로그인 등, 실제로 그 유저가 맞는지 확인하는 절차를 의미합니다. 인가(Authorization) 인가는 해당 유저가 특정 리소스에 접

2023년 8월 31일
·
0개의 댓글
·
post-thumbnail

[SpringBoot] 인증과 인가 ①

1 인증과 인가 |구분|의미| |:---:|---| |인증(Authentication)|- 해당 User가 실제 User인지 인증하는 개념 - 스마트폰 지문인식, 사이트 로그인 등| |인가(Authorization)|- 해당 User가 특정 Resource에 접근가능한지 허가를 확인하는 개념 - 관리자페이지, 관리자권한 등| Spring에서 인증&인가 → Spring Security 2 인증의 방식 1️⃣ 웹 어플리케이션인증 특수성 Server - Client 구조 Http 통신 프로토콜 사용 → 비연결성(Connectionless) + 무상태(Stateless) 위의 두가지 특성때문에 url을 계층적으로 설계함

2023년 8월 30일
·
0개의 댓글
·
post-thumbnail

멋쟁이 사자처럼 11기 해커톤 - Firebase 적용기

Firebase Image 들어가기 전에 기존에 RESTful API를 생성하기 위해 json-server를 이용해서 프로젝트를 진행하였었는데, json-server는 단순한 파일 저장 방식을 제공해 쉽고 간편하게 사용할 수 있는 장점이 있지만, 그만큼 데이터베이스의 기능들이 많이 부족했으며 실시간 업데이트가 지원되지 않아 이번에 제작하는 SNS와는 맞지 않다고 생각하였다. 그래서 다른 데이터베이스를 찾던 중 구글이 개발한 Firebase에 알게되었다. Firebase Firebase는 Google이 개발한 클라우드 기반 플랫폼으로, 앱 및 웹 애플리케이션 개발자들에게 다양한 도구와 서비스를 제공하며, 문서가 잘 정리되어 있고 간편하게 사용할 수 있어 많은 개발자들이 사용하고 있다. 나는

2023년 8월 25일
·
0개의 댓글
·
post-thumbnail

Auth에 대한 고민들

들어가기 전에 표준 웹브라우저 위에서 동작하는 클라이언트/서버 구조를 가지는 웹 어플리케이션이고 요청/응답 패턴의 통신을 사용함을 전제로 한다. 큰 틀에서 해당 주제를 고민하는 것이기 때문에 각 세부 기술(구현)에 대해서 자세하게 설명하지 않는다. 특정 기술을 직접적으로 언급하는 것이 아니라면 방법에 대해서 구체적으로 설명하지 않는다. 특정 기술을 직접적으로 언급하였다 하여도 해당 기술에 대한 상세 스펙을 설명하지는 않는다. 서버에 관해서는 특정 언어, 플랫폼, 프레임워크를 사용한다고 가정하지 않는다. 그렇기에 독자가 알고 있는 상식은 상식이 아닐 수 있다. 제목 그대로 Auth와 관련 것을 만들 때 한번 쯤 해 볼 수 있는 고민들에 대해서 서술하고자 한다. 그러니 해결책을 주지는 않는다. 해당 글에서 사용하는 용어가 실제 기술과 일치하지 않을 수 있다. 어느 정도 뭉뚱그려서 사용하는 용어들이 있을 수 있다. 요약 ![](https://ve

2023년 8월 15일
·
5개의 댓글
·
post-thumbnail

authentication과 authorization; cookie, session, token

이 글에서는... 오늘은 예전에 설명을 들었어도 개인적으로 헷갈렸던 개념들을 정리해보려고 한다. Auth Auth는 보통 authentication과 authorization을 통칭하는 말이거나, authentication을 가리킨다. 스펠링이 비슷하고 단어가 사용되는 맥락이나 상황도 비슷하여 헷갈릴 수 있으나, 둘은 개념적으로 다르다. 간단하게 정리하면 authentication은 인증, authorization은 액세스 제어라고 할 수 있는데, 아래에서 더 자세히 살펴보자. Authentication authentication은 사용자의 신원을 확인하는 과정이다. 인증에 사용하기 위해 제공하는 데이터(자격 증명)을 이미 저장된 데이터와 비교하여 신원을 확인한다. 예로는 비밀번호 인증, 생체 인증 등이 있다. Authorization authentication은 권한을 부여하는 것으로, 시스템 리소스에 대한 접근 수준을 결

2023년 8월 6일
·
0개의 댓글
·
post-thumbnail

[Flutter] Firebase Cloud Functions 사용해 보기

Firebase Cloud Functions 사용해 보기 Firebase 세팅하기 Firebase Authentication 사용해보기 Firebase Storage 사용해보기 Firebase Firestore Database 이번 글에서는 Firebase의 기능인 Cloud Functions에 대해서 다뤄보도록 하겠다. Cloud Functions는 Firebase의 기능과 HTTP 요청에 의해서

2023년 8월 6일
·
1개의 댓글
·
post-thumbnail

웹 개발 주요 인증 방식(토큰, 쿠키, 세션)

웹 개발에서 사용하는 주요 인증 방식으로는 토큰, 쿠키, 세션 등이 있습니다. 각각의 방식의 장단점은 다음과 같다. 토큰 (Token) 토큰은 클라이언트가 로그인을 하면 서버에서 발급하며, 이후 클라이언트는 요청 헤더에 토큰을 포함하여 전송한다. 서버는 토큰을 검증하여 해당 클라이언트가 인증된 사용자인지 확인한다. 토큰은 JWT(JSON Web Token) 형식으로 만들어질 수 있으며, payload에 인증 정보를 포함시킬 수 있다. 토큰은 일반적으로 유효기간을 설정하여 만료되면 재발급해야 한다. 쿠키 (Cookie) 쿠키는 클라이언트에서 저장하며, 서버에서 Set-Cookie 헤더를 이용하여 클라이언트에 전송한다. 클라이언트는 이후 요청 헤더에 쿠키를 포함하여 전송한다. 쿠키는 브라우저에서 관리되므로 보안성이 높습니다. 하지만 쿠키도 탈취될 수 있으므로, HTTPS 프로토콜을 사용하여 통신하는 것이 좋다. 쿠키는 도

2023년 7월 27일
·
0개의 댓글
·
post-thumbnail

NestJS - 로그인 (4) 인증(Authentication)

기본적인 구조 생성 ![](https://velog.velcdn.com/images/qkrrjsxo/post/e575e2e0-74ea-4b0c-834c-981c911ef164/i

2023년 7월 20일
·
1개의 댓글
·
post-thumbnail

[Security] JWT

인증에 사용되는 토큰의 일종인 JWT(JSON Web Token)를 알아보기 전에 토큰 외의 다른 인증방식에 대해 먼저 알아보자. 인증 방식의 종류 서버에서 클라이언트를 인증하는 방법은 크게 쿠키, 세션, 토큰방식으로 나눌 수 있다. 쿠키 쿠키란 Key-Value형식의 문자열로, 서버의 정보를 클라이언트의 브라우저에 저장하기 위해 사용한다. 서버에서 응답에 Set-Cookie헤더를 통해 여러 정보들을 클라이언트의 브라우저에 쿠키로 등록하면 이후 매 요청마다 쿠키값이 같이 전송되기 때문에 브라우저를 식별할 수 있다. 쿠키를 이용한 인증방식은 다음과 같은 과정을 통해 이루어진다. 클라이언트가 서버에 request를 보낸다 서버에서 r

2023년 7월 19일
·
0개의 댓글
·
post-thumbnail

Spring Security [Authentication]

Spring Security 의 Authentication 공식문서 https://docs.spring.io/spring-security/reference/6.1-SNAPSHOT/servlet/authentication/architecture.html#servlet-authentication-securitycontext 1. 주요 요소 1. SecurityContextHolder 누가 인증(Authenticated) 되었는지 정보를 담고있는 저장소의 개념이다. 아래는 아키텍쳐 사진이다. SecurityContextHolder 안에 SecurityContext가, 또 그 안에 Principal, Credentials, Authorities 정보가 존재한다. 다음은 해당 아키텍

2023년 7월 19일
·
0개의 댓글
·
post-thumbnail

[Security] OAuth2.0

OAuth 2.0 > OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다. - wikipidea OAuth 2.0(Open Authorization 2.0)은 웹 어플리케이션에서 다른 서비스의 사용자 정보에 대해 접근하고자 할 때 안전하게 사용자의 정보를 열람할 권한을 부여해주는 프로토콜로, 소셜 로그인이나 외부 기능이 필요할 때 사용된다. OAuth 2.0 참여 주체 Resource Owner(리소스 소유자): 서비스가 접근하려는 자원(개인정보 등)을 소유하고있는 주체로, 클라이언트에게 자원의 접근 권한을 허가해준다. 일반적으로 서비스 사용자에 해당한다. Client(클라이언트): 보호된 자원을 사용하려는 주체로, 일반적으로 서비스를 제공하는 어플리케이션 서버에 해당한다. Authoriza

2023년 7월 19일
·
2개의 댓글
·
post-thumbnail

JUnit 테스트 - JwtAuthenticationFilter 테스트

최주호 강사님의 인프런 강좌 정리 및 실습한 기록 목적 JwtAuthentcationFilter 의 동작 과정을 복습하고, 잘 동작하는지 테스트한다. 구현에 필요한 내용 @ActiveProfiles("test") 어노테이션을 이용하여 application-test.yml 파일을 적용되도록 변경 @BeforeEach 어노테이션을 활용해서 테스트 직전 데이터 1건 넣기 MockMvc 클래스 의존성 주입 @AutoConfigureMockMvc 어노테이션을 사용해야 MockMvc 클래스를 사용할 수 있다. DummyObject 클래스를 상속받아서 간단하게 테스트용 유저를 생성한다. MockMvc 환경에서 POST 요청, response 를 어떻게 테스트 하는지 알아본다. @Transactional 적용 ActiveProfiles("test") >

2023년 7월 18일
·
0개의 댓글
·
post-thumbnail

[Spring Security] 스프링 시큐리티 - 필터 체인

이전 포스팅에서는 스프링 시큐리티의 인증 프로세스에 대해 살펴보았다. 인증에 성공한 요청은 리소스에 대한 권한을 부여받고, 디스패쳐 서블릿에 도달한다. 이번 글에서는 인증 프로세스를 포함한 스프링 시큐리티의 전체 동작흐름과 스프링 시큐리티를 구성하는 필터체인에 대해 알아보자. 스프링 시큐리티 동작 흐름 스프링 시큐리티의 전체적인 구조는 아래와 같다. 가장 먼저 사용자가 어

2023년 7월 15일
·
0개의 댓글
·
post-thumbnail

Authentication

Authentication 현재 인증된 사용자를 나타내며 SecurityContext에서 가져올 수 있습니다. principal : 사용자를 식별합니다. Username/Password 방식으로 인증할 때 일반적으로 UserDetails 인스턴스입니다. credentials : 주로 비밀번호, 대부분 사용자 인증에 사용한 후 비웁니다. authorities : 사용자에게 부여한 권한을 GrantedAuthority로 추상화하여 사용합니다. 선언 사용예시 중요 코드 > > @GetMapping("/products") public String getProducts(@AuthenticationPrincipal UserDetailsImpl userDetails) {

2023년 7월 13일
·
0개의 댓글
·
post-thumbnail

[Spring Security] 스프링 시큐리티 - 인증 프로세스

인증(Authentication)과 인가(Authorization) '보안' 하면 가장 기본이되는 개념이 바로 인증과 인가이다. 하지만 단어가 비슷하게 생겨서 그런지 두 용어를 항상 헷갈리는 것 같다. 그래서 Spring Security에 대해 설명하기 이전에 인증과 인가에 대한 개념을 잡고 가겠다. 두 용어에 대한 정의는 다음과 같다. > 인증(Authentication): 참이라는 근거가 있는 무언가를 확인하거나 확증하는 행위 > 인가(Authorization, 권한부여): 리소스에 대한 접근 권한 및 정책을 지정하는 기능 즉, 인증(Authentication)이란 사용자의 신원을 확인하는 과정이고, 인가(Authorization)란 사용자에게 특정 리소스에 대한 접근권한이 있는지 확인하는 과정이다. 예를 들어 사용자가 은행 서비스에 로그인할 때 서버에서는 이 사용자가 서비스에 회원으로 등록되어있는지 확인하고(인증), 회원이 맞으

2023년 7월 13일
·
0개의 댓글
·