- 어떤 플랫폼을 가지고있는 개발자의 가정 어떤 개발자( Mark )는 자신이 개발한 홈페이지( Facebook ) 에서 우리의 DID를 이용한 SSO 서비스를 이용하고싶다. ( 통합 로그인 )
개발자는 DID 사이트에 회원가입 -> 로그인 -> dev -> application 등록 을 해야한다. application 등록에는 appName, appDescription, appImg, host, redirectUri, APIKey 가 있다.
appName = facebook appDescription = facebook에 대한 간단한 설명, 예) 지구상 가장 유명한 SNS appImg = Facebook Logo host = https://www.facebook.com 이다. redirectUri = Login_server로 접근하기 위한 redirectUri APIKey = uuid로 랜덤으로 부여해준다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
- facebook 유저의 입장에 대한 가정 facebook에서 어떤 유저는 facebook 자체의 로그인이 아닌 우리 DID 서비스를 이용하고 싶어한다.
-
유저는 facebook에서 DID 로그인을 클릭한다.
-
facebook이 가지고있는 APIKey가 DID Server에 있는지 가장먼저 조회
- DID회원가입할때 APIKey 주니까 APIKey 는 facebook 개발자가 알고있다
- 어디서 요청을 보냈는지 도메인 따서, 등록해 놓은 DIDapp 의 host와 비교
-
조회가 성공하면 개발자가 DID 사이트에서 설정해놓은 app의 redirectUri로 login_server로 요청을 보내 GET요청으로 DID 로그인 창을 띄운다.
-
user가 로그인을 한다. 만약 아이디가 없다면 DID 회원가입 진행 후 로그인 한다.
-
로그인에 성공하면 facebook 서버로 true응답과 함께 code ( access Token ) 를 발급해준다.
- code는 token을 받기위함 ( uuid )
-
code를 facebook에 보내서 facebook은 DID_Login_server로 요청을 보냄
- login server에서 보내준 code가 맞는지 검증
- jwt로 발급, payload에 유저정보 넣고 발급해줌
-
token을 발급 받았다면 그 토큰을 login_server로 보내서 유저정보 응답받을수 있음
- payload안에 유저정보 있음
- 유저정보를 통해 DB에서 검증
- DB검증 끝나면 컨트랙검증
- 컨트랙에 getUserInfo 함수 실행으로 유저정보 가져와서 siteA로 보냄
-
로그인 한 유저는 Login_server에 connected table에 저장되어 DID 메인사이트에서도 볼수 있음.
-
이제 facebook 에서 그 유저정보들을 가지고 알아서 로그인 할수 있음
-
궁극적인 목표는 우리페이지에 로그인되어있는 유저는 어느페이지든지 우리에게 요청보내면 유저정보를 보낼수 있음
투어칸, www, 새우리, 베네시아 ( 쇼핑몰 ) \
아이디와 pw를 키값으로 던지고 이 정보들은 개인 단말기에만 가지고 있자. 복호화할수 있는키는 나만 가지고있자 ( ㅁㄴ애러ㅐㅂㄷ쟈ㅓ랴대저)
han의 환경
- 한 사람이 아이디를 200몇개 가지고있는 경우가 있다. SSO를 DID를 이용하는이유
- 퍼포먼스.
- 책임회피 - 개인정보에대한 책임회피, 잊어버리고 유출되도 본인책임이다 니 알아서해라. 책임을 최소화
- 포인트연동에 대한 가능성\
- 쇼핑몰 페이칸월렛 투어칸 새우리협동조합
총 정리
-
페이칸월렛, 베네시아(쇼핑몰) 새우리협동조합 이렇게 세개가 있다. ( 투어칸은 아직 런칭안함 )
-
각각 서비스들에서 한 사람이 여러개의 계정을 가지고있는 유저들이 많다. 많게는 700개가 넘음..
-
통합 로그인 시 각 하나의 아이디들로만 통합 시킬 수 있음.
-
A 라는 유저가 베네시아에 a,b 아이디와, 페이칸월렛의 a1,b1의 아이디가 있다면 a,a1(a,b1 등등)으로 합칠 수 있음 ( 통합로그인 )
- DID 로그인 후 user에서 내가 연동되어있는 플렛폼이 어디인지 보여야하잖아 ?
- 각 플렛폼들 기존에 가입되어있던 아이디의 포인트도 끌어와야하잖아 ?
- 연동되어있는 플렛폼의 id, 포인트 얼마인지, 또 다 합친 포인트가 얼마인지
-
유저들이 사용하는 각 사이트들의 포인트는 사이트들이 가지고 있음
- 그럼 DID 백에서 각 사이트들에게 그 유저 포인트 얼마있는지를 요청해야되나 ?
-
그걸 백에서 각각 조회 후 컨트랙으로 종합
전체적인 틀
- 사용하던 베네시아, 페이칸월렛 등에 플랫폼에서 각 아이디들이 있음
- 그걸 통합하려면 DID에서 회원가입 => 로그인 해야함
- 로그인 하면 내가 어디에 연동되어있는지, 또 얼마의 포인트가 있는지 보여짐
- 연동하고 싶다면 addApp 누름,
- 연동하고자하는곳을 select창으로 고를수 있게함, 선택 후 아이디 비번 입력,
- 본인 확인 거침 ( 실제로 그 사이트에 자기 id, pw가 맞는지 검증단계)
- 검증을 마치면 연동이 되면서 DID에서 연동되어있는 사이트가 보임 ( 포인트 포함 )
유저 입장
-
플랫폼에서 원래 있던 아이디로 로그인을 진행
-
로그인이 완료되면 DID로그인하기 (DID 인증하기) 클릭 ( 첫등록때만, 추후엔 바로 통합로그인하기 만 누르면 됨 )
-
첫 등록때 DID 로그인(인증) 을 누르면 redirectUri를 통해 DID_Login 창 나옴,
-
로그인 성공하면 그 플랫폼에 유저정보가 들어있는 토큰 제공
- 이후 DID 쪽에서는 그 user가 현재 연결되어있는 앱들이 뭔지, 또 그 앱의 포인트가 얼마있는지를 알수 있어야한다.
- DB와 컨트랙에 그 정보를 등록,
-
다음에 유저가 로그인 할때는 DID 로그인하기만 누르면 연동되어있는 아이디의 포인트들이 합쳐져서 볼수 있음
-
따로 보여져서 어느사이트에서 얼마를 쓸것인지도 볼수있음 ( 선택사항 )
-
유저가 DID에 회원가입하면 DB에 userId, userCode가 입력됨,
-
입력 후 컨트랙에 mapping(string=>uint256) _point;
-
여기서 string은 id, pw, SALT 합친 해쉬 ( 이건 임시방편, 수정예정 )
-
로그인 시 isLogin 함수 실행, true값 떨어지면 로그인 성공