요새 계속 잠자리가 뒤숭숭해서 계속 새벽에 깨는데, 다시 잠을 못자서 그 시간에 코딩을 해보았습니다;;

 

오늘 만든건 아이디/비밀번호 입력하지 않고 계정 변경하는 모듈입니다

 

 

 

 

▲ 관리자 계정(@matthew218)과 일반 유저 계정(@t841)을 오가는 모습

(너무 빠르게 스위칭되어서 합성같아보이네요 ㅋㅋ)

 

 

 

구글 로그인 같은거 생각해보시면 되는데요

 

미리 여러 개의 계정에 로그인을 해두면 이동할 수 있는 계정 목록에 추가가 되고요, 유저는 단순 클릭으로 계정을 스위치 할 수 있게 되는거죠

 

개발하면서 라이믹스의 AutoLogin 기능을 참고했는데요, 로그인 쪽이 계정 보안문제와 직결되기 때문에 머리를 굴리면서 설계를 해봤습니다

 

 

 

우선 계정에 로그인 할 때마다 로그인 키를 생성/갱신하며, 이 값을 httpOnly/Secure 쿠키에 JWT로 저장합니다.

 

그리고 서버에서는 이 쿠키를 읽어서 변경할 수 있는 계정 목록을 출력합니다.

 

로직 자체는 간단한데, 라이믹스에서 로그아웃/로그인시에 세션 처리때문에 구현이 조금 어렵더라고요

 

Rhymix\Framework\Session::login($member_srl, false);
Rhymix\Framework\Session::refresh();

 

저는 별도 로그아웃 과정 없이 이렇게 $member_srl만 스위치 해주었는데 큰 문제가 있을까 싶습니다

 

 

 

아무튼 한밤중에 삘받아서 만들어보았는데요, 여러 계정 번갈아가면서 테스트 용도로 사용하거나, 관리자 아이디와 일반 유저 아이디를 번갈아가면서 사용할 때 유용하게 사용될거 같습니다.

 

(특히 다중 계정 이용해서 사이트 북적북적하게 만들어보려는 관리자님들도 사용하기 좋겠네요 ㅋㅋ)

 

 

 

+) 딱 하나 우려되는건 쿠키 탈취로 인한 계정 해킹인데.. 서버쪽에서 할 수 있는건 다 해준거 같고, 클라이언트 쪽에서 해킹당하는거면 어쩔수 없죠..

JWT도 똑같은 원리인데 해킹 소리 안들리는거 보면 괜찮은거 같기도 하고요

리버스

profile
모듈 제작하는 현역 대학생 리버스입니다!

