최종 목적은 보안카드 대신 스마트폰을 찍고 입장하는 출입문을 만드는 것입니다.
안드로이드 폰의 경우 그냥 폰에 교통카드를 세팅하고 RFID리더 + 아두이노 + 서버 정도로 해결이 가능합니다만
역시나 문제는 아이폰이더군요...
물론 아이폰에 RFID스티커 하나만 붙이면 간단합니다만.....
그래도 혹시나 스티커 없이 가능한 방법을 열심히 생각한 끝에,
텔레그램을 연동하면 가능할것 같다는 생각이 들었습니다.
텔레그램 봇을 만들게 되면,
https://t.me/<봇고유값>_bot?start=<추가고유값>
이런 형태의 URL을 사용가능합니다.
이 URL에 특정 기기가 접속하게 되면 기기에 설치된 텔레그램이 실행되며,
동시에 저 봇한태 "/start <추가고유값>" 이라고 텔레그램 채팅을 보내주는 기능을 가진 URL입니다.
그래서 서버에 봇 리스너를 세팅하면, 서버는 대화를 건 텔레그램 계정이 누군지 구분할 수 있죠.
이제 서버는 말을 건 계정이 출입이 허용된 계정인지 확인하고 문을 열어주는 겁니다.
그렇다면 아두이노에 NFC모듈을 달고,
NFC모듈은 NFC 테그 에뮬레이트 모드로 세팅하며
위의 URL을 가진 NFC테그로 세팅하는겁니다.
이제 텔레그램에 로그인 된 아이폰으로 에뮬레이트된 NFC테그를 찍으면,
아이폰은 위 URL에 접속할 것이고, 텔레그램앱이 실행되며 체팅이 보내진걸 웹서버가 처리할 수 있는게 아닐까요?
그리고 NFC의 URL은 아주 짧은 간격... 예를들어 1~3초 간격으로 URL을 계속 바꾸는겁니다.
URL의 봇고유값은 그대로 두고 뒤에 추가로 넣을수 있는 추가 고유값만 랜덤하게 새로 바꾸면서
새로 바꾼 고유값과 바꾼 시간을 서버에 기록해 두는거죠.
서버는 텔레그램 대화를 건 계정이 누군지 뿐만 아니라, 저 고유값이 언제 만들어졌는지 까지 체크해서
약 10초 이내에 생성된 URL인 경우에만 출입문을 열어주게 하는겁니다.
이렇게 하면 추가적인 아이폰 앱 개발 없이,
아이폰에 NFC테그 기능을 켜두고 텔레그램 로그인을 해두는 것만으로도
아이폰으로 출입 인증이 되는 시스템이 가능할 것 같습니다.
혹시 아이폰에서 테그를 찍어도 바로 URL이 열리지 않고 이 URL을 정말 열겠냐고 눌러줘야 하거나
텔레그램이 바로 실행되지 않고 실행 허용을 눌러줘야 할 수는 있겠습니다만,
그래도 그냥 폰을 찍고 들어가는것과 거의 유사한 출입 인증 시스템을 만들수 있지 않을까요?
아마도 이렇게 하면 보안상 빈틈없이 인증가능할것 같은데요.
혹시 제가 놓친 부분이 있을지 걱정이네요.
어차피 서버가 있다면 서버에 웹페이지를 하나 만들고 해당 웹사이트에 로그인을 하는게 낫지 않나요?
텔레그램을 거칠 이유가 없어보입니다.
앱 개발을 안하신다니 이건 어쩔 수 없겠지만,
ble 로 출입문 개방하는 시스템을 써봤는데 이것도 나쁘지 않더라구요
텔레그램의 경우 로그인 세션을 텔레그램 앱 자체가 유지하고 있는 방식이고
여기가 원래 보안으로 유명한 곳이다 보니 좀더 낫지 않을까 생각했습니다.
결국 귀찮은거죠 ㅋㅋ 따로 아이디 패스워드 만들고 관리하는것도 말이죠 ㅎㅎ
텔레그램의 경우 앱에 로그인하면 일부러 로그아웃 하기 전까진 거의 영구히 로그인상태로 유지되는거로 알고 있고
비밀번호 잊어버렸을떄 SMS인증으로 다시 찾는기능같은것까지 전부 텔레그램이 구현해둔걸 활용하는 차원으로는 머 나쁘지 않아보입니다 ㅋㅋ
뭣보다 쿠키 유효시간을 길게주면 모바일/PC상관없이 로그인이 계쏙 유지되니까요.. 서버에서 모바일 감지하는것도 UA기반이라 정확치 않은데다
뭔가 PC의 경우엔 쿠키 유효시간이 무조건 세션(0초)이어야 안전할 것 같다는 생각이 들어서요 ㅋㅋㅋㅋ
왜 브라우저 껐는데 다시 켜도 로그인 상태냐고 물어보면 난감해서....
그래서 앱 열어서 버튼 한번 누르고 찍고 들어갑니다 ㅠ
아뇨 제가 본 방법은 도어락쪽에서 신호를 계속 바꿔가며 쏘고 있고, 그걸 앱에서 받아서 서버로 통신, 열어주는 방향이긴 했습니다
아무 인터렉션 없이 들어가고 싶다면 안되는 기능이긴 하겠네요....
홈앱의 도어락 기능이 다른 홈 액세서리처럼 리버싱된 api 가 공개되어있다면 그걸로 만들면 더 좋을텐데....
https://github.com/kormax/apple-home-key
이런게 있긴 하네요