inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Lớp học thành thạo Kotlin thông qua thực hành dự án máy chủ ngân hàng

Triển khai OAuth2 Service và JWT

JWT토큰 발급 시, subject 값을 다양하게 넣어서 여러 개의 토큰을 만드는 이유

Đã giải quyết

7

dkswhdgur2468873

7 câu hỏi đã được viết

0

안녕하세요, 강사님 🙂

덕분에 코프링을 빠르게 배우고 있어 감사드립니다!

영상 8:20 경, JWT 설명 중 withSubject() 의 값으로 email 만 넣는다던가, name 만 넣어서 구현한다고 말씀주셨습니다.

 

고민을 해봤지만 여러 개의 Subject 를 만드는 이유가 궁금해서 질문드립니다. 상황 예시와 함께 답변해주시면 감사드립니다!!

kotlin mysql mongodb kafka redis

Câu trả lời 2

0

Hong

안녕하세요 종혁님 우선 sub 라는 필드는 보통 이 토큰을 사용하는 사용자의 정보 를 담게 됩니다.


그래서 우선적으로 정리해보자면 이렇게 이해하시면 될 꺼 같아요.

이메일을 Subject로 사용하는 경우
이메일이 서비스에서 유일한 값이고 로그인 ID 역할을 한다면
- sub = "hong@example.com"

회원 ID를 Subject로 사용하는 경우 (가장 많이 사용하는 방식)
데이터베이스의 PK가 변경되지 않는 값이라면 가장 안정적입니다.
- sub = "12345"

Username을 Subject로 사용하는 경우
Username이 절대 변경되지 않는 정책이라면 가능합니다.
- sub = "hong"

그래서 우선적으로 제가 표현이 잘못되었을 수도 있을꺼 같은데 여러개의 sub를 만든다라는 관점보다는 여러개의 기준 값이 들어갈 수 있다고 봐주시는게 좀 더이해하기에 편할꺼 같습니다.

  • 이외에도 role , scope 같은 관점들도 들어갑니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 종혁님.

JWT 토큰을 발급할 때 withSubject()를 통해 다양한 값을 부여하는 이유는 응용 프로그램의 보안 및 기능을 확장시키기 위해서입니다. 간단히 설명드리자면, 각각의 주체(subject)는 다른 사용 시나리오에 맞춰 토큰의 유효성과 접근 제어를 더욱 세분화할 수 있는 역할을 합니다.

여러 Subject를 만드는 이유와 상황 예시:

  1. 다양한 인증 시나리오:

    • 예를 들어, 이메일 인증이 필요한 경우 이메일을 subject로 사용해 인증 링크를 발송할 수 있습니다.
    • 로그인 시에는 사용자 ID를 subject로 하여 세션을 관리하게 하여 사용자 고유의 계정을 구분하도록 합니다.
  2. 세분화된 접근 제어:

    • 특정 API 작업에 대해 서로 다른 토큰이 필요할 경우가 있습니다. 이럴 때, 사용자 권한과 관련된 정보를 subject로 사용할 수 있습니다. 예를 들어, 관리자 계정과 일반 사용자 계정을 구분하기 위해 subject에 role을 포함할 수 있습니다.
  3. 로그 추적 및 분석:

    • 이메일이나 사용자 이름을 subject로 사용할 경우, 액세스 로그를 통해 개별 사용자의 활동을 추적하며, 어떤 주체가 주로 시스템에 접근하는지 분석할 수 있습니다.

기본적으로, 하나의 시스템 안에서 여러 주체(subject)를 식별할 수 있도록 활용함으로써 토큰 관련 보안이 강화되고, 관리가 용이해집니다.

추가 관련 자료:

아래의 링크에서는 JWT의 다양한 활용 방법 및 더 깊이 있는 기술적 내용을 다루고 있습니다. 참조하시면 주제에 대한 이해를 더욱 넓힐 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

강의가 검은 화면으로 나옵니다.

0

70

1

질문] 에러처리 관련 문의

0

92

2

강의_34] 공통 모듈 관련 질문입니다.

0

99

2

강의 19] 질문입니다.

0

83

2

OkHttpClientConfig timeout 설정 질문

0

92

2

Kotlin data class 엔티티에서 copy로 수정 후 save하는 이유가 있을까요?

0

115

2

JDK 선택할 때 궁금점!!

0

135

3

혹시 어플리케이션을 실행할 수 있게 readme 같은건 따로 없나요?

0

102

1

access_token Db 저장건

0

96

2

data class 관련 질문입니다

0

99

2

TransactionMessage 질문

0

66

2

CompletableFuture 질문

0

95

3

스프링 빈 질문

1

102

2

redisConfig 질문입니다

0

120

1

SpringBoot + Kotlin에서 Redis 캐싱 사용 관련되서 여쭤봐도 될까요?

0

263

2

entity 객체 생성을 data class 로 하신 이유가 있을까요?

0

372

3

return@logFor을 사용한 이유가 궁금합니다.

0

156

1

@Transactional.kt에 대한 효용성 질문

0

136

1

@Transactional.kt에 대한 효용성 질문

0

215

1

class 가 아닌 파일로 생성하시는이유

0

205

2

카프카 컨슈머 구현 질문

0

171

2

DDL문 정리되어 있는 파일 있을까요?

0

235

2

와 이리 게시판이 조용하노

0

214

1

기기 관련 질문입니다!

0

234

2