μΈμ¦μ μ΄λ€ μ¬μ€ λλ μ΄λ€ λ¬Έμκ° μ§μ§μΈμ§ μ¦λͺ νλ κ³Όμ μ κ°λ¦¬ν€λ μ©μ΄μ λλ€.
μΌλ°μ μΌλ‘ μ»΄ν¨ν° κ³Όν λΆμΌμμλ μ¬μ©μμ μ μμ μ¦λͺ νλ κ²κ³Ό κ΄λ ¨μ΄ μμ΅λλ€.
μ¬μ©μλ μ¬μ©μμ μμ€ν κ°μ 곡μ λλ ν©μλ μ 보λ₯Ό μ 곡νμ¬ μμ μ μ μμ μ¦λͺ ν©λλ€.
μ¬λ¬ μΉ μλΉμ€λ€μ νμμ΄μ΄μΌ λ§μ΄ μ΄μ©ν μ μλ κ²½μ°κ° λ§λ€.
νμμ΄ μλ κ²½μ°μλ ν΄λΉ μλΉμ€λ₯Ό μ΄μ©νκΈ° μν΄μλ νμ κ°μ
μ ν΅ν΄ μμ΄λμ ν¨μ€μλλ₯Ό λ§λ€κ³ , νμ κ°μ
νλ €λ μ¬μ©μκ° λ³ΈμΈμ΄ λ§λμ§ νμΈνλ μ μ°¨λ₯Ό κ°μ§κ² λλ€.
νμμΌ κ²½μ°μλ λ‘κ·ΈμΈμ ν¨μΌλ‘ νμμ΄ λ§μμ μΈμ¦ν΄μΌ νλ€. μμ΄λμ ν¨μ€μλλ₯Ό μ λ ₯νμ¬ μμ΄λμ ν΄λΉνλ ν¨μ€μλκ° μΌμΉν κ²½μ°μλ§ μΈμ¦ μ μ°¨μ μ±κ³΅νμ¬ μλΉμ€λ₯Ό μ΄μ©ν μ μκ² λλ€.
μΈμ¦κ³Ό λ¬λ¦¬ κΆν λΆμ¬λ μν°ν°(μ¬μ©μ λλ μ₯μΉ)κ° μ‘μΈμ€ ν μ μλ 리μμ€ λλ μνν μ μλ μμ ,
μ¦ μ‘μΈμ€ κΆνμ νμΈνλ νλ‘μΈμ€λ₯Ό μλ―Έν©λλ€.
μνμ νλ§€ λλ ꡬ맀λ₯Ό ν μ μλ μΈν°λ· μΌνλͺ°μ΄ μλ€κ³ κ°μ νλ€.
κ³ κ°μ ν΄λΉ μΌνλͺ°μμ μνμ ꡬ맀ν μ μλ κΆνμ λΆμ¬λ°μ κ²μ΄λ©°, νλ§€μλ μνμ λ±λ‘νκ³ νλ§€ν μ μλ κΆνμ λΆμ¬λ°μ κ²μ΄λ€.
ν΄λΉ μΌνλͺ°μμλ μ¬λ¬ κ°μ§ ννλ‘ μΈκ°λ₯Ό ν μ μλ€.
ꡬκΈ, νμ΄μ€λΆ, νΈμν°μ κ°μ λ€μν νλ«νΌμ νΉμ ν μ¬μ©μ λ°μ΄ν°μ μ κ·ΌνκΈ° μν΄ μ 3μ ν΄λΌμ΄μΈνΈ(μ°λ¦¬μ μλΉμ€)κ° μ¬μ©μμ μ κ·Ό κΆνμ μμ(Delegated Authorization) λ°μ μ μλ νμ€ νλ‘ν μ½μ΄λ€.
μ½κ² λ§νμλ©΄, μ°λ¦¬μ μλΉμ€κ° μ°λ¦¬ μλΉμ€λ₯Ό μ΄μ©νλ μ μ μ νμ¬ νλ«νΌ μ 보μ μ κ·ΌνκΈ° μν΄μ κΆνμ νμ¬ νλ«νΌμΌλ‘λΆν° μμ λ°λ κ² μ΄λ€.
리μμ€ μμ μ. μ°λ¦¬μ μλΉμ€λ₯Ό μ΄μ©νλ©΄μ, ꡬκΈ, νμ΄μ€λΆ λ±μ νλ«νΌμμ 리μμ€λ₯Ό μμ νκ³ μλ μ¬μ©μμ΄λ€. 리μμ€λΌ νλ©΄ 'κ΅¬κΈ μΊλ¦°λ μ 보', 'νμ΄μ€λΆ μΉκ΅¬ λͺ©λ‘', 'λ€μ΄λ² λΈλ‘κ·Έ ν¬μ€νΈ μμ±' λ±μ΄ ν΄λΉλ κ²μ΄λ€.
Authorization Serverλ Resource Ownerλ₯Ό μΈμ¦νκ³ , Clientμκ² μ‘μΈμ€ ν ν°μ λ°κΈν΄μ£Όλ μλ²μ΄λ€. Resource Serverλ ꡬκΈ, νμ΄μ€λΆ, νΈμν°μ κ°μ΄ 리μμ€λ₯Ό κ°μ§κ³ μλ μλ²λ₯Ό λ§νλ€.
Authorization Serverμ Resource Serverλ 곡μλ¬Έμμ λ³κ°λ‘ ꡬλΆλμ΄ μμ§λ§, λ³κ°μ μλ²λ‘ ꡬμ±ν μ§, νλμ μλ²λ‘ ꡬμ±ν μ§λ κ°λ°μκ° μ ννκΈ° λλ¦μ΄λΌκ³ νλ€.
Resource Serverμ μμμ μ΄μ©νκ³ μ νλ μλΉμ€. λ³΄ν΅ μ°λ¦¬κ° κ°λ°νλ €λ μλΉμ€κ° λ κ²μ΄λ€.
Clientλ μ°λ¦¬κ° ꡬννλ μλΉμ€μ΄λ―λ‘ Resource Ownerμ ν·κ°λ¦¬μ§ λ§μ. Resource Serverμ Authorization Serverμ μ
μ₯μμλ μ°λ¦¬ μλΉμ€κ° ν΄λΌμ΄μΈνΈμ΄κΈ° λλ¬Έμ μ΄λ° μ΄λ¦μ κ°κ² λ κ²μ΄λ€.

