2021-02-01(Mon)

ν•­λͺ©

λ‚΄μš©

ν•™μŠ΅ λ‚ μ§œ

2021-02-01(μ›”)

ν•™μŠ΅ μ‹œκ°„

11:00~24:00

ν•™μŠ΅ λ²”μœ„ 및 주제

OAuth, devise, cookie

ν•™μŠ΅ λͺ©ν‘œ

둜그인 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜μ—¬ 이후 λͺ¨λ“ˆκΈ°λŠ₯μ—μ„œ ν™œμš©ν•  수 μžˆλ„λ‘ ν•œλ‹€.

λ™λ£Œ ν•™μŠ΅ 방법

eunhkim, yohlee, sanam, jujeongλ‹˜κ³Ό ν•¨κ»˜ λΌμ΄λΈŒμ‰μ–΄λ‘œ νŽ˜μ–΄μ½”λ”©ν•¨

상세 ν•™μŠ΅ λ‚΄μš©

μš°μ„  주말간 λŒ€λΆ€λΆ„μ˜ 곡톡λͺ¨λ“ˆμ„ λ§Œλ“€μ—ˆλ‹€κ³  μƒκ°ν–ˆμœΌλ‚˜ 둜그인 κΈ°λŠ₯κΉŒμ§€ 더해져야 λΉ„λ‘œμ†Œ κΈ°λŠ₯ λͺ¨λ“ˆμ„ λ‚˜λˆ„μ–΄ κ°œλ°œν•  수 μžˆμ„ κ²ƒμ΄λΌλŠ” νŒλ‹¨μ΄ λ“€μ—ˆλ‹€. 각 λͺ¨λ“ˆμ—μ„œ ν˜„μž¬ νŽ˜μ΄μ§€μ— μ ‘μ†ν•œ 'current_user'κ°€ λˆ„κ΅¬μΈμ§€ 확인할 수 μžˆμ–΄μ•Ό 그에 λ§žλŠ” λ·°λ₯Ό 보여쀄 수 있기 λ•Œλ¬Έμ΄λ‹€.

이에 νŒ€μ›λ“€κ³Ό νŽ˜μ–΄μ½”λ”©μ„ 톡해 둜그인 κΈ°λŠ₯-μ†Œμ…œ 둜그인, 2차인증을 κ΅¬ν˜„ν–ˆλ‹€.

둜그인

이 κ³Όμ •μ—μ„œ '둜그인' μƒνƒœ κ΄€λ¦¬μ˜ 3κ°€μ§€ 방법을 ν•™μŠ΅ν•˜μ˜€λ‹€.

  1. μΏ ν‚€

  2. μ„Έμ…˜

  3. 토큰

devise gem을 μ“°λ©΄ μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆμœΌλ‚˜, μ„œλΈŒμ νŠΈ μš”κ΅¬μ‚¬ν•­λŒ€λ‘œ SPA슀럽게 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€μ–΄μ•Όν•œλ‹€λŠ” νŒλ‹¨ν•˜μ— 직접 둜그인/λ‘œκ·Έμ•„μ›ƒ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ°λ‘œ ν•˜μ˜€λ‹€. devise gem을 μ“°λ©΄ μžμ—°μŠ€λŸ½κ²Œ 둜그인/λ‘œκ·Έμ•„μ›ƒ μ‹œμ— 'μƒˆλ‘œκ³ μΉ¨'을 ν•˜κ²Œ λ˜λŠ”λ°, μ΄λŠ” SPA μŠ€λŸ½μ§€ μ•Šλ‹€λŠ” 것.

결과적으둜 각 λ°©λ²•μ˜ μž₯단점을 κ³ λ €ν•˜μ—¬ 1μ°¨ λ‘œκ·ΈμΈμ€ μΏ ν‚€λ‘œ κ΅¬ν˜„ν•˜μ˜€λ‹€.

μ°Έκ³ 

μ†Œμ…œ 둜그인

μ†Œμ…œ λ‘œκ·ΈμΈμ€ 42 api의 OAuth 인증을 μ°Έκ³ ν•˜μ—¬ κ΅¬ν˜„ν•˜μ˜€λ‹€.

κΉƒν—™ μ†Œμ…œ λ‘œκ·ΈμΈλ„ κ΅¬ν˜„ν–ˆμ—ˆλŠ”λ° ꡳ이 ν•„μš”κ°€ μ—†λ‹€λŠ” νŒλ‹¨ν•˜μ— 빼버렸닀.

μ°Έκ³ 

2차 인증

2μ°¨ 인증(two factor authentication)에 λŒ€ν•΄μ„œ 의견이 λΆ„λΆ„ν–ˆλŠ”λ°, 2μ°¨ 인증이 무엇인지에 λŒ€ν•΄μ„œ λ¨Όμ € μ •μ˜ν•΄λ³΄μ•˜λ‹€.

