[nodejs] Node.Js 활용하기 - 섹션 5. 타사인증 (Federation authentication)

2022. 2. 14. 18:15· 스터디📖/Node.js
목차
  1. Federation authentication 1 : intro
  2. Federation authentication 2 : facebook

Federation authentication 1 : intro

Passportjs - local방식 ❌ -> Facebook, Google, Kakao 같이 많은 사람들이 이미 회원가입되어 있는 기관의 정보를 사용해서 인증을 하는 방식.

  • 사용자가 회원가입을 위해 복잡한 절차를 거치지 않아도 됨
  • 사용자의 정보를 보관하는 것은 서비스를 제공하는 입장에서 부담스러운 일 -> 거대 자본을 가진.. 기업들에게 맡기고..^^
  • 해당 서비스에 종속되는 느낌이 드는 것이 단점.

Federation authentication 2 : facebook

https://www.passportjs.org/packages/passport-facebook/

 

passport-facebook

Facebook authentication strategy for Passport.

www.passportjs.org

facebook이 meta로 바뀌고.. 아무튼 그 사이 많은 게 바뀌어서 강의에서 보여주는 developer페이지와는 조금 달랐다. 그래서 구글링 잔뜩했는데 결론적으로 app id랑 secret key만 알아내면 다른 건 딱히 안해도 괜찮은 것 같다..(?)

https://developers.facebook.com/

일단 등록을 하고 > 새로운 앱 만들기 까지는 동일한데, 여기서 웹 서비스를 선택하는 항목은 없고, 앱에 필요한 기능이라고해서 이것저것 있는데 나는 '연결된 환경 구축'을 선택했다. 그냥 이게 제일 맞는 것 같아서 했는데 딱히 뭘 선택하든 상관이 없는 것 같기도 하고 검색해보니 기타를 선택하는 경우가 많은 것 같았다.

 

그리고 나면 제품추가에 Facebook 로그인이라는 것이 있다. 이곳의 설정을 누르면 클라이언트 OAuth 설정이라는 페이지가 나오는데 여기서 유효한 OAuth 리디렉션 URI를 입력해야 한다고해서 localhost 주소를 넣었더니 'http://localhost 리디렉션은 개발 모드에 있는 동안만 자동으로 허용되며 여기에 추가하지 않아도 됩니다.' 라는 메시지가 떴고 어떻게 해야 되나.. 하다가 그냥 그대로 냅두고 사이드바의 설정 > 기본설정 을 들어갔다.

 

여기서 app ID와 secret key를 확인할 수 있다. 도메인이랑 이것저것 또 입력하라고 하는데 아무거나 넣으니 또 안돼서 일단 이것도 패스..했다^^

 

일단 facebook 설정은 이쯤하고, passportjs-facebook을 설치한다.

npm install --save passportjs-facebook

passportjs-facebook을 사용하려면 Strategy를 추가해야 한다.

var FacebookStrategy = require('passport-facebook').Strategy;

passport.use(new FacebookStrategy({
    clientID: '',
    clientSecret: 'secret key는 절대로 유출되면 안된다고 한다',
    callbackURL: "http://localhost:3003/auth/facebook/callback", //앞에 localhost는 빼도 무방하다.
    profileFields: ['id', 'email', 'gender', 'link', 'locale', 'name', 
                    'timezone', 'updated_time', 'verified', 'displayName'] //email과 같이 scope를 추가하려면 필요하다고 하다.
  },
  function(accessToken, refreshToken, profile, cb) { //profile이 중요하다.
    console.log(profile);
    var authId = 'facebook:'+profile.id; // 식별자를 따로 생성해준다. 앞으로 이것으로 user를 식별할 것이다.
    for (var i=0; i<users.length; i++){ // 이미 존재하는 사용자인지 체크
        var user = users[i];
        if (user.authId === authId){
            return cb(null, user); //로그인 성공
        }
    }
    var newUser = {
        'authId':authId,
        'displayName':profile.displayName,
        'email':profile.emails[0].value
    };
    users.push(newUser); //새로 가입
    cb(null, newUser); 
}
));

그리고 라우터를 연결해준다. 타사인증을 이용할때는 보통 라우터가 두 개 필요하다.

