2. Authentication - NeoSmartpen/neolab-data-platform GitHub Wiki

κ°œμš”

NDP의 μ„œλΉ„μŠ€μ™€ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•˜κ³  μ‚¬μš©ν•˜λ €λ©΄ 인증 절차λ₯Ό 거쳐야 ν•©λ‹ˆλ‹€. NDP의 인증은 토큰 기반의 인증 방식(JWT)을 기반으둜 ν•©λ‹ˆλ‹€.
인증을 μœ„ν•œ κΈ°λ³Έ μ ˆμ°¨λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

1. NDP Developer Centerμ—μ„œ μΈμ¦μ„œλ₯Ό λ°œκΈ‰ λ°›μŠ΅λ‹ˆλ‹€.
2. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λ°œκΈ‰ 받은 μΈμ¦μ„œμ™€ ν•„μš”μ‹œ μ‚¬μš©μž(νšŒμ›) 둜그인으둜 NDP 인증 μ„œλ²„μ—μ„œ 인증 μ½”λ“œ(Authorization code)λ₯Ό λ°œκΈ‰ λ°›μŠ΅λ‹ˆλ‹€.
3. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 인증 μ½”λ“œλ‘œ NDP 인증 μ„œλ²„μ—μ„œ μ ‘κ·Ό 토큰(Access Token)을 λ°œκΈ‰ λ°›μŠ΅λ‹ˆλ‹€.
4. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λ°œκΈ‰ 받은 μ ‘κ·Ό ν† ν°μœΌλ‘œ NDP의 λ¦¬μ†ŒμŠ€μ™€ μ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•©λ‹ˆλ‹€.

μ‚¬μš©μž(νšŒμ›) λ‹¨μœ„ μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•œ 인증으둜 NDPλŠ” 1) NDP 자체 λ‘œκ·ΈμΈμ„ ν†΅ν•œ 인증과 2) μ™ΈλΆ€ μ„œλΉ„μŠ€(ꡬ글, μ• ν”Œ λ“±)의 둜그인 APIλ₯Ό ν†΅ν•œ 인증 두 가지λ₯Ό λͺ¨λ‘ μ§€μ›ν•©λ‹ˆλ‹€.
μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” NDPμ—μ„œ μ œκ³΅ν•˜λŠ” μ„œλΉ„μŠ€λ‘œ 보닀 νŽΈλ¦¬ν•˜κ²Œ 둜그인 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κ³ , μ‚¬μš©μžλ₯Ό μΈμ¦ν•˜μ—¬, νšŒμ› 정보λ₯Ό μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

전체 ꡬ쑰도

NDPλŠ” μ„œλΉ„μŠ€ λΆ„λ₯˜μ— 따라 인증 μ ˆμ°¨κ°€ λ‹€λ¦…λ‹ˆλ‹€. λ‹€μŒμ€ 인증 ꡬ쑰λ₯Ό κ°„λž΅ν•˜κ²Œ ν‘œν˜„ν•œ κ·Έλ¦Όμž…λ‹ˆλ‹€.

μ‚¬μš©μž(νšŒμ›) λ‹¨μœ„ μ„œλΉ„μŠ€

  1. 자체 둜그인 인증
  2. μ†Œμ…œ 둜그인 인증

λ¦¬μ†ŒμŠ€μ˜€λ„ˆ λ‹¨μœ„ μ„œλΉ„μŠ€

