"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 인증 유형: JWT, OAuth 및 Google 및 Facebook과의 보안 통합

인증 유형: JWT, OAuth 및 Google 및 Facebook과의 보안 통합

2024년 10월 31일에 게시됨
검색:626

Authentication Types: JWT, OAuth, and Secure Integration with Google and Facebook

최신 웹 개발 세계에서 애플리케이션에 대한 보안 액세스를 보장하려면 인증이 필수적입니다. 사용자 인증을 처리하는 방법에는 여러 가지가 있으며 가장 널리 사용되는 방법으로는 JWT(JSON 웹 토큰)OAuth가 있습니다. 이 게시물에서는 이러한 방법을 살펴보고 GoogleFacebook과 같은 널리 사용되는 서비스와 인증을 통합하는 동시에 시스템을 안전하게 유지하는 방법을 보여 드리겠습니다.

인증이란 무엇입니까?

인증은 시스템에 액세스하려는 사용자의 신원을 확인하는 프로세스입니다. 앱에 로그인할 때 인증을 통해 본인이 누구인지 확인합니다.

다음을 포함한 다양한 인증 방법이 있습니다.

  • 비밀번호 기반 인증: 사용자가 사용자 이름과 비밀번호를 제공하는 가장 일반적인 방법입니다.
  • 토큰 기반 인증: 사용자는 로그인 후 후속 요청을 인증하는 데 사용되는 토큰을 받습니다.
  • OAuth: 타사 서비스에서 사용자를 확인하고 비밀번호를 공유하지 않고도 액세스를 제공할 수 있습니다.

JWT(JSON 웹 토큰)란 무엇입니까?

JSON 웹 토큰(JWT)은 API 및 단일 페이지 애플리케이션(SPA)을 보호하는 데 널리 사용되는 방법입니다. JWT는 당사자 간에 정보를 안전하게 전송하는 데 사용되는 소형 URL 안전 토큰입니다.

JWT를 구성하는 요소는 다음과 같습니다.

  • 헤더: 토큰 유형 및 서명 알고리즘(예: HMAC, RSA)에 대한 정보를 포함합니다.
  • 페이로드: 전송되는 청구 또는 데이터(예: 사용자 ID, 만료 시간)가 포함됩니다.
  • 서명: 데이터가 변경되지 않았는지 확인하여 토큰의 무결성을 보장합니다.

JWT의 예