app.get('/auth/facebook',
    passport.authenticate(
        'facebook',
        {scope: 'email'} // facebook login scope 검색하면 다른 참조할 수 있는 정보들 확인 가능.
    )
);

app.get('/auth/facebook/callback',
    passport.authenticate('facebook', 
    { 
        failureRedirect: '/auth/login' 
    }),
    function(req, res) {
        // Successful authentication, redirect home.
        res.redirect('/welcome');
});

처음에 사용자가 Facebook 버튼을 누르면 /auth/facebook으로 연결되고 여기서 facebook으로 이동하여 redirect시킨다. 여기서 사용자가 동의를 하면, 그 결과는 /auth/facebook/callback으로 오게 되는 것이다. 그 이후에 작동하는 순서는 local과 동일하다.

 

그리고 authId로 식별자를 통일하기 위해 기존의 users 객체와 local 인증 부분에도 authId를 추가해서 코드를 수정했다.

앞에서 페이스북 설정을 제대로 안해서 오류가 날 것이라 생각했는데 warning은 있었으나 잘 동작하는 것을 확인할 수 있었다! 아마 실제 서비스에 구현을 하려면 그 설정들이 다 필요할 것이다. 지금은 개발환경에서 테스트해보는 거니까 여기서 만족!

저작자표시 (새창열림)

'스터디📖 > Node.js' 카테고리의 다른 글

[nodejs] Node.Js 활용하기 - 섹션8. 정리정돈의 기술 1 - Jade Extends 살펴보기  (0) 2022.02.15
[nodejs] Node.Js 활용하기 - 섹션 7. Mysql 버전으로 로그인 인증 구현하기  (0) 2022.02.15
[nodejs] Node.Js 활용하기 - 섹션 4. 인증을 쉽게 도와주는 PassportJS 모듈  (0) 2022.02.14
[nodejs] Node.Js 활용하기 - 섹션 3. 비밀번호 보안 (Security Password)  (0) 2022.02.12
[nodejs] Node.Js 활용하기 - 섹션 2. Session  (0) 2022.02.12
  1. Federation authentication 1 : intro
  2. Federation authentication 2 : facebook
'스터디📖/Node.js' 카테고리의 다른 글
  • [nodejs] Node.Js 활용하기 - 섹션8. 정리정돈의 기술 1 - Jade Extends 살펴보기
  • [nodejs] Node.Js 활용하기 - 섹션 7. Mysql 버전으로 로그인 인증 구현하기
  • [nodejs] Node.Js 활용하기 - 섹션 4. 인증을 쉽게 도와주는 PassportJS 모듈
  • [nodejs] Node.Js 활용하기 - 섹션 3. 비밀번호 보안 (Security Password)
호프
호프
호프
Untitled
호프
전체
오늘
어제
  • 분류 전체보기 (341)
    • 오류😬 (4)
    • 스터디📖 (96)
      • 웹 개발 기초 (8)
      • Spring (20)
      • ML, DL (30)
      • Node.js (22)
      • React (0)
      • 블록체인 (12)
      • Go (3)
      • Javascript (1)
    • 알고리즘💻 (153)
      • 그리디 (23)
      • Bruteforce&Backtracking (16)
      • DP (17)
      • 이분탐색&정렬&분할정복 (17)
      • 누적합&투포인터 (6)
      • 스택&큐&덱 (19)
      • 그래프(DFS&BFS) (19)
      • 트리 (7)
      • 우선순위큐&다익스트라 (11)
      • 벨만포드&플로이드와샬 (8)
      • map&set&number theory (5)
      • 기타 (5)
    • 프로젝트 (3)
      • 캡스톤 디자인 프로젝트 (3)
    • 블록체인🔗 (3)
      • Solana (2)
      • 개발 (0)
      • Harmony (1)
    • ASC (6)
    • CS (73)
      • 데이터베이스 (12)
      • 클라우드컴퓨팅 (21)
      • 운영체제 (11)
      • 컴퓨터네트워크 (14)
      • 블록체인응용 (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 복습

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
호프
[nodejs] Node.Js 활용하기 - 섹션 5. 타사인증 (Federation authentication)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.