2011-12-15 2 views
0

PHP에서 OAuth와 같은 것을 구현하려고합니다. 사용자가 개인 자원을 사용할 수 있도록 사용자에게 토큰을 제공하고 싶습니다. 모든 사용자는 먼저 자신의 이메일과 비밀번호로 로그인하고 "n"분 동안 유휴 상태가 아니면 영원히 유효한 고유 토큰을 얻어야합니다. 따라서 "n"분 동안 요청이 없으면 토큰을 삭제해야합니다. 토큰은 사용자가 개인 자원에 액세스하는 데 사용됩니다. 내가 이름 user_tokens의 DB 테이블을 유지하는 것입니다 그리고 그들은 자신의 사용자 이름과 암호 고유 한 토큰 항목으로 로그인으로이 생성 될 것이다PHP 세션과 고유 한 사용자 토큰

나는이 그대로 일을 생각할 수

한 가지 ... . 마지막으로 액세스 한 시간 소인이 설정되고 사용자는 고유 토큰을 응답으로 제공합니다. 이제 토큰을 사용하여 사용자의 개인 자원에 액세스 할 수 있으며 토큰이 필요한 모든 요청을 전달해야합니다. 모든 개인적인 요청은 최종 타임 스탬프와 현재 타임 스탬프가 "n"분 차이가 있는지 확인합니다. 그렇다면 파괴 토큰입니다. 그렇지 않으면 요청 된 자원에 응답을 보내고 마지막 시간 소인을 현재 시간 소인으로 설정하십시오.

의미가 있습니까? 아니면 이렇게하는 또 다른 효율적인 방법이있을 수 있습니까?

토큰이 트위터 나 페이스 북이 API에서 반환하는 것과 같아야한다는 점을 추가하고 싶습니다.

+0

은 왜를 재발견하기 위해 노력하고있다 OAuth가 귀하의 필요에 맞는 곳이 어디입니까? –

+0

OAuth를 사용한 적은 한번도 읽지 않았습니다. 그것이 유일한 이유입니다. 나는 이미 알고있는 개념으로이 일을 빨리 끝내기를 원합니다. – Neutralizer

+0

필자는 PHP oauth 라이브러리 (PHP-oauth 또는 PHP 확장)를 구현하기 위해 정말로 가고 싶습니다. 보안을 다룰 때는 기존의 잘 생각한 표준을 사용하는 것이 가장 좋습니다. 당신이 약간의 암호화 버그를 만들 기회는 입증 된 표준을 사용할 때보 다 훨씬 큽니다. 또한 보너스로 고객을 작성하는 것이 더 쉬우 며 OAuth 클라이언트를 재사용 할 수 있으며 다른 개발자는 서비스에 관해 이야기 할 특별한 문서가 필요하지 않습니다. –

답변

0

당신이 디그의 제프 호드 슨에 의해 HTTP_OAuth 배 패키지를 체크 아웃해야 라이브러리를 사용하여 OAuth를 구현하기 위해 찾고 있다면 [1]이됩니다 Oauth [2]와 함께 사용할 데이터베이스 디자인에 관한이 사이트의 좋은 게시물 모음.

나는 당신의 질문에 대해 혼란 스럽다고 생각합니다. 웹 애플리케이션 용 API를 만들거나 사용자 리소스를 보호 할 방법을 찾고 있습니까? API를 만들고 싶다면 반드시 OAuth를 사용해야하며 잘 알려진 라이브러리를 사용해야합니다. 이렇게하면 다음 사항을 확인합니다 :

  1. 다른 개발자는 OAuth를 RFC를 다음과 때문에 API를 사용하는 방법을 알게 될 것이다 [3]
  2. 웹 응용 프로그램 당신은 알게
  3. 안전 훨씬 더 가능성이 높습니다 우수 사례 및 새로운 것들을 배우십시오

당신이 API를 만들고 싶지 않고 사용자 자원을 보호하고 싶다면, 당신은 세션 [4]을 사용하는 것이 안전하다고 생각합니다. 로그인하지 않으면 보호 된 자원에 액세스 할 수 없습니다.

[1] HTTP_OAuth 패키지 : http://pear.php.net/pepr/pepr-proposal-show.php?id=607
[2]의 Oauth 데이터베이스 디자인 : what is the recommended database structure for OAuth Provider
[3]의 Oauth의 RFC : http://oauth.net/
[4] PHP 세션 : http://us2.php.net/manual/en/features.sessions.php

+0

라이브러리없이 OAuth를 구현해야한다고 생각한다면 어떻게해야합니까? – Neutralizer

+0

시간이 충분하고 스펙의 복잡성을 배우고 싶다면 그걸로 말하십시오! 하지만 워크 플로우, 시그니처 생성 및 요청 처리의 세부 사항이 얼마나 까다로울까요? 그렇습니다. 라이브러리를 항상 참고 자료로 사용할 수 있지만 이미 많은 사람들이 라이브러리를 사용했기 때문에 라이브러리가 실제로 안정적이라는 것을 고려해야합니다. – Steve

0

내가 session_id을 사용하기 전에, 토큰을 생성하는 session_regenerate_id를 사용하고 있지만 내가 session_id 사용하여 sessID이 후 나에게 맞는 솔루션이었습니다 renegerating, 값을 변경하지 않을 것을 파악했다. 이제

심지어 같은 사용자가있는 경우지만 다른 sessID로 제어 한 사용자의 세션을 로그 아웃 할 수있는 옵션을 제공 할 수 있습니다 ..

나는 그것이 당신이 찾고있는 정확하게 무엇을 알고하지 않습니다 하지만 그것은 TOKEN에 관한 나의 문제를 해결합니다. 그리고 반복하지 않습니다 ..

참조 : http://br.php.net/manual/en/function.session-regenerate-id.php

관련 문제