2016-10-10 1 views
1

나는 우리의 웹 페이지 또는 네이티브 앱을 통해 로그인하는 일반 최종 사용자가 사용하는 하나의 공개 클라이언트와 우리의 관리 시스템을위한 하나의 기밀 클라이언트를 가지고 있습니다. 두 가지 모두 두 개의 JWT, 한 개의 액세스 토큰 및 한 개의 새로 고침 토큰을 발행합니다.스프링 oAuth2 impl을 사용하면 refresh-token grant 동안 액세스 토큰의 범위를 "다운 그레이드"할 수 있습니까?

공개 클라이언트은 관리자 권한을 부여 할 수 없습니다. 액세스 토큰은 수명이 짧으며 새로 고침 토큰의 수명은 무한합니다.

기밀 클라이언트은 관리 범위를 발행 할 수 있습니다. 액세스 토큰은 수명이 짧으며 새로 고침 토큰은 24 시간 동안 유효합니다.

스프링 보안과 oAuth2 구현을 사용하여 새로 고침 토큰이 만료되면 관리자를 다운 그레이드 할 수 있습니까? 즉, 사용자가 24 시간 동안 로그인하면 사용자는 완전히 로그 아웃되지는 ​​않지만 다음 로그인에서는 일반 사용자 액세스를위한 하나의 액세스 토큰과 해당 액세스 레벨의 일치하는 새로 고침 토큰 하나를 두 가지 새 JWT로 가져옵니다. 나는 봄 보안 프레임 워크에서 사용자 정의 방식으로 토큰 만기를 처리 할 수있는 몇 가지 종류의 훅을 찾고 있다고 생각한다.

답변

1

내게 조금 혼란스러워하는 문장이 있지만, 다른면에 대해 자세히 설명하고 싶었 기 때문에 주석에 맞지 않았습니다.

은 ... 사용자는 완전히 그가 두 개의 새로운 JWT의, 하나의 액세스 토큰 일반 사용자 액세스를위한 하나 그 액세스 수준에 대한 새로 고침 토큰을 일치를 얻을 다음 로그인에 로그 아웃하지만 되지 않습니다.

다음 로그인시 의 의미는 무엇입니까?? 내 혼란은 여기에 목표가 사용자를 로그 아웃하지 않는다면, 이 다음 로그인이되지 않는다는 것입니다. 이것은 새로 고침 토큰 만료가 거의 끝날 때까지 다운 그레이드 요청을하고 여전히 유효한 새로 고침 토큰을 사용하여 더 적은 권한으로 새 토큰 쌍을 얻으려는 것을 의미 할 수 있습니다.

OAuth 사양에 따라 새로 고침 토큰 요청을 수행하고 서버에 현재 가지고있는 것보다 작은 범위의 액세스 토큰을 요청할 수 있습니다. 그러나 새 새로 고침 토큰이 반환되면 해당 토큰은 요청에 포함 된 새로 고침 토큰과 완전히 동일한 범위를 가져야합니다.

개인적으로,이 시나리오 내가 대신 사용자가 관리자 하고 실제로 지난 24 시간에서 자신의 자격 증명을를 제공해야하는 관리자와 관련된 작업을 수행하기 위해 다음 사항을 확인 토큰을 다운 그레이드의 고려할 것입니다. 특정 사용자가 실제로 자격 증명을 제공하여 로그인을 수행 한 날짜와 시간을 추적 한 다음 해당 값을 기반으로 관리자 작업을 인증함으로써이 작업을 수행 할 수 있습니다. 이렇게하면 기밀 클라이언트에 대한 새로 고침 토큰의 수명을 늘리고 권한있는 작업을 수행하고 현재 토큰이 충분히 최신 상태가 아닌 경우에만 다시 로그인하도록 할 수 있습니다.

마지막으로, 여전히합니다 (보안 고려 사항에 초점을 섹션) refresh tokens의 주제에 ... 당신은 내가 있으리라 믿고있어 대중 클라이언트의 웹 애플리케이션은 브라우저 기반의 자바 스크립트 응용 프로그램의 말할 때.이것이 올바른 경우 일반적으로 새로 고침 토큰이 수명이 오래 (경우에 따라 만료되지 않는 것 같습니다) 브라우저가 안전하게 저장할 수 없으므로 이러한 응용 프로그램에 새로 고침 토큰을 사용하지 않는 것이 좋습니다. 이로 인해 공격자가 토큰의 유효 기간 동안 응용 프로그램에 액세스 할 수있게하는 누설 가능성이 높아집니다. 이 보안 고려 사항을 적용 할 수없는 다른 제약 조건이있을 수 있지만 그럼에도 불구하고주의를 기울이고 싶습니다.

+0

"다음 로그인"을 사용하면 실제로 "다음 백엔드와의 상호 작용"에 대해 미안합니다. 나는 새로 고침 토큰의 범위를 변경할 수 없다는 사실이 정말로 내 질문에 답하는 것 같다. 관리자 상호 작용이 너무 많지 않으면 제안서가 좋습니다. 그런 다음 분산 인증의 이점을 잃어 버리고 계정 서비스의로드가 증가합니다. 다시 세션 캐시로 끝날 수 있습니다 ... 새로 고침 토큰 패턴을 사용하지 않는 경우 사용자가 JWT에 로그인 한 상태로 유지하면서 토큰 해지를 계속할 수 있습니까? 이름 + PW로 로그인 한 사용자를 어떻게 차단할 수 있습니까? –

+1

베어러 토큰 (자체 포함 JWT)을 사용하는 것에 대한 단점 중 하나는 토큰 취소가 더욱 복잡해지기 때문에 RFC 7009에서는 이러한 상황에서 인증 서버와 리소스 서버 간의 백엔드 상호 작용을 사용하여 즉각적인 액세스 토큰 취소. 나는 그 상호 작용을 다루는 표준이 있다고 생각하지 않는다. –

관련 문제