JWT(Json Web Token)μ μΉ νμ€μ λ°λ₯Έ λ°μ΄ν° μ μ‘μ μν κ°κ²°ν λ°©λ²μΌλ‘, μ£Όλ‘ μ¬μ©μ μΈμ¦κ³Ό μ 보 κ΅νμ μ¬μ©λ©λλ€. JWTλ ν€λ, νμ΄λ‘λ, μλͺ μΈ λΆλΆμΌλ‘ ꡬμ±λμ΄ μμΌλ©° κ° λΆλΆμ λ§μΉ¨νλ‘ κ΅¬λΆλ©λλ€.
{
"alg": "HS256",
"typ": "JWT"
}
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
your-256-bit-secret
)

1. Browser(μ¬μ©μ)κ° λ‘κ·ΈμΈμ νλ€.
2. μλ²λ μ¬μ©μκ° λ‘κ·ΈμΈμ μ±κ³΅νλ©΄ User ID λ±μ Secret Keyλ‘ μμ±νλ€.
3. μλ²λ λ§λ€μ΄μ§ JWTλ₯Ό μ¬μ©μμκ² λ°ννλ€.
4. μ¬μ©μλ μΈκ°λ₯Ό νμλ‘ νλ μμ² Authorization Headerμ Tokenμ λ£μ΄ μμ²νλ€.
5. μλ²λ Tokenμ κΈ°λ°μΌλ‘ μ¬μ©μμ μ 보λ₯Ό κ°μ Έμ¨λ€.
6. μλ²λ TokenμΌλ‘ κ°μ Έμ¨ μ¬μ©μμ μ 보λ₯Ό κΈ°λ°νμ¬ μλ΅μ ν΄μ€λ€.
μλͺ κ³Όμ μ λ€μκ³Ό κ°μ΄ ννλ©λλ€.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
your-256-bit-secret
)
{
"alg": "HS256",
"typ": "JWT"
}
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
HMACSHA256(
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9",
"your-256-bit-secret"
)
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5ceyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5cμ΄ JWTλ₯Ό μλ²λ‘λΆν° λ°λ ν΄λΌμ΄μΈνΈλ μμ²μ λ³΄λΌ λ μ΄ JWTλ₯Ό μ¬μ©νκ³ , μλ²λ λΉλ° ν€λ₯Ό μ¬μ©ν΄ μλͺ μ κ²μ¦νμ¬ ν ν°μ΄ λ³μ‘°λμ§ μμλμ§ νμΈν μ μμ΅λλ€.
Access Tokenμ λ°κΈλ μ΄ν, μλ²μ μ μ₯λμ§ μκ³ ν ν° μμ²΄λ‘ κ²μ¦μ νλ©° μ¬μ©μ κΆνμ μΈμ¦νκΈ° λλ¬Έμ, Access Tokenμ΄ νμ·¨λλ©΄ ν ν°μ΄ λ§λ£λκΈ° μ κΉμ§, ν ν°μ νλν μ¬λμ λꡬλ κΆν μ κ·Όμ΄ κ°λ₯ν΄μ§λ€. JWTλ λ°κΈν ν μμ κ° λΆκ°λ₯νκΈ° λλ¬Έμ, μ κ·Όμ κ΄μ¬νλ ν ν°μ μ ν¨μκ°μ λΆμ¬νλ μμΌλ‘ νμ·¨ λ¬Έμ μ λν΄ λμμ νμ¬μΌ νλ€.
Refresh Token Rotation(RTR)
Refresh Tokenμ One time Use Onlyλ‘ μ€μ νλ€. (νλ² μ°λ©΄ λ€μ refresh tokenμ λ°κΈ)
νλ² μ΄μμ Refresh Token μ μ¬μ©μ΄ κ°μ§λλ©΄, νμ·¨λ κ²μΌλ‘ κ°μ£Όνκ³ νμ·¨λ κ²μΌλ‘ κ°μ£Ό λ Refresh TokenμΌλ‘ μΈν΄ λ°κΈλ λͺ¨λ Refresh Token λ€μ νκΈ°νλ€.

