일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 비전공자
- jQuery
- 슬라이드전환
- 타입스크립트
- JavaScript
- 생활코딩
- 자바스크립트
- react
- 코딩독학
- 실기
- 렛츠기릿자바스크립트
- CSS
- web
- Supabase
- 웹디자인기능사실기
- 프론트엔드
- JS
- 웹디실기
- 연산자
- github
- 깃
- 코드공유
- git
- 웹퍼블리셔
- 정보처리기사
- HTML
- 웹디자인기능사
- 세로메뉴바
- PROJECT
- 리액트
Archives
- Today
- Total
코딩하는라민
[Supabase] JWTs(JSON Web Tokens) 공식문서 읽기 본문
728x90
반응형
[Supabase] JWTs(JSON Web Tokens) 공식문서 읽기
`JSON Web Tokens` 은 string 으로 표현되는 데이터 구조의 한 종류이다.
보통 사용자에 대한 아이덴티티, 권한 정보를 포함한다.
JWT 는 라이프타임에 대한 정보를 인코딩하고, 암호화된 키로 서명하여 변조에 강하게 만든다.
Supabase 의 액세스 토큰은 JWTs 이다. `JWT`는 서비스로 모든 요청과 함께 전송되는데, 토큰을 확인하고 포함된 요청을 검사함으로써 리소스에 대한 액세스를 허용하거나 거부할 수 있다.
RLS(Row Level Security) 정책은 JWTs 의 정보를 기반한다.
JWT 인코딩 및 서명
JWT 는 아래와 같이 인코딩된다.
{
"sub": "0002",
"name": "Věra Hrabánková",
"iat": 1516239022,
"exp": 1518239022,
"theme": {
"primary" : "#D80C14",
"secondary" : "#FFFFFF"
}
}
- `sub` : 제목
- 'name` : 설명
- `iat` : 생성일자(Unix timestamp)
- `exp` : 만료일자
- theme 과 같이 저장하고자 하는 정보들을 담을 수 있다.
사용자에게 JWT 을 전송할 때 HS256 과 같은 알고리즘을 사용하여 데이터를 인코딩한다.
// from https://replit.com/@awalias/jsonwebtokens#index.js
let token = jwt.sign({ name: 'Sam Vimes' }, 'some-secret')
그 결과 세 가지 문자열로 구성된다.
eyJhbGciOiJIUzI1NiJ9
.eyJzdWIiOiIwMDAxIiwibmFtZSI6IlNhbSBWaW1lcyIsImlhdCI6MTUxNjIzOTAyMiwiZXhwIjoxNTE4MjM5MDIyfQ
.zMcHjKlkGhuVsiPIkyAkB2rjXzyzJsMMgpvEGvGtjvA
- 첫번째 segment(`header`) : 어떤 알고리즘이 인코딩을 수행했는지 알려준다.
- 두번째 segment(`payload`)
- 세번째 segment(`signature`) : 사용자가 보낸 토큰이 합법적인지 확인하기 위해 서비스 또는 웹 사이트에서 제공
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload)
<jwt_secret>
)
Supabase 에서의 JWTs
Supabase 에서의 JWTs 는 세 가지 목적이 있다.
- `anon key` : Supabase API 게이트웨이 우회(데이터베이스와 상호작용)
- `service role key` : 관리자 권한을 가지고 RLS 우회(비공개 키)
- `user specific jwts` : 로그인한 사용자에게 발행하는 토큰(콘텐츠 or 권한 액세스)
`anon key` 토큰은 데이터베이스와 상호작용할 때 API 요청과 함께 보내는 토큰이다.
curl 'https://xscduanzzfseqszwzhcy.supabase.co/rest/v1/colors?select=name' \
-H "apikey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYxNDIwNTE3NCwiZXhwIjoxOTI5NzgxMTc0fQ.-NBR1WnZyQGpRLdXJfgfpszoZ0EeE6KHatJsDPLIX8c"
// decode
{
"role": "anon",
"iss": "supabase",
"iat": 1614205174,
"exp": 1929781174
}
`service role key` 토큰은 사용자와 공유하면 안 되는 key 로 이 토큰으로 데이터 일괄 삽입과 같은 작업을 수행할 수 있다.
`user access token` 은 사용자가 로그인할 때 발행되는 JWT 이다. 이 토큰은 Authorizatsion Bearer 헤더로 전달되어야 한다. 사용자에 대한 정보를 포함하기 때문에 길이가 길다.
{
"aud": "authenticated",
"exp": 1615824388,
"sub": "0334744a-f2a2-4aba-8c8a-6e748f62a172",
"email": "d.l.solove@gmail.com",
"app_metadata": {
"provider": "email"
},
"user_metadata": null,
"role": "authenticated"
}
728x90
반응형
'Serverless > Supabase' 카테고리의 다른 글
[Supabase] 사용자의 계정 소유 확인 및 로그인 성공 여부 파악은 어떻게 이루어지는가? (1) | 2024.09.18 |
---|---|
[React, Supabase] 사용자별 데이터 접근 및 제어하기 (RLS Policy) (32) | 2024.07.11 |
[React, Supabase] 이메일 회원가입 및 로그인 기능 구현 & 트리거 설정 (38) | 2024.06.26 |
[Supabase] Supabase 로 백엔드 없이 Database 구축하기(기본 사용법) (31) | 2024.02.07 |