TheOpenCloudEngine / uEngine-iam-monolithic

One of member of OCE's microservices-architecture components. Identity & Access Management conforming to OAuth2 and JWT spec and provides Web GUI for managing organizations, users, and permission scopes. REST APIs allows your application easily converted to MSA-style services accessing underlying back-end services through token-based security.
1 stars 3 forks source link

회원가입, 비밀번호 변경, 비밀번호 분실 사이클 지원 #9

Closed SeungpilPark closed 7 years ago

SeungpilPark commented 7 years ago

App 에서 관리자가 사용자를 추가하는 경우는 기존 /rest/v1/user 를 통해서 진행할 수 있지만, 이메일을 통해 회원가입 및 패스워드 분실 조치를 하기 위해서는 아래 로직을 따르도록 한다.

한번 만들어놓으면 매번 어플리케이션을 만들 때마다 회원가입 절차를 코딩할 필요가 없어진다.

아래 요청들은 클라이언트 활동에 관련된 것이므로 요청 헤더에 client-key 와 client-secret 이 반드시 포함되어야 한다.

회원가입

1) IAM 에서 클라이언트의 회원가입 이메일 양식 작성.

(양식 작성시 필수값: <a href="{{link}}">)

양식 참조값 : user,client
양식 참조 사용법 예:
   {{user.userName}}
   {{user.email}}
   {{client.name}} ...

2) 회원가입 요청, Client -> IAM

POST /rest/v1/user/signup
Parameter 
  - redirect_url :이메일 확인시 리다이렉트될 App 경로
Body : {
    userName: 필수
    userPassword: 필수
    email: 필수
    locale: 사용자 언어. 옵셔널. (디폴트: en_US).
}

** email 을 유저 pk 로 사용하는 경우 userName 과 email 둘다 같은 값을 주면 된다.

아래의 케이스마다 보내는 body 정보가 다를 수 있음.

3) 회원가입 이메일 전송, IAM -> Mail IAM 에서는 데이터베이스에 유저 정보와 이메일 컨펌 토큰을 signup 버킷에 저장하고, 이메일 발송. 이때, IAM 은 이메일을 다음과 같이 발송.

<a href="{{redirect_url}}?token=이메일 컨펌 토큰"></a> 

4) 유저가 이메일을 확인함. Mail -> Client

5) 이메일 확인자 검증. Client -> IAM

GET /rest/v1/user/signup/verification?token=token

Response: User

6) 이메일 확인자 승인. Client -> IAM

POST /rest/v1/user/signup/accept
body: {
   token: token
}
response: User

IAM 에서는 수락시 signup 버킷의 유저정보를 User 테이블에 저장.

비밀번호 변경

1) Client -> IAM

PUT /rest/v1/user/repassword
Body : {
    userName: 필수
    beforePassword: 필수
    afterPassword: 필수
}

비밀번호 분실

1) IAM 에서 클라이언트의 비밀번호 분실 이메일 양식 작성.

(양식 작성시 필수값: <a href="{{link}}"></a>)

양식 참조값 : user,client
양식 참조 사용법 예:
   {{user.userName}}
   {{user.email}}
   {{client.name}} ...

2) 비밀번호 분실 이메일 요청, Client -> IAM

POST /rest/v1/user/forgot

Parameter 
  - redirect_url :이메일 확인시 리다이렉트될 App 경로

Body : {
    userName: 필수
}

** userName 에 해당하는 사용자의 email 프로퍼티로 발송이 된다.

3) 비번변경 이메일 전송, IAM -> Mail IAM 에서는 데이터베이스에 유저 정보와 이메일 컨펌 토큰을 forgot 버킷에 저장하고, 이메일 발송. 이때, IAM 은 이메일을 다음과 같이 발송.

<a href="{{redirect_url}}?token=이메일 컨펌 토큰"></a> 

4) 유저가 이메일을 확인함. Mail -> Client

5) IAM 에 이메일 확인자 검증. Client -> IAM

GET /rest/v1/user/forgot/verification?token=token

Response: User

6) 비밀번호 변경

PUT /rest/v1/user/forgot/accept
Body : {
    token: token
    password: 신규비밀번호
}