write:authentication(목록 조회만 하려면 read:authentication) 권한이 있는 콘솔 세션이 필요합니다. 최종 사용자 토큰이나 인증 API 키는 사용하지 않습니다. 예시에서 MANAGEMENT_BASE는 다음과 같습니다.
가져오기 방식 두 가지
파일 가져오기
1. 업로드
각
keep_* 스위치는 false를 보내지 않으면 true입니다. 호출이 성공하면 202와 작업이 반환됩니다. 애플리케이션은 동시에 최대 5개의 업로드 파일을 보관할 수 있습니다.
2. 드라이 런 결과 확인
모든 업로드는 드라이 런으로 시작합니다. 드라이 런은 모든 사용자를 검사하지만 아무것도 기록하지 않습니다.GET import-jobs/{id}/를 주기적으로 호출하여 확인하세요.
드라이 런이 실패하면 오류 목록이 표시됩니다. 파일을 수정한 뒤 다시 업로드하세요.
3. 가져오기 시작
POST import-jobs/{id}/start/는 드라이 런에서 검사한 내용을 가져오며 202를 반환합니다.
- 사용자는 1,000명 단위 배치로 가져옵니다. 각 배치는 독립적으로 커밋됩니다.
- 애플리케이션당 한 번에 하나의 가져오기만 실행됩니다(그렇지 않으면
import_running). - 중단된 가져오기는 마지막으로 커밋된 배치 다음부터 이어서 진행됩니다.
- 이미 가져온 사용자는 건너뛰므로 같은 파일을 다시 실행해도 됩니다.
- 가져오기를 시작한 사람은 완료되거나 중단될 때 이메일을 받습니다.
배치로 가져오기
요청당 최대 1,000명을 보낼 수 있으며,idempotency_key는 최대 100자입니다.
- 드라이 런은
200과 결과를 반환하며 아무것도 기록하지 않습니다. dry_run: false로 보내면 성공한 가져오기는201을 반환합니다. 오류가 하나라도 있는 배치는400을 반환하며 아무도 가져오지 않습니다.- 같은 키로 이미 커밋된 요청을 반복하면 기록된 결과를 반환합니다. 같은 키에 내용이 다르면
400 {"idempotency_key": "different_payload"}를 반환합니다. - Firebase 파라미터는
firebase객체에 넣습니다:{signer_key, salt_separator, rounds, mem_cost}. GET imports/는 커밋된 배치를 나열합니다.
파일 형식
JSON
사용자 배열이거나,users에 배열을 담은 객체입니다.
CSV
단일 값 열은 JSON과 같으며, 여기에google_id, apple_id, github_id, microsoft_id, microsoft_tenant_id, organization_slug, organization_name, organization_role 열이 추가됩니다. 여러 조직에 속한 사용자는 조직마다 한 행을 차지합니다.
중복 및 기존 계정
- 이메일이 같은 행은 한 사람으로 합쳐집니다. 내용이 완전히 같은 행은 중복으로 집계합니다. 연결, 조직 또는 인증 앱이 더 많은 행은 병합됩니다.
- 한 사람에게 서로 다른 비밀번호 해시, 인증 앱 시크릿 또는 조직 역할이 두 개 이상 있으면 오류입니다. 두 사람이 같은
external_id또는 제공자 subject를 주장하는 경우도 오류입니다. - 같은 이메일의 계정이 이미 있고 이전 가져오기로 만들어진 계정이라면 해당 사용자는 건너뜁니다(
already_imported). 사용자가 직접 가입한 계정이라면identity_conflict오류가 발생합니다. 가져오기는 기존 계정을 절대 변경하지 않습니다.
비밀번호
Firebase 파라미터는 암호화되어 저장되며, 해당 애플리케이션에서만 사용됩니다. 그 밖의 형식이거나 비용이 위 제한을 넘는 경우에는 해당 사용자가 새 비밀번호를 설정해야 합니다. 사용자가 처음으로 성공적으로 로그인하면 Didit은 해당 비밀번호를 Didit 고유 형식으로 다시 저장합니다.
사용 가능한 비밀번호가 없는 사용자
해시가 없거나 지원되지 않는 해시를 가진 사용자가 비밀번호로 로그인을 시도하면 일반적인 비밀번호 불일치 응답을 받습니다. 또한 Didit은 새 비밀번호를 설정할 수 있는 링크를 이메일로 보냅니다(유효 기간 30분, 하루 최대 1회). 이 링크는 이메일이 인증되어 있고, 계정이 차단되지 않았으며, 비밀번호 로그인이 켜져 있는 경우에만 발송됩니다. 결과에서reset_required는 사용 가능한 비밀번호가 없는 사용자 수를 나타냅니다. reset_emails는 그중 인증된 이메일을 가진 사용자 수입니다. 이 방법으로 연락할 수 있는 사용자는 이들뿐입니다. 이메일이 인증되지 않은 사용자는 비밀번호로 로그인할 수 없습니다. 이메일 코드 방식을 활성화했다면 이메일 코드로는 로그인할 수 있습니다.
소셜 연동, 인증 앱 및 조직
- 소셜 연동은 애플리케이션에 이미 구성된 제공자에 대해, 현재 클라이언트 ID 기준으로 유지됩니다. 이후 로그인할 때는 이메일 인증이 필요하지 않습니다. Google과 GitHub의 subject는 전역적으로 유효합니다. Apple의 subject는 개발자 팀별로, Microsoft의 subject는 앱 등록별로 구분됩니다. 따라서 기존 플랫폼이 같은 팀이나 등록 정보를 사용한 경우에만 해당 연동이 일치합니다. 구성되지 않은 제공자에 대한 연동은
social_unavailable로 집계되며 가져오지 않습니다. - 인증 앱(TOTP 비밀 키: SHA-1, 6자리, 30초)은 암호화되어 저장됩니다. 가져온 사용자는 이를 2단계 인증 수단으로 사용해야 합니다. 이들에게는 복구 코드가 발급되지 않습니다.
- 아직 존재하지 않는 조직은 슬러그를 기준으로 생성됩니다.
- 패스키는 가져올 수 없습니다. 패스키는 기존 로그인 도메인에 속하므로, 사용자는 Didit으로 로그인한 뒤 새 패스키를 추가해야 합니다.
결과
모든 시험 실행, 배치 및 작업은 같은result를 반환합니다.
응답에는 비밀번호 해시, 솔트, 인증 앱 비밀 키, 필드 값이 절대 포함되지 않습니다.
전환하기 전에
샌드박스 애플리케이션에서 다음을 테스트하십시오.- 가져온 각 비밀번호 형식으로 로그인,
- 사용 가능한 해시가 없는 사용자의 새 비밀번호 설정 이메일,
- 가져온 사용자의 소셜 로그인과 인증 앱 코드,
- 같은 파일을 두 번 실행하는 경우.
vendor_data가 인증 및 거래에서 사용하는 값과 일치하는지 확인하십시오.