2013-09-04 2 views
1

사용자가 내 서비스에 등록한 후 이메일을 통해 등록을 확인하는 사용 사례가 있습니다. 내가 가지고있는 문제는 전자 메일이 계정을 만들기 위해 확인 될 때까지 기다려야한다는 것입니다. (이것은 바꿀 수없는 외부 요구 사항입니다.) 암호를 일반 텍스트로 가져올 수 있도록 어딘가에 저장해야합니다.임시로 사용자 비밀번호 저장

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 해결 방법은 사용자를 인증 할 때까지 암호를 암호화하여 redis에 저장 한 다음 계정을 만들고 redis 항목을 제거하는 것입니다.

이렇게하는 것이 가장 안전하고 안전한 방법입니까?

+0

가 왜 해시 수 없습니다 + 소금 비밀번호를 저장하고 그 값을 저장 하시겠습니까? 제 3 자에게 암호를 제공해야하는 경우 사용자가 암호를 입력했지만 일반 텍스트로 저장하지 마십시오. 사용자가 이메일로 계정을 확인하면 암호의 해시 값 + 소금 값을 사용하여 계정을 만들 수 있습니다. 그런 다음 나중에 인증을 시도 할 때 암호를 입력 한 값과 데이터베이스의 해쉬 된 + 소금 화 된 값을 비교하면됩니다. – bsimic

+0

@bsimic : 중요한 것은 데이터베이스에 암호를 전혀 저장하지 않기 위해서입니다. 또한 사용자는 나를 거치지 않고 외부 시스템에 액세스 할 수 있으므로 다른 시스템에서도 비밀번호가 작동해야합니다. – Falmarri

+0

OAuth 서비스 제공 업체가이 제 3 자에게 기회가 있습니까? 그렇다면 그렇게 할 수 있습니다. 또 다른 옵션은 Open ID (http://openid.net/)와 같은 것을 사용하는 것입니다. 여기서 어디서든 인증을 직접 할 필요는 없습니다. 당신은 OpenID가 어떻게 작동하는지 볼 수 있습니다. http://www.windley.com/archives/2006/04/how_does_openid.shtml – bsimic

답변

2

변경 프로세스 : 암호를 미리 입력하지 않고 주소 확인을 먼저 수행하십시오.

등록 양식은 전자 메일 주소 만 사용하고 링크의 전자 메일 주소로 토큰을 보냅니다. 일반적으로 같은 : nnn은 타임 스탬프가 그 후에 링크가 쓸모가되고 xxx는 그래서 당신은 인증 할 수 있습니다 HMAC(serversecret, email+timestamp)입니다

http://.../[email protected]&expires=nnn&sig=xxx 

.

링크를 따라 가면 비밀번호 입력란 및 기타 세부 정보가있는 가입 페이지가 표시됩니다.

(보너스 :. 당신이 그렇게 링크 다음, 하나가있는 경우 비밀 번호를 분실 여행에 대해 동일한 프로세스를 사용하거나 당신에게 가입 페이지 또는 복구 - 계정 페이지를 얻을 수)

+0

serversecret은 조용해야합니다. 그렇지 않으면 그러한 URL은 위조 될 수 있으며 패스워드에서 가장 약한 링크가 될 수 있습니다 손질. – martinstoeckli

+0

나는 이것에 대해 생각해 보았지만 사용자가 확인한 후에 암호를 입력 할 필요가 없다고 생각합니다. – Falmarri