== 판매중인 모듈 ==
미션] https://xetown.com/thirdparties/1511787
길드] https://xetown.com/thirdparties/1387146
  • profile

    (?)XETwon에서 이모듈을 싫어합니다 (참고로 여기는 다중계정 금지입니닼ㅋㅋㅋㅋ)엌ㅋㅋ

  • profile profile
    어지간해서는 다중계정을 만들지 않죠 ㅋㅋ

    저도 개발할때 말고는 사용할 일이 없을거 같긴한데.. 사이트 내부에서 다중계정을 장려하는건 뭐하는 사이트일지 좀 궁금해지네요 ㅋㅋ
  • profile profile
    트위터가 저렇게 지원해요
  • profile profile
    트위터가 다중 계정을 지원하는군요
    처음 알았네요
  • profile profile
    트위터나 다른 SNS들은 마케팅의 이유라던지 기타 이유에 의해 다중계정을 지원하는 경우가 많죠.

    최근 인스타그램도 그렇게 지원하고 있었고요 ㅎㅎ

    보통 SNS들은 다중계정은 다들 지원해주는 추세로 변화되고 있고 유튜브도 그렇게 바뀌는것 같네요 ㅋㅋㅋ (저두 계정을 매번 바꾸긴 해서..)
  • ?
    저걸 관리자만 사용할 수 있게
    이런식으로도 쓸 수 있나요?
  • ? profile

    어차피 스킨단에서 직접 출력해줘야 하는거라 관리자만 출력하게 조건 걸어주면 되겠죠?
    저도 실 운영 사이트에 적용한다면 그렇게 사용할 예정입니다.

     

    +) 아 생각해보니 관리자만 출력하게 한다면, 일반 계정으로 스위칭하면 다시 관리자 계정으로 돌아올 수가 없네요 ㅋㅋ

    뭐 특정 member_srl만 쓸 수 있다 이런식으로 제한걸면 가능하겠네요

  • profile ?
    앗ㅋㅋㅋㅋㅋ
    지금 저 사이트 직접 가입해서 보니까 회원정보에서 저 부분을 세팅할 수 있는게 아닌가요?

    +유튜브의 계정 전환이랑 상당히 유사해서 재밌네요ㄷㄷ
  • ? profile

    로그인 한 기기에서만 컨트롤이 가능한거라 딱히 설정메뉴를 제공하고 있지는 않습니다. (하려면 할 수 있는데, 리소스를 더 투자하고 싶지는 않네요)

    특히 저 사이트에 적용할 모듈도 아니고 심심풀이로 만든거라 더 만질거 같지는 않네요 ㅋㅋ

  • profile profile
    등록자체를 관리자한테 권한 부여하고.. 어차피 다중계정에 묶인 부분이 관리자 계정 아래에 같이 있는거니까 특정 계정채크 하는 부분은 그 관리자의 하위 맴버srl을 기준으로 가져오도록 하면 자동으로 완료되지 않을까요?
  • profile profile
    정석적으로 처리한다면 그런식으로 구현이 가능할듯 합니다.
    다만 이 모듈의 원리가 로그인을 하면 기기에 로그인키 쿠키를 저장하는 형식인데, 그렇게 구현하면 관리자 계정 로그인 전에 데이터는 저장되지 않기 때문에 조금 고민이 필요할거 같습니다

    일단은 기능 구현 자체로 만족하고, 나중에 쓸일이 오게 된다면 만들어보도록 하겠습니다 :)
  • profile
    개발용으로 이런 거 있으면 진짜 좋을 것 같습니다.
    관리자로 로그인했다가 로그아웃했다가 특정그룹 회원으로 로그인했다가 로그아웃 했다가 또 다른 그룹회원으로 로그인... 이게 엄청 귀찮더라구요.
    리버스님은 언제나 신박하십니다요 :D
  • profile profile

    제가 아이디어를 떠올린게 아니라 어제 밤에 쪽지로 개발의뢰가 왔던 건입니다 ㅋㅋ
    정작 비용관련 이야기는 오가지도 않았는데 마침 잠도 안오고.. 해서 혼자 급발진해서 만들게 됐네요 ㅎㅎ


    라이믹스쪽 로그인/로그아웃이 여러모로 빡세서, 의뢰수락전에 테스트만 해보려고 했는데 그냥 하루를 던졌네요

    처음 만들때는 이걸 쓸 일이 있을까..? 싶었는데 만들고 보니 의외로 활용방안이 존재해서 놀랐습니다 ㅋㅋ

  • profile

    JWT의 보안성은 쓰기 나름입니다. 제대로 썼는지 세션보다 좀더 꼼꼼하게 따져봐야 하죠. 개인적으로는 꼭 필요하지 않다면 (아무리 암호화했더라도) 어떤 의미가 담긴 내용을 클라이언트단에서 관리할 것을 기대하지 않는 것이 좋다고 생각합니다.

     

    여기서 "어떤 의미가 담긴 내용"이란 난수생성기로 만들어낸 완벽하게 무의미한 데이터와 대비되는 개념으로, 사실상 난수를 제외한 모든 데이터가 포함됩니다. 의미있는 데이터를 전송한 적이 없다면 그게 안전하게 전달되었는지 걱정할 필요도 없겠죠.

  • profile profile
    rx_autologin같이 그냥 키값 하나만 주고, 세션에서 로그인 데이터를 불러오도록 구성해볼까도 생각해보았으나 당초 목적이 라이트하게 가는거라 이렇게 구성하게 되었네요

    JWT로 구성된 쿠키에 들어가는 내용도 member_srl, login_key(난수, Rhymix Autologin key 생성 로직과 동일), user_id 이렇게 들어가서 최대한 위협이 없게 만들기도 했고요

    클라이언트 기기에 로그인 데이터를 저장한다는게 조금 아쉽기는 하지만 다음부터는 서버단에서 전부 처리하는 것을 목표로 개발해봐야겠네요
  • profile profile

    네, 정석대로 암호화해서 정확하게 쓰기만 하면 어떤 데이터를 넣어도 안전하다고는 하지만, 세션에 비해서 주의할 점이 많은 것이 함정이지요. 내가 챙겨야 하는 부분이 많을수록 실수의 여지도 많은 것이 당연하고요.^^

    인증 용도 한정으로 JWT가 세션보다 나은 점은 서버단에서 state를 관리할 필요 없다는 점, 딱 하나뿐이거든요. 자기들도 페북이나 넷플릭스처럼 대박을 낼 거라고 착각하는 스타트업들이 무차별적으로 도입하고 있는데, 솔직히 동접 100만 명 미만이라면 그냥 redis cluster를 돌리는 게...