{
  "header": {
    "alg": "HS256",
    "typ": "JWT"
  },
  "payload": {
    "sub": "1234567890",
    "name": "John Doe",
    "iat": 1516239022
  },
  "signature": "SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}

JWT는 비밀 키를 사용해 헤더, 페이로드, 서명을 인코딩하여 생성됩니다. 그런 다음 이 토큰은 클라이언트로 전송되며(일반적으로 로컬 저장소 또는 쿠키에 저장됨) 사용자를 인증하기 위해 각 요청과 함께 전달됩니다.

작동 방식은 다음과 같습니다.

sequenceDiagram
    participant User
    participant Server
    User ->> Server: Sends Login Credentials
    Server ->> User: Sends JWT
    User ->> Server: Requests Data with JWT
    Server ->> User: Verifies Token, Responds with Data

왜 JWT를 사용하나요?

  1. 상태 비저장: 서버는 세션 데이터를 저장할 필요가 없습니다. JWT에는 필요한 모든 정보가 포함되어 있습니다.
  2. 확장 가능: 서버에 세션 저장소가 없으므로 애플리케이션 확장이 더 쉽습니다.
  3. 보안: 서명은 토큰이 변조되지 않았음을 보장합니다.

OAuth란 무엇입니까?

OAuth는 인증을 위한 개방형 표준입니다. 이를 통해 사용자는 타사 앱과 자격 증명을 공유하지 않고도 기존 계정(예: Google, Facebook)을 사용하여 타사 애플리케이션에 로그인할 수 있습니다.

OAuth는 제3자 서비스가 사용자를 대신하여 다른 플랫폼과 상호 작용할 수 있도록 허용하는 액세스 토큰을 발급하여 작동합니다.

OAuth의 기본 흐름은 다음과 같습니다.

sequenceDiagram
    participant User
    participant App
    participant Google/Facebook
    User ->> App: Login with Google/Facebook
    App ->> Google/Facebook: Requests Authorization
    Google/Facebook ->> User: User Authorizes Access
    Google/Facebook ->> App: Sends Access Token
    App ->> User: Authenticated!
  1. 사용자가 Google로 로그인 또는 Facebook으로 로그인을 클릭합니다.
  2. 앱이 인증을 위해 사용자를 Google/Facebook으로 리디렉션합니다.
  3. 사용자는 특정 정보(예: 프로필, 이메일)에 대한 접근을 허용하는 데 동의합니다.
  4. Google/Facebook은 앱에 액세스 토큰을 제공합니다.
  5. 앱은 토큰을 사용하여 사용자를 대신하여 승인된 API 요청을 보냅니다.

OAuth를 사용하는 이유는 무엇입니까?

  1. 편의성: 사용자는 새 비밀번호나 계정을 만들 필요가 없습니다.
  2. 보안: 사용자는 자신의 자격 증명을 앱과 직접 공유하지 않습니다.
  3. 표준화: OAuth는 Google, Facebook, Twitter 등과 같은 플랫폼에서 널리 지원됩니다.

Google 및 Facebook과 OAuth 통합

OAuth를 Google 또는 Facebook과 통합하려면 다음 단계를 따르세요.

1단계: Google 또는 Facebook에서 앱 만들기

  • Google의 경우 Google 개발자 콘솔로 이동하여 프로젝트를 만듭니다.
  • Facebook의 경우 Facebook 개발자 포털로 이동하여 새 앱을 설정하세요.

2단계: 클라이언트 ID 및 클라이언트 비밀번호 가져오기

Google이나 Facebook으로부터 클라이언트 ID클라이언트 비밀번호를 받게 됩니다. 이는 귀하의 애플리케이션을 식별하고 승인하는 데 사용됩니다.

3단계: 앱에서 OAuth 설정

다음은 Node.js와 Passport.js를 사용하여 Google 인증을 구현하는 예입니다.

const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;

passport.use(new GoogleStrategy({
    clientID: process.env.GOOGLE_CLIENT_ID,
    clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    callbackURL: '/auth/google/callback'
  },
  function(token, tokenSecret, profile, done) {
    // Save the user info from the profile
    return done(null, profile);
  }
));

// Routes for authentication
app.get('/auth/google', passport.authenticate('google', { scope: ['profile', 'email'] }));

app.get('/auth/google/callback', 
  passport.authenticate('google', { failureRedirect: '/' }),
  function(req, res) {
    // Successful authentication
    res.redirect('/dashboard');
  });

이 예에서는:

  1. 사용자가 'Google로 로그인'을 클릭합니다.
  2. 인증을 위해 사용자가 Google로 리디렉션됩니다.
  3. 로그인에 성공하면 Google은 액세스 토큰을 사용하여 사용자를 앱으로 다시 리디렉션합니다.

인증 보안

인증을 구현할 때는 보안이 매우 중요합니다. 인증 시스템을 보호하기 위한 몇 가지 모범 사례는 다음과 같습니다.

1. HTTPS 사용

클라이언트와 서버 간에 전송되는 데이터를 암호화하려면 항상 HTTPS를 사용하세요. 이렇게 하면 공격자가 민감한 정보를 가로채는 것을 방지할 수 있습니다.

2. 토큰 만료 구현

토큰(특히 JWT)에는 토큰 재사용 위험을 줄이기 위해 만료 시간이 있어야 합니다. 예를 들어 JWT가 15분 후에 만료되도록 설정하고 새로고침 토큰을 사용하여 새 토큰을 생성할 수 있습니다.

3. 토큰을 안전하게 저장

웹 앱의 경우 로컬 저장소 대신 httpOnly 쿠키에 토큰을 저장하세요. 이렇게 하면 JavaScript 기반 공격(예: XSS)이 토큰에 액세스하는 것을 방지할 수 있습니다.

4. 토큰 순환

토큰 유출로 인한 피해를 최소화하기 위해 주기적으로 토큰을 순환 및 무효화합니다.

5. 강력한 클라이언트 비밀을 사용하세요

클라이언트 ID클라이언트 비밀번호가 강력하고 대중에게 노출되지 않도록 하세요. 환경 변수를 사용하여 안전하게 저장하세요.

결론

인증은 모든 웹 애플리케이션의 기본 측면이며 이를 처리하는 다양한 방법이 있습니다. JWT는 상태 비저장 및 확장 가능한 접근 방식을 제공하는 반면 OAuth는 Google 및 Facebook과 같은 타사 서비스와의 원활한 통합을 제공합니다.

최고의 보안 관행을 따르면 인증 시스템이 사용자 친화적일 뿐만 아니라 보안도 보장할 수 있습니다.

릴리스 선언문 이 기사는 https://dev.to/ivannalon/authentication-types-jwt-oauth-and-secure-integration-with-google-and-facebook-3do6?1에 복제되어 있습니다. 침해가 있는 경우에는 Study_golang에 문의하세요. @163.com 삭제
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3