μš©μ–΄ Β· μš”μ†Œ μ„€λͺ…
  • μΈμ¦μ„œ (Credentials)
    μΈμ¦μ„œλŠ” NDP의 μ„œλΉ„μŠ€ 및 λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•˜κΈ° μœ„ν•œ 자격 증λͺ…μ„œμž…λ‹ˆλ‹€. NDPλŠ” μΈμ¦μ„œλ₯Ό 톡해 인증된 μ‚¬μš©μžμž„μ„ ν™•μΈν•©λ‹ˆλ‹€. λ¦¬μ†ŒμŠ€μ˜€λ„ˆλŠ” NDP Developer Centerμ—μ„œ μΈμ¦μ„œλ₯Ό λ°œκΈ‰ 받을 수 μžˆμŠ΅λ‹ˆλ‹€. λ¦¬μ†ŒμŠ€μ˜€λ„ˆλŠ” ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 내에 μ—¬λŸ¬ 개의 μΈμ¦μ„œλ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. 그리고 각 μΈμ¦μ„œλ§ˆλ‹€ API μ‚¬μš© λ²”μœ„(Scope)와 λ¦¬μ†ŒμŠ€ μ ‘κ·Ό κΆŒν•œ(Authority)을 λ‹€λ₯΄κ²Œ λΆ€μ—¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    μΈμ¦μ„œλŠ” μ„œλΉ„μŠ€ 인증 λ‹¨μœ„μ— 따라 크게 두 κ°€μ§€λ‘œ λ‚˜λ‰©λ‹ˆλ‹€.

    • μ‚¬μš©μž μΈμ¦μ„œ
      μ‚¬μš©μž(νšŒμ›) λ‹¨μœ„ μ„œλΉ„μŠ€ μΈμ¦μ—μ„œ μ‚¬μš©ν•©λ‹ˆλ‹€. ν•΄λ‹Ή μ„œλΉ„μŠ€λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ†ν•œ μ„œλΉ„μŠ€λ‘œ, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‚¬μš©μžμ˜ 둜그인이 ν•„μš”ν•©λ‹ˆλ‹€. λ”°λΌμ„œ, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‚¬μš©μžλ₯Ό λ‹¨μœ„λ‘œ ν•˜λŠ” μ‚¬μš©μž μΈμ¦μ„œλ₯Ό λ°œκΈ‰ λ°›μ•„μ•Ό ν•©λ‹ˆλ‹€.

      μ‚¬μš©μž μΈμ¦μ„œλŠ” 두 κ°€μ§€λ‘œ λ‚˜λ‰©λ‹ˆλ‹€.

      • 자체 μΈμ¦μ„œ (OAuth2.0 Credentials) : NDP 자체 둜그인으둜 μ ‘κ·Ό 토큰을 받을 수 μžˆλŠ” μΈμ¦μ„œμž…λ‹ˆλ‹€. NDP의 인증 μ„œλΉ„μŠ€λŠ” OAuth 2.0을 기반으둜 ν•©λ‹ˆλ‹€.
      • μ™ΈλΆ€ μΈμ¦μ„œ (External Credentials) : μ™ΈλΆ€(ꡬ글, μ• ν”Œ λ“±)의 둜그인 μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ 얻은 μΈμ¦μ„œ(Credentials)둜 NDP의 μ ‘κ·Ό 토큰을 받을 수 μžˆλŠ” μΈμ¦μ„œμž…λ‹ˆλ‹€. NDP Developer Centerμ—μ„œ μΈμ¦μ„œλ₯Ό 생성할 λ•Œ, μ™ΈλΆ€ μ„œλΉ„μŠ€μ—μ„œ λ°œκΈ‰ 받은 μΈμ¦μ„œμ˜ 정보λ₯Ό ν•¨κ»˜ μž…λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    • μ„œλΉ„μŠ€ μΈμ¦μ„œ
      μ„œλΉ„μŠ€ λ‹¨μœ„μ˜ μΈμ¦μ—μ„œ μ‚¬μš©ν•©λ‹ˆλ‹€. ν•΄λ‹Ή μ„œλΉ„μŠ€λŠ” λ¦¬μ†ŒμŠ€μ˜€λ„ˆκ°€ 직접 μΈμ¦ν•˜κ³  μ‚¬μš©ν•˜λŠ” μ„œλΉ„μŠ€λ‘œ, μ‚¬μš©μž(νšŒμ›)의 둜그인 없이 μ„œλΉ„μŠ€μ— μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λ¦¬μ†ŒμŠ€μ˜€λ„ˆλ₯Ό λ‹¨μœ„λ‘œ ν•˜λŠ” μ„œλΉ„μŠ€ μΈμ¦μ„œ(Service Credentials)λ₯Ό λ°œκΈ‰ λ°›μŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ μΈμ¦μ„œλŠ” 둜그인 인증이 없이 μ„œλΉ„μŠ€μ— μ ‘κ·Όν•  수 있기 λ•Œλ¬Έμ—, μœ μΆœλ˜μ§€ μ•Šλ„λ‘ λ”μš± 신경써야 ν•©λ‹ˆλ‹€.

  • API λ²”μœ„? λ²”μœ„? (Scope)와 κΆŒν•œ (Authority)
    λ²”μœ„λŠ” μΈμ¦μ„œκ°€ ν˜ΈμΆœν•  수 μžˆλŠ” API의 λ²”μœ„μž…λ‹ˆλ‹€. κΆŒν•œμ€ μΈμ¦μ„œκ°€ μ ‘κ·Όν•  수 μžˆλŠ” λ¦¬μ†ŒμŠ€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄, μ‚¬μš©μž 데이터λ₯Ό μ‘°νšŒν•˜λŠ” userdata.read, μ„œμ‹μ„ κ΄€λ¦¬ν•˜λŠ” paper.ownerκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ¦¬μ†ŒμŠ€μ˜€λ„ˆλŠ” μΈμ¦μ„œλ₯Ό 생성할 λ•Œ λ²”μœ„μ™€ κΆŒν•œμ„ μ„ νƒν•˜μ—¬ 생성해야 ν•©λ‹ˆλ‹€. λ²”μœ„μ™€ κΆŒν•œ 쀑 μΌλΆ€λŠ” λ„€μ˜€λž©μ˜ 승인이 ν•„μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ¦¬μ†ŒμŠ€μ˜€λ„ˆκ°€ μ„ νƒν•˜μ§€ μ•Šμ•˜κ±°λ‚˜ λ„€μ˜€λž©μ—μ„œ μŠΉμΈν•˜μ§€ μ•Šμ€ λ²”μœ„μ˜ APIλŠ” ν˜ΈμΆœν•  수 μ—†μŠ΅λ‹ˆλ‹€.

  • OAuth 2.0
    OAuth 2.0은 인증과 κΆŒν•œ λΆ€μ—¬λ₯Ό μœ„ν•΄ μ‚¬μš©ν•˜λŠ” ν‘œμ€€ ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€. OAuth 2.0은 제 3의 앱이 μžμ›μ˜ μ†Œμœ μžμΈ μ„œλΉ„μŠ€ μ‚¬μš©μž(νšŒμ›)λ₯Ό λŒ€μ‹ ν•˜μ—¬ μ„œλΉ„μŠ€λ₯Ό μš”μ²­ν•  수 μžˆλ„λ‘ μžμ› μ ‘κ·Ό κΆŒν•œμ„ μœ„μž„ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. (좜처 : κΈˆμœ΅λ³΄μ•ˆμ› "OAuth 2.0 κ°œμš” 및 λ³΄μ•ˆ 고렀사항" λ³΄μ•ˆμ—°κ΅¬λΆ€-2015-030)

  • 인증 μ½”λ“œ(Authorization Code)
    인증 μ½”λ“œλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ NDP의 μ ‘κ·Ό 토큰을 μ–»λŠ” 데 μ‚¬μš©ν•˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ NDPμ—κ²Œ 인증을 μš”μ²­ν•˜λ©΄, NDPλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©μž λ‘œκ·ΈμΈμ„ μš”μ²­ν•©λ‹ˆλ‹€. μ‚¬μš©μžμ˜ 아이디, νŒ¨μŠ€μ›Œλ“œ 검증과 μ‚¬μš©μžμ˜ κΆŒν•œ λ™μ˜κ°€ μ„±κ³΅μ μœΌλ‘œ λλ‚˜λ©΄, μΈμ¦μ„œλ₯Ό λ°œκΈ‰ 받을 λ•Œ λ“±λ‘ν•œ redirect_uri둜 인증 μ½”λ“œλ₯Ό μ „μ†‘ν•©λ‹ˆλ‹€.

  • μ ‘κ·Ό 토큰(Access Token)κ³Ό λ¦¬ν”„λ ˆμ‹œ 토큰(Refresh Token)
    μ ‘κ·Ό 토큰은 인증에 μ„±κ³΅ν•˜λ©΄ NDPμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—κ²Œ λ³΄λ‚΄λŠ” ν‚€μž…λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ NDP의 APIλ₯Ό ν˜ΈμΆœν•  λ•Œ, μš”μ²­ 헀더에 μ ‘κ·Ό 토큰을 ν•¨κ»˜ 보내야 ν•©λ‹ˆλ‹€. NDPλŠ” μ ‘κ·Ό 토큰을 κ²€μ¦ν•˜μ—¬ NDP μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•  κΆŒν•œμ„ λΆ€μ—¬ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ ‘κ·Ό 토큰은 수λͺ…이 μžˆμŠ΅λ‹ˆλ‹€. λ¦¬ν”„λ ˆμ‹œ 토큰은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 일정 κΈ°κ°„ λ™μ•ˆ 인증을 κ±°μΉ˜μ§€ μ•Šμ•„λ„ μ ‘κ·Ό 토큰을 κ°±μ‹ ν•  수 μžˆλŠ” 역할을 ν•©λ‹ˆλ‹€. λ¦¬ν”„λ ˆμ‹œ 토큰을 톡해 μ‚¬μš©μžλŠ” 맀번 λ‘œκ·ΈμΈν•˜μ§€ μ•Šμ•„λ„ μ ‘κ·Ό 토큰을 λ°œκΈ‰ 받을 수 μžˆμŠ΅λ‹ˆλ‹€. 단, 인증 μ ˆμ°¨μ— μ‚¬μš©μžμ˜ 둜그인이 ν•„μš”ν•˜μ§€ μ•Šμ€ λ¦¬μ†ŒμŠ€μ˜€λ„ˆ λ‹¨μœ„ μ„œλΉ„μŠ€μ—μ„œλŠ” λ¦¬ν”„λ ˆμ‹œ 토큰이 λ°œκΈ‰λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.