owned this note
owned this note
Published
Linked with GitHub
# 상세 스펙
- 멘토님 comment
웹의 경우 자료 찾기가 쉬워 스펙을 좀 더 상세하게 하였고,
앱의 경우 swift ui의 자료가 빈약하게 있으므로 좀 스펙을 여유있게 잡았습니다.
## 공통 참조 페이지
- [RFC 6238 - TOTP: Time-Based One-Time Password Algorithm](https://tools.ietf.org/html/rfc6238)
- [google/google-authenticator](https://github.com/google/google-authenticator/wiki/Key-Uri-Format)
<br>
# === 웹 ===
## 회원가입 페이지
- step 1
- id(중복가입 확인)
- password(8자 이상, 숫자, 특수문자 포함 구현)
- email(중복가입 확인, 무료 메일 발송 서비스 이용)
ex : [NCP CloudOutboundMailer](https://www.ncloud.com/product/applicationService/cloudOutboundMailer) 1000건까지 무료
- 이름, 생년월일, 전화번호, reCAPTCHA v3 적용
- step 2
- 가입완료 후 totp등록 페이지로 전환 qr code를 이용하여 totp등록
(개발한 프로젝트 앱, [Twilio Authy](https://apps.apple.com/kr/app/twilio-authy/id494168017), [Google Authenticator](https://apps.apple.com/us/app/google-authenticator/id388497605) 사용가능해야함)
- step 3
- email 검증 후 사용자 등록 완료 처리
<br>
## 로그인 페이지
- step 1
- id, password, reCAPTCHA 입력 후 1차 로그인 완료
- step 2
- totp 입력 페이지로 전환 유효한 값이 입력되면 내 정보 페이지로 리다이렉트
## 내 정보 페이지
- 내 개인정보 출력
- 내가 접속했던 브라우저/디바이스 이력 표시
- 내가 접속했던 브라우저/디바이스 유효한 로그인 정보 무력화 기능 (질문 사항)
- 내 기인정보 수정 => 비밀번호만 물어보고 유효하면 진입
## 아이디 찾기
- 유효한 email과, 이름, 생년월일이 입력될 경우 메일로 id 전송, reCAPTCHA 적용
## 비밀번호 찾기
- 유효한 id, 이름, 생년월일, totp정보가 입력될 경우 메일로 비밀번호 변경 링크 제공, reCAPTCHA 적용
- 메일로 전송된 비밀번호 변경 페이지
- 새로운 비밀번호(비밀번호 입력폼, 검증폼) 과 유효한 totp정보가 입력될 경우 변경 처리
## 웹 공통
- 사용할 domain( domain 발급 또는 사용할수 있는 domain에 적용 ), ssl 인증서 발급해서 사용 (인증서는 무료로 발급 가능 ([Let's Encrypt - 무료 SSL/TLS 인증서](https://letsencrypt.org/ko/))
[여기 만화가 이해하기 편할거 같아요 ](http://wiki.gurubee.net/display/SWDEV/SSL+%28TLS%29)
- tls는 [Qualys SSL Labs](https://www.ssllabs.com/)에서 A grade로 설정
[SSL Server Test: www.google.com (Powered by Qualys SSL Labs)](https://www.ssllabs.com/ssltest/analyze.html?d=www.google.com&s=216.58.195.68&hideResults=on)
## web login : form login
- csrf에 대한 방어 적용 ( express의 csrf, session middle ware사용금지, 미들웨어 구현 )
- iOS app 호출시 csrf적용 제외
(Why?)
- multi device/web login 가능 및 사용자가 특정 device/web의 login 만료 가능
- 회원 가입 / 로그인에는 reCAPTCHA v3 적용
- bcrypt를 이용 password 처리 및 개인정보(이름, 전화번호, 주소 등) aes-256-cbc 적용하여 db에 입력
<br>
# === 공통, 협업 사항 ===
## 앱/웹 공통
- totp app의 totp정보의 백업 api 설계 및 적용
- app로그인 등의 인증이 필요할 경우
[RFC 7617 - The 'Basic' HTTP Authentication Scheme](https://tools.ietf.org/html/rfc7617) http basic 인증처리
<br>
# === 앱 ===
- swift UI사용 IOS 14이상 프로젝트 세팅
- 앱 기동시 face id, touch id등 바이오 인증 없을 경우 pincode입력
- app인증은 http basic
[RFC 7617 - The 'Basic' HTTP Authentication Scheme](https://tools.ietf.org/html/rfc7617)
- AVFoundation -> qr code read
- totp 정보의 서버 백업 가능하도록 필요 api 설계
- twilio Authy에서는 백업 허락 버튼을 누르면 바로 백업이 되도록 했습니다. 그런데 이렇게 해도 문제가 안되는지 궁금합니다.
- totp 정보는 서버 또는 기타 어떠한 상황에서도 풀리지 않게 설계되어야 함
- 앱의 상태 보존 및 처리는 아래 내용에 기반하여 작성
[Apple Developer Documentation](https://developer.apple.com/documentation/swiftui/state-and-data-flow)
- 외부 api 통신은 아래 내용에 기반하여 작성
[](https://developer.apple.com/documentation/swiftui/managing-model-data-in-your-app)
