νΌλλ‘ λμκ°κΈ°
Dev.toSecurity
μλ¬Έ μ½κΈ°
Passwordless SSO λμ μ ν΅ν Credential Stuffing μμ² μ°¨λ¨ λ° λ³΄μ μ± μ μ κ°
Stop Storing Passwords: Build Enterprise SSO in Laravel π‘οΈ
AI μμ½
Context
μ체 Password μ μ₯ λ°©μμ λ°λ₯Έ Credential Stuffing 곡격 λ ΈμΆ λ° λ³΄μ μ± μ μ¦κ°λΌλ μν€ν μ²μ Liability λ°μ. μ¬μ©μ λΉλ°λ²νΈ μ¬μ¬μ© ν¨ν΄μΌλ‘ μΈν΄ μΈλΆ μ μΆ μ¬κ³ κ° μλΉμ€ 보μ μνμΌλ‘ μ§κ²°λλ ꡬ쑰μ νκ³ μ§λ©΄.
Technical Solution
- OAuth2 νλ‘ν μ½ κΈ°λ°μ Identity Provider(IdP) μμμ ν΅ν μΈμ¦ μ± μ μ κ° μ€κ³
- Laravel Socialiteλ₯Ό νμ©ν OAuth2 Handshake(Redirect, State Verification, Token Exchange) μΆμν λ° κ΅¬ν
- User Table λ΄ password 컬λΌμ Nullable λ³κ²½ λ° provider_id λμ μ ν΅ν λ€μ€ μΈμ¦ μ²΄κ³ κ΅¬μΆ
- updateOrCreate λ‘μ§μ ν΅ν Email κΈ°λ° μ¬μ©μ μλ³ λ° SSO νλ‘ν λκΈ°ν μλν
- μΈμ κ³ μ 곡격 λ°©μ§λ₯Ό μν Auth::login ν session()->regenerate() κ°μ μν
μ€μ² ν¬μΈνΈ
1. μΈλΆ IdP μ°λ μ password 컬λΌμ Nullable μ€μ λ° unique(email) μ μ½ μ‘°κ±΄ νμΈ
2. OAuth2 μ½λ°± μ²λ¦¬ ν λ°λμ μΈμ μ¬μμ±μ ν΅ν΄ Session Fixation 곡격 λ°©μ΄
3. μ¬μ©μ μλ³μλ‘ provider_idμ emailμ λ³ν μ¬μ©νμ¬ κ³μ μ€λ³΅ μμ± λ°©μ§