νμ§λ§ ν΄μ»€κ° μ§μμ μΌλ‘ Access Token λ§ νμ·¨νλ€λ©΄, 무μ©μ§λ¬Όμ΄ λλ€.

JWTλ ν ν°μ μ’ λ₯μ΄κ³ , OAuthλ ν ν°μ λ°κΈνκ³ μΈμ¦νλ μ€ν μ€ν λ€λ νλ‘ν μ½μ΄λ€.
JWTλ ν€λ(Header), νμ΄λ‘λ(Payload), μλͺ (Signature) μΈ λΆλΆμΌλ‘ ꡬμ±λ©λλ€. ν€λμλ ν ν° μ νκ³Ό μνΈν μκ³ λ¦¬μ¦ μ λ³΄κ° ν¬ν¨λμ΄ μμΌλ©°, νμ΄λ‘λμλ ν΄λ μ(Claim) μ λ³΄κ° ν¬ν¨λ©λλ€. ν΄λ μμ μ¬μ©μ, κΆν, μ ν¨ κΈ°κ° λ±μ μ 보λ₯Ό λ΄μ μ μμ΅λλ€. ν ν°μ μλͺ μ ν€λ, νμ΄λ‘λ, λΉλ° ν€λ₯Ό μ¬μ©νμ¬ μμ±λλ©°, μλ²λ μ΄ μλͺ μ ν΅ν΄ ν ν°μ μ ν¨μ±μ κ²μ¦ν©λλ€.
λ°λ©΄, OAuth(Open Authorization)λ μ¬μ©μμ μΈμ¦κ³Ό κΆν λΆμ¬λ₯Ό μν νλ‘ν μ½μ λλ€. μ£Όλ‘ μ¬μ©μκ° λ€λ₯Έ μΉ μ¬μ΄νΈλ μ ν리μΌμ΄μ μ λ‘κ·ΈμΈν λ μ¬μ©λ©λλ€. OAuthλ ν΄λΌμ΄μΈνΈ μ ν리μΌμ΄μ μ΄ μμμ μ κ·ΌνκΈ° μν΄ μ¬μ©μμ λμλ₯Ό μ»κ³ , μ νλ μ‘μΈμ€ ν ν°μ λ°κΈλ°μ μ¬μ©ν©λλ€. λ³΄ν΅ Bearer tokenμ λ°κΈν©λλ€.
μμ½νμλ©΄, JWTλ ν΄λΌμ΄μΈνΈμ μλ² κ°μ μΈμ¦μ μ²λ¦¬νκΈ° μν ν ν°μ΄κ³ , ν ν° μ체μ μ 보λ₯Ό ν¬ν¨ν©λλ€. λ°λ©΄, OAuthλ μ¬μ©μμ μΈμ¦κ³Ό κΆν λΆμ¬λ₯Ό μν νλ‘ν μ½λ‘, ν΄λΌμ΄μΈνΈκ° μ¬μ©μμ λμλ₯Ό μ»μ΄ μ νλ μ‘μΈμ€ ν ν°μ λ°κΈλ°μ μμμ μ κ·Όν©λλ€.
https://velog.io/@qjqdn1568/%EC%9D%B8%EC%A6%9D%EA%B3%BC-%EC%9D%B8%EA%B0%80%EC%9D%98-%EC%B0%A8%EC%9D%B4-%EC%9E%90%EC%84%B8%ED%9E%88-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90
https://ittrue.tistory.com/246
https://hudi.blog/oauth-2.0/
https://cl8d.tistory.com/83
https://seungyong20.tistory.com/entry/JWT-Access-Token%EA%B3%BC-Refresh-Token-%EA%B7%B8%EB%A6%AC%EA%B3%A0-RTR-%EA%B8%B0%EB%B2%95%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90
https://velog.io/@chanyoung1998/JWT-%EC%99%80-OAuth-%EC%9D%98-%EC%B0%A8%EC%9D%B4