2μ°¨ 인증은 λ‹¨μˆœνžˆ 2번 이상 μΈμ¦ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, 인증을 ν•˜κΈ° μœ„ν•΄μ„œ 2~3κ°€μ§€ μš”μ†Œλ₯Ό μ‘°ν•©ν•˜μ—¬ 인증을 ν™•μΈν•˜λŠ” 것을 λœ»ν•œλ‹€. 이 λ•Œ 좔가적인 μš”μ†ŒλŠ” λ‚˜λ¦„λŒ€λ‘œ ν‘œμ€€ν™”λœ 3κ°€μ§€ μš”μ†Œκ°€ μ‘΄μž¬ν•œλ‹€.

  1. Knowledge Factor(μ‚¬μš©μžκ°€ μ•Œκ³  μžˆλŠ” 것)

    • ex) λΉ„λ°€λ²ˆν˜Έ, PIN(Personal Identification Number), νŒ¨ν„΄, 어릴적 별λͺ… λ“±

  2. Possession Factor(μ‚¬μš©μžκ°€ μ†Œμœ ν•˜κ³  μžˆλŠ” 것)

    • ex) OTP tokn, 슀마트 μΉ΄λ“œ, μ‹ μš©μΉ΄λ“œ, μ²΄ν¬μΉ΄λ“œ, νœ΄λŒ€ν°μœΌλ‘œ SMS 문자 λ°›λŠ” 경우 λ“±

  3. Inherence Factor(μ‚¬μš©μž 고유의 것)

    • ex) μ§€λ¬Έ, 홍채인식 λ“±

2~3κ°€μ§€ μš”μ†Œλ₯Ό μ‘°ν•©ν•΄μ•Όν•œλ‹€λŠ” 것이 μ€‘μš”ν•˜λ‹€. λ§Œμ•½ λΉ„λ°€λ²ˆν˜Έλ₯Ό ν™•μΈν•œ λ‹€μŒ 어릴적 별λͺ…을 μž…λ ₯ν–ˆμ„ λ•Œ 인증해쀀닀면 2μ°¨ 인증일까? μ•„λ‹ˆλ‹€. μ΄λŠ” 'κ°•ν•œ 인증(Strong Authentication)'에 μ†ν•œλ‹€κ³  ν•  μˆ˜λŠ” μžˆκ² μ§€λ§Œ, Knowledge Factorλ§Œμ„ μ‚¬μš©ν•˜μ—¬ 인증을 μ§„ν–‰ν–ˆμœΌλ―€λ‘œ 2μ°¨ 인증이 μ•„λ‹Œ 것이닀.

이에 우리 νŒ€μ€ rails의 μ•‘μ…˜ λ©”μΌλŸ¬μ™€ mailgun gem을 ν™œμš©ν•˜μ—¬ 2μ°¨ 인증을 κ΅¬ν˜„ν•˜μ˜€λ‹€. 사싀 mailgun gem λŒ€μ‹  gmail 계정을 μƒμ„±ν•˜μ—¬ κ΅¬ν˜„μ„ μ‹œλ„ν•΄λ³΄μ•˜μœΌλ‚˜, ꡬ글 μΈ‘μ—μ„œ 비정상적인 메일 ν™œμš©μ΄λΌκ³  κ°μ§€ν•˜μ˜€λŠ”μ§€ λͺ‡λ²ˆ ν…ŒμŠ€νŠΈν•œ κ²ƒλ§ŒμœΌλ‘œ 이메일 계정이 λΉ„ν™œμ„±ν™”λ˜λŠ” λΆˆμƒμ‚¬κ°€ μžˆμ—ˆλ‹€;

  • μ°Έκ³ 

    λ‘œκ·Έμ•„μ›ƒ

    λ‘œκ·Έμ•„μ›ƒμ€ μΏ ν‚€λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” μ‹μœΌλ‘œ κ΅¬ν˜„λ˜μ—ˆλ‹€. μ•„λž˜μ²˜λŸΌ 204 μƒνƒœμ½”λ“œλ₯Ό λ°˜ν™˜ν•˜λ €ν–ˆμœΌλ‚˜ 였λ₯˜κ°€ λ‚˜μ„œ 방법을 μ°Ύμ•„μ•Όν–ˆλŠ”λ°, render nothing => true, :status => 204 ꡬ문처럼 renderλ₯Ό μ“°λŠ” 방식은 rails 5 κΉŒμ§€λ§Œ μœ νš¨ν–ˆλ‹€λŠ” 것을 μ•Œμ•„λƒˆλ‹€.

      def destroy
        id = cookies.encrypted[:service_id]
        return if not User.exists?(id)
        User.find(id).logout
        remove_session
        render nothing => true, :status => 204
      end

    결과적으둜 rails6 μ΄μƒμ—μ„œλŠ” μ»¨νŠΈλ‘€λŸ¬μ—μ„œ 204 λ‚΄μš©μ„ 보내렀면 μ•„λž˜μ²˜λŸΌ λ³΄λ‚΄μ•Όν•œλ‹€.

    render body: nil, :status => 204

    μ•„λ‹ˆλ©΄

    head :no_content

    μ΄λ ‡κ²Œ 보내면 λœλ‹€.

ν•™μŠ΅ λ‚΄μš©μ— λŒ€ν•œ 개인적인 총평

μƒνƒœ 관리에 λŒ€ν•΄μ„œ μ’€ 더 깊게 ν•™μŠ΅ν•  수 μžˆμ–΄μ„œ μ’‹μ•˜λ‹€. λ‹€μŒμ—λŠ” 토큰을 ν™œμš©ν•œ 방식을 μ‹œλ„ν•΄λ΄μ•Όκ² λ‹€.

λ‹€μŒ ν•™μŠ΅ κ³„νš

  • Appearance view κ΅¬ν˜„

Last updated

Was this helpful?