인프런 커뮤니티 질문&답변

Jack님의 프로필 이미지
Jack

작성한 질문수

Slack 클론 코딩[백엔드 with NestJS + TypeORM]

local serializer, guard

로그인 시 쿠키세션에 대하여 질문있습니다.

해결된 질문

작성

·

274

·

수정됨

1

안녕하세요. 강사님

 

좋은 강의 감사드립니다.

로그인 시 인증 방법에 대하여 질문있습니다.

 

1. 로그인 할때 session 식별자를 쿠키와 함께 클라이언트에 전해주는 코드가 어떤 것인지 궁금합니다.

로그인시 local-strategy가 실행되면 맨 마지막에 serializeUser에 user.id만 세션에 저장해 놓고 필요할때마다

deserializeUser에서 userid를 뽑아올 수 있잖아요? 여기까지는 이해했습니다.

그런데 로그인을 성공하면 어떤 코드에서 cookie가 session식별자를 프론트에 전달해주는지 궁금합니다.

main.ts에서

  app.use(cookieParser());

  app.use(
    session({
      resave: false,
      saveUninitialized: false,
      secret: process.env.COOKIE_SECRET,
      cookie: {
        httpOnly: true,
      },
    }),
  );

  app.use(passport.initialize());

  app.use(passport.session());

이 코드를 설정했기 때문에 로컬 전략 후 자동으로 쿠키를 통해 세션을 프론트에 전달해주는 것인지 궁금합니다.

2. 웹이 아닌 모바일 앱에서 인증 시 백앤드 서버쪽에서 express-session과 passport를 사용하여 인증하는 것이 일반적인지 궁금합니다.

모바일은 쿠키가 없기 때문에 쿠키세션은 사용하지 못하더라도 쿠키말고 body에 session 식별자를 보내주어서

인증이 가능하지 않을까 라는 의문이 들었습니다.

구글 검색결과 "된다 or 안 된다. 모바일앱에서는 passport나 session을 사용하지 않는 것이 좋다." 라는 의견이 있어서 헷갈립니다.

모바일앱에서는 passport와 session을 사용하지 않고 jwt를 사용하는 것이 일반적인지 의견을 듣고싶습니다.

 

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

  1. req.login(super.login)을 할 때 응답 헤더에 쿠키가 심어집니다. local-auth.guard.ts에 있습니다.

  2. 앱에서도 세션 토큰을 body를 통해 전달해서 로그인하는 게 가능은 합니다. 그게 사실 토큰 방식이기도 하고요. 하지만 그런 식으로 우회해서 쿠키를 쓰는 것보다는 액세스토큰/리프레시토큰으로 하는 게 모바일 앱에서는 더 일반적이기는 합니다. 액세스토큰/리프레시토큰을 jwt로 구성할 수 있고요.

Jack님의 프로필 이미지
Jack
질문자

감사합니다 강사님. 2번 답변이 session 뿐만 아니라 passport도 적용되는 것이죠?

 

passport에는 passport.session 뿐만 아니라 passport-jwt도 있고 여러가지 있던데 passport있는 모듈 자체도 모바일 앱에는 적용하지 않는 것이 일반적인가요?

 

모바일앱에 jwt를 쓰는 건 봤어도 passport-jwt를 사용하는 건 잘 못 봐서요...

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

아뇨 passport는 모바일앱에 써도 됩니다. passport는 인증을 위한 라이브러리지 "웹" 인증만을 위한건 아닙니다. passport-jwt 쓰셔도 됩니다.

Jack님의 프로필 이미지
Jack

작성한 질문수

질문하기