9/7 TIL 알림작업 / JWT, 액세스토큰, 리프레시토큰 / OAuth

이승준·2023년 9월 7일
0
post-thumbnail

다른페이지에서도 실시간으로 알림이 오게하고싶다

Notification

Web API 를 호출하여 알림을 주는 것

  Notification.requestPermission().then((permission) => {
      if (permission === 'granted') {
        console.log(Notification.permission);
      } else {
        console.log(Notification.permission);
      }
  • 웹 브라우저에 prompt와 비슷한 권한설정을 보내는 메소드
socket.on('notice_message', (msg) => {
  if (Notification.permission === 'granted') {
    const notification = new Notification('새 메시지', {
      body: msg,
    });

    notification.onclick = () => {
      window.location.href = `/public/views/chat.html`;
      notification.close();
    };
  }
});

권한 설정이 허용되면 이러한 이벤트로 알림을 띄울 수 있다.

문제점

  • 시크릿모드에선 거부가 기본값이라 되지 않았다.
  • microsoft edge에서도 되지 않았다.

Firebase의 FCM 서버를 이용하면 안드로이드환경과 오프라인 환경에서도 푸시알림이 가능하다...

JWT, AccessToken, RefreshToken

JWT(Jason Web Token), Refresh Token, 그리고 Access Token은 웹 애플리케이션 및 API 보안에서 중요한 역할을 하는 토큰 기반의 인증 및 권한 부여 시스템의 핵심 구성 요소입니다.

JWT (JSON Web Token):

  • JWT는 클라이언트와 서버 간에 정보를 안전하게 전달하기 위한 토큰 형식의 규격입니다.
  • JWT는 JSON 형식을 사용하며, 클레임(claim)이라고 불리는 정보를 포함합니다. 클레임은 사용자 식별 정보, 권한, 만료 시간 등을 포함할 수 있습니다.
  • JWT는 서명(signature)을 사용하여 토큰의 무결성을 보장하며, 클라이언트가 토큰을 조작하지 못하도록 합니다.
    주로 인증 및 권한 부여를 위해 사용됩니다.

Access Token:

  • Access Token은 보호된 리소스(예: API 엔드포인트)에 접근하거나 요청할 때 사용되는 토큰입니다.
  • 사용자가 인증 후 발급받으며, 일반적으로 짧은 수명을 갖습니다.
  • 서버나 API에서 Access Token을 검증하고, 해당 사용자가 특정 리소스에 접근할 권한이 있는지 확인합니다.

Refresh Token:

  • Refresh Token은 Access Token의 갱신을 위해 사용됩니다.
  • Access Token은 일반적으로 짧은 유효기간을 가지므로, Refresh Token을 사용하면 사용자는 자주 로그인할 필요 없이 Access Token을 갱신할 수 있습니다.
  • 보안을 강화하기 위해 Refresh Token은 일반적으로 긴 유효기간을 가지며, 안전한 저장소에 저장해야 합니다.
  • Refresh Token은 주로 OAuth 2.0 인증 프로토콜과 함께 사용됩니다.

    간단한 시나리오로 설명하면, 사용자가 로그인하면 서버는 Access Token과 함께 Refresh Token도 발급합니다. Access Token은 짧은 유효기간을 가지며 API 요청에 사용됩니다. 유효기간이 만료되면 Refresh Token을 사용하여 새로운 Access Token을 발급받을 수 있습니다. 이렇게 하면 사용자는 로그인 상태를 지속할 수 있고, Access Token이 유출되어도 긴 시간 동안 악용될 가능성을 줄일 수 있습니다.

OAuth

OAuth(Open Authorization)는 인터넷 사용자나 제한된 리소스에 대한 다른 웹 서비스나 애플리케이션의 접근을 위한 개방형 표준 프로토콜입니다. OAuth는 사용자 데이터에 대한 접근 권한을 안전하게 제어하기 위한 프레임워크로, 다른 웹 서비스나 애플리케이션에서 사용자의 인증 정보를 공유하지 않고도 접근 권한을 부여할 수 있게 해줍니다.

OAuth의 주요 구성 요소와 동작 방식은 다음과 같습니다:

  1. Resource Owner (사용자): 자신의 데이터에 대한 접근을 다른 애플리케이션에 부여하려는 사용자를 나타냅니다.

  2. Client (애플리케이션): OAuth를 사용하여 사용자의 데이터에 접근하려는 웹 서비스나 애플리케이션을 나타냅니다.

  3. Authorization Server (인증 서버): 사용자 인증 및 권한 부여 프로세스를 관리하는 서버입니다. 사용자가 리소스에 대한 액세스 권한을 허용하면 인증 서버가 클라이언트에게 액세스 토큰을 제공합니다.

  4. Resource Server (리소스 서버): 사용자의 데이터나 보호된 리소스에 접근을 제공하는 서버를 나타냅니다. 이 서버는 액세스 토큰을 검증하고, 권한이 있는 경우 클라이언트에게 리소스를 제공합니다.

OAuth의 동작 방식은 다음과 같습니다:

  • 인가 코드 부여(Authorization Code Grant):

    • 클라이언트는 사용자를 인증 서버로 리디렉션합니다.
    • 사용자는 인증 서버에서 자신을 인증하고 권한을 부여합니다.
    • 인증 서버는 클라이언트에게 인증 코드를 제공합니다.
    • 클라이언트는 인증 코드를 사용하여 액세스 토큰을 인증 서버에 요청합니다.
    • 인증 서버는 액세스 토큰을 클라이언트에게 제공합니다.
  • 암시적 부여(Implicit Grant):

    • 웹 기반 단일 페이지 애플리케이션(SPA)과 같은 클라이언트에 사용됩니다.
    • 사용자는 인증 서버에서 권한을 부여하고 액세스 토큰을 직접 클라이언트에게 제공받습니다.
  • 클라이언트 자격 증명(Client Credentials):

    • 클라이언트 자체가 자신의 자격 증명으로 인증 서버에 액세스 토큰을 요청합니다.
    • 주로 기계 간 통신에 사용됩니다.

OAuth는 인증 및 권한 부여를 위한 중요한 보안 기술 중 하나이며, 웹 및 모바일 애플리케이션에서 사용자 데이터를 안전하게 관리하고 외부 애플리케이션과 연동하는 데 유용합니다. OAuth 2.0은 현재 가장 널리 사용되는 버전이며, OAuth 1.0a와 비교하여 단순하고 확장 가능한 프로토콜로서 다양한 사용 사례에 적용됩니다.

0개의 댓글