2013-02-21 6 views
4

저는 REST 서버와 클라이언트를 구축하고 있습니다. 이제 제 3 자의 oauth2 인증을 내장해야합니다. 지금은 사용자를 서버로 안내하고 서비스에 인증하도록 한 다음 다음과 같이 클라이언트로 리디렉션합니다.타사 OAuth2와의 REST 서비스

클라이언트 : 인증되지 않음 -> 서버 -> 타사로 리디렉션 -> 리디렉션 서버로 이동 -> 응용 프로그램으로 리디렉션.

그런 다음 쿠키를 withCredentials 및 CORS를 사용하여 보내고 사용자를 식별하기 위해 클라이언트에 쿠키를 저장합니다.

이제 내 문제는 토큰이 만료되었을 때 재 인증으로해야합니까? 클라이언트와 서버는 json을 통해서만 통신하기 때문에 전체 인증 프로세스를 다시 시작해야하므로 사용자는 앱에서 모든 상태를 잃게됩니다. 누구든지이 문제를 해결하는 방법에 대한 제안이 있습니까? 클라이언트 쪽에서 인증을 수행하고 서버 또는 무언가에 액세스 토큰을 저장하는 것이 더 좋습니까?

답변

1

OAuth를 얻는 올바른 방법은 access_token입니다. access_token은 일시적이므로 만료 될 수 있습니다.

난 당신이 중 하나를 할 수 있다고 생각 :

  1. 확인 (당신이 토큰을 얻기 위해 사용) 인증 서버 옵션을 제공하는 경우가 access_token은을 사용하여 더 긴 기간 토큰을 얻을 수 있습니다. 이는 OAuth 2 사양에서도 권장됩니다.

  2. 세션을 사용하지 않고 사용자 상태를 저장하십시오.

+0

그렇기 때문에 더 나은 해결책은 없습니다. 더 긴 토큰을 얻는다고해서 실제로 문제가 제거되는 것은 아니지만 재 인증 프로세스가 빈번하지 않게됩니다. 물론 모든 상태가 이미 클라이언트 측이므로 상태 저장은 물론 가능하지만 어려운 문제입니다. 아마도 재 인증 흐름에 window.open()을 사용할 생각 이었지만 최적이 아닙니다. 어때? iframe은 어때? – cpojer

+0

상태를 저장하는 것은 그리 어렵지 않습니다. 앱에 사용자의 상태 정보를 저장할 수 있습니다. 나는 iframe을 시도하지 않았지만 시도할만한 가치가있다. –

+0

그것은 우리가 어떤 종류의 국가에 대해 이야기하는지에 달려 있습니다. 내 말은 응용 프로그램의 현재 상태를 말하며 사용자가 마지막으로 클릭 할 때까지의 상태입니다. 응용 프로그램이 충분히 복잡하다면 이것은 분명히 사소한 문제는 아닙니다. – cpojer