Upgrade to Pro — share decks privately, control downloads, hide ads and more …

認証・認可の仕組みを理解する上で知っておきたい基礎知識/auth-overview

 認証・認可の仕組みを理解する上で知っておきたい基礎知識/auth-overview

A1a9f42c83fdfddcfed0da2b981d4fea?s=128

Toshiharu Nishina

May 08, 2020
Tweet

More Decks by Toshiharu Nishina

Other Decks in Programming

Transcript

  1. ਔՊ ढ़੖ ೝূɾೝՄͷ࢓૊ΈΛཧղ͢Δ্Ͱ ஌͓͖͍ͬͯͨجૅ஌ࣝ 

  2. ໨࣍  • ࠓճ࿩͢಺༰ • ηογϣϯʹؔ͢Δجૅ஌ࣝ • ೝূɾೝՄʹ͍ͭͯ • ೝূͷ۩ମతͳ࣮૷ख๏

    • ·ͱΊ
  3. ໨࣍  • ࠓճ࿩͢಺༰ • ηογϣϯʹؔ͢Δجૅ஌ࣝ • ೝূɾೝՄʹ͍ͭͯ • ೝূͷ۩ମతͳ࣮૷ख๏

    • ·ͱΊ
  4. • ೝূͱೝՄͷҧ͍ʹ͍ͭͯ
 • ηογϣϯೝূͱτʔΫϯೝূͷҧ͍ʹ͍ͭͯ
 • ೝূͷηΩϡϦςΟϦεΫXSSɾCSRFʹ͍ͭͯ  ೝূɾೝՄʹؔ͢Δ֓ཁͱجૅ஌ࣝͷڞ༗ ϞϊϦγοΫͳΞϓϦΛ෼ׂ͢Δʹ͋ͨΓɺೝূɾೝՄͷ࣮૷ํ๏ ͷݕ౼͸ආ͚ͯ͸௨Ε·ͤΜɻ


    Լ४උͱͯ͠ɺࠓճ͸ೝূɾೝՄͷجૅ஌ࣝʹ͍ͭͯ·ͱΊ·ͨ͠
  5. ໨࣍  • ࠓճ࿩͢಺༰ • ηογϣϯʹؔ͢Δجૅ஌ࣝ • ೝূɾೝՄʹ͍ͭͯ • ೝূ࣮૷ख๏

    • ·ͱΊ
  6. • εςʔτϑϧ • ݱࡏͷঢ়ଶΛ΋ͭ • ྫ: FTP, TCP, BGP, OSPF,

    EIGRP, SMTP, SSH • εςʔτϨε • ݱࡏͷঢ়ଶΛ΋ͨͳ͍ • ྫ: HTTP, UDP, IP, DNS  εςʔτϑϧͱεςʔτϨεʹ͍ͭͯ σʔλ௨৴ʹ͸εςʔτϑϧͱεςʔτϨεͷ2छྨ͕͋Δ
  7. εςʔτϑϧͳ΍ΓͱΓ  ͝஫จ͸ʁ ηοτͷυϦϯΫ͸ʁ ళ಺Ͱঌ্͕͠Γ·͔͢ʁ ϋϯόʔΨʔηοτ͍ͩ͘͞ ίʔϥ͍ͩ͘͞ ͸͍

  8. εςʔτϨεͳ΍ΓͱΓ  ͝஫จ͸ʁ ηοτͷ৔߹ɺυϦϯΫ΋஫จͯ͠Լ͍͞ ஫จͷࡍ͸ళ಺Ͱঌ্͕͠Δ͔͓఻͑Լ͍͞ ϋϯόʔΨʔηοτ͍ͩ͘͞ ϋϯόʔΨʔηοτͱίʔϥ͍ͩ͘͞ ϋϯόʔΨʔηοτͱίʔϥ͍ͩ͘͞ ళ಺Ͱ৯΂·͢

  9. • WebαΠτ͸HTTP௨৴Λར༻͢ΔͷͰεςʔτϨε • ࣮ࡍʹ͸ECαΠτͷʮങ͍෺Χΰʯ౳ɺঢ়ଶʹԠͯ͡
 αΠτͷڍಈΛม͍͑ͨ  ηογϣϯͷඞཁੑ HTTP௨৴ͰεςʔτϑϧΛ࣮ݱ͢ΔͨΊͷ໾ׂ͕ηογϣϯ

  10. • Cookie
 • WebStorage • SessionStorage • LocalStorage  ηογϣϯ৘ใͷอଘઌ

    ΫϥΠΞϯτ(ϒϥ΢β)ʹ͸CookieͱWebStorageͷ2छྨ͕ଘࡏ
  11. • αʔόʔଆͷηογϣϯΛ؅ཧ͢ΔͨΊͷ΋ͷ • 4KBͷσʔλαΠζ੍໿͕͋Δ • ΫϥΠΞϯτ͔Βαʔόʔ΁ͷϦΫΤετ࣌͸ࣗಈૹ৴ • αʔόʔ͔ΒΫϥΠΞϯτ΁ͷϨεϙϯε࣌͸
 Set-Cookieϔομʔʹηοτͯ͠ૹΒΕΔ 

    ηογϣϯ৘ใͷอଘઌ: Cookie
  12. • ΫϥΠΞϯτଆͷηογϣϯΛ؅ཧ͢Δ΋ͷ • ΫϥΠΞϯτଆͰར༻Ͱ͖ΔσʔλϕʔεͷΑ͏ͳ΋ͷ • ϒϥ΢β͕։͍ͯΔ͚࣌ͩར༻ՄೳͳʮSessionStorageʯ • ӬଓతʹσʔλΛอଘͰ͖ΔʮLocalStorageʯ  ηογϣϯ৘ใͷอଘઌ:

    WebStorage
  13. ໨࣍  • ࠓճ࿩͢಺༰ • ηογϣϯʹؔ͢Δجૅ஌ࣝ • ೝূɾೝՄʹ͍ͭͯ • ೝূͷ۩ମతͳ࣮૷ख๏

    • ·ͱΊ
  14. • ೝূʢAuthenticationʣ • ୭Ͱ͋Δ͔Λ֬ೝ͢Δ͜ͱ • ྫ: ύεϫʔυೝূɺࢦ໲ೝূͳͲ • ೝূʹࣦഊͨ͠ͱ͖ͷΤϥʔ͸ʮ401 Unauthorizedʯ

    • ೝՄʢAuthorizationʣ • ૢ࡞ͷݖݶΛ༩͑Δ͜ͱ • ྫ: Ӿཡ੍ݶͷ͋Δϖʔδ΁ͷΞΫηεͳͲ • ݖݶෆ଍ʹΑΔΤϥʔ͸ʮ403 Forbiddenʯ  ೝূͱೝՄͷҧ͍
  15.  ೝূͷख๏ʹ͍ͭͯ ηογϣϯ΂ʔεͷೝূ
 ʢεςʔτϑϧʣ τʔΫϯϕʔεͷೝূ
 ʢεςʔτϨεʣ

  16.  ηογϣϯ΂ʔεͷೝূ 1. ΫϨσϯγϟϧΛPOST 2. ೝূ੒ޭޙɺηογϣϯ৘ใ ͕ฦͬͯ͘Δ 3. ηογϣϯ৘ใΛར༻ͯ͠
 ೝՄ௨৴Λߦ͏

  17.  τʔΫϯϕʔεͷೝূʢ1/3ʣ 1. ΫϨσϯγϟϧΛPOST 2. ೝূ੒ޭޙɺτʔΫϯ͕ฦͬͯ ͘Δ 3. τʔΫϯΛར༻ͯ͠ೝՄ௨৴Λ ߦ͏


    ɾํ๏1: Authorizationϔομʔʹ τʔΫϯΛηοτ
 ɾํ๏2: CookieʹτʔΫϯΛอଘ
  18. • ࣝผࢠܕ • DBʹτʔΫϯͷ৘ใΛอଘ͓ͯ͘͠λΠϓͷτʔΫϯ • ಺แܕ • ΞΫηετʔΫϯʹඥ෇͘৘ใΛΞΫηετʔΫϯࣗମͷதʹຒ ΊࠐΉ΋ͷɻ •

    JWT͸಺แܕ  τʔΫϯϕʔεͷೝূʢ2/3ʣ τʔΫϯͷछྨʹ͍ͭͯ \ lTDPQFzlYYYz  lDMJFOU@JEzlYYYz  lFYQzlYYYz  lJBUzlYYYz  lTVCzlYYYz  lJTTzlYYYz  lKUJzlYYYz ^ ಺แܕ ࣝผࢠܕ
  19. • OAuth2.0ʹ͍ͭͯ • τʔΫϯͷܗࣜ΍ɺτʔΫϯͷཁٻͱͦͷԠ౴ͳͲɺ
 τʔΫϯͷ࢓༷Λඪ४Խͨ͠΋ͷ • ʮೝՄʯΛඪ४Խͨ͠΋ͷͰ͋Γʮೝূʯ෦෼͸
 είʔϓ֎ • OAuth2.0Ͱඪ४Խ͞Ε͍ͯΔϑϩʔ

    • ೝՄίʔυϑϩʔ • ΠϯϓϦγοτϑϩʔ • ϦιʔεΦʔφʔɾύεϫʔυɾΫϨσϯγϟϧζϑϩʔ • ΫϥΠΞϯτɾΫϨσϯγϟϧζϑϩʔ • ϦϑϨογϡτʔΫϯϑϩʔ  τʔΫϯϕʔεͷೝূʢ3/3ʣ
  20. • XSS • ѱҙͷ͋ΔJavaScript͕ΫϥΠΞϯτଆͰ࣮ߦ͞Εɺ
 ػີ৘ใ͕ൈ͔ΕΔͳͲͷඃ֐͕ൃੜ͢Δ੬ऑੑ • ΫϥΠΞϯτଆͰൃੜ͢Δ੬ऑੑ • CSRF •

    ѱҙͷ͋ΔϦΫΤετΛαʔόʔड͚෇͚ɺ
 ҙਤ͠ͳ͍ॲཧ͕ߦΘΕͯ͠·͏੬ऑੑ • αʔόʔଆͰൃੜ͢Δ੬ऑੑ  ೝূɾೝՄʹ͓͚ΔηΩϡϦςΟϦεΫ
  21. ໨࣍  • ࠓճ࿩͢಺༰ • ηογϣϯʹؔ͢Δجૅ஌ࣝ • ೝূɾೝՄʹ͍ͭͯ • ೝূͷ۩ମతͳ࣮૷ख๏

    • ·ͱΊ
  22. • ηογϣϯϕʔε • τʔΫϯϕʔε • CookieʹอଘɺϦΫΤετ࣌ʹCookieΛࣗಈૹ৴ • CookieʹอଘɺAuthorizationϔομʔʹ෇༩ͯ͠ϦΫΤετ • LocalStorageʹอଘɺAuthorizationϔομʔʹ෇༩ͯ͠


    ϦΫΤετ  ೝূɾೝՄͷख๏·ͱΊ ηογϣϯϕʔε1ͭɺτʔΫϯϕʔε3ͭͷ߹ܭ4छྨΛ঺հ ࢀߟIUUQTRJJUBDPN)JSPNJJUFNTFBGGE
  23. • XSSରࡦ • Cookieʹhttp:onlyΛ͚ͭΔ͜ͱͰJavaScriptͰΞΫηε
 Ͱ͖ͳ͍Α͏ʹ͢Δ • CSRFରࡦ • CSRFτʔΫϯ •

    ύεϫʔυΛ࠶౓ೖྗ͢Δ࢓༷ʹ͢Δ  ηογϣϯϕʔε Cookie͸ࣗಈૹ৴͞ΕΔͷͰɺѱҙͷ͋ΔϦΫΤετ͔൑ผ
 ͢ΔͨΊʹCSRFରࡦʹ͍ͭͯߟ͑Δඞཁ͕͋Δ
  24. • XSSରࡦ • Cookieʹhttp:onlyΛ͚ͭΔ͜ͱͰJavaScriptͰΞΫηε
 Ͱ͖ͳ͍Α͏ʹ͢Δ • CSRFରࡦ • CSRFτʔΫϯ •

    ύεϫʔυΛ࠶౓ೖྗ͢Δ࢓༷ʹ͢Δ  τʔΫϯϕʔε: Cookieʹอଘɾૹ৴ ηογϣϯϕʔεͷ࣌ͱಉ͡
  25. • XSSରࡦ • ϑϨʔϜϫʔΫͷػೳΛར༻ͯ͠ϥΠϒϥϦʹ੬ऑੑ͕
 ͳ͍͔νΣοΫ • CSRFରࡦ • CookieͷτʔΫϯ͸ݕূͰར༻͠ͳ͍ͷͰߟྀෆཁ 

    τʔΫϯϕʔε: Cookieʹอଘɾϔομʔૹ৴ ϔομʔʹηοτ͢ΔτʔΫϯΛCookie͔ΒऔΓग़ͨ͢Ίʹ͸ http:falseʹ͠ͳ͍ͱ͍͚ͳ͍ͷͰXSS੬ऑੑ͕ൃੜ͢Δ
  26. • XSSରࡦ • ϑϨʔϜϫʔΫͷػೳΛར༻ͯ͠ϥΠϒϥϦʹ੬ऑੑ͕
 ͳ͍͔νΣοΫ • CSRFରࡦ • LocalStorageͷσʔλ͸ϦΫΤετ࣌ʹࣗಈͰૹΒΕΔ͜ ͱ͸ͳ͍ͷͰߟྀෆཁ

     τʔΫϯϕʔε: LocalStorageʹอଘɾϔομʔૹ৴ LocalStorage͸JavaScriptͰΞΫηεͰ͖ΔͷͰXSSͷϦεΫ ͋Γ
  27. ໨࣍  • ࠓճ࿩͢಺༰ • ηογϣϯʹؔ͢Δجૅ஌ࣝ • ೝূɾೝՄʹ͍ͭͯ • ೝূͷ۩ମతͳ࣮૷ख๏

    • ·ͱΊ
  28. • ೝূ͸୭Ͱ͋Δ͔Λ֬ೝ͢Δ͜ͱɺೝՄ͸ૢ࡞ͷݖݶΛ༩͑ Δ͜ͱ
 • ೝূํ๏ʹ͸ηογϣϯํࣜͱτʔΫϯํࣜͷ2͕ͭ͋Δ
 • ೝূͷ࢓૊ΈΛ࣮૷͢Δ৔߹͸XSSͱCSRFͷ੬ऑੑΛҙࣝ ͢Δ  ·ͱΊ