Owin Oauth2를 사용하여 단일 페이지 응용 프로그램 (AngularJS + .Net MVC Json Rest API)의 인증 흐름을 개발 중입니다. 같은).RefreshToken을 취소하고 Oauth2에서 AccessToken을 동시에 무효화하는 방법
무명 상태를 유지하고 토큰이 쿠키보다 문제가 적은 모바일 앱에서 동일한 Api를 사용하기 때문에 전통적인 쿠키 + 세션보다 베어러 토큰 경로를 선택했습니다.
이 단순화 흐름이다
- 사용자합니다 ( TokenProvider 라우팅 HTTPS를 POST)를 서버에게 사용자 이름/패스워드를 제출
- Owin 작성하는 발생 된 GUID를 포함하는 제와
AccessToken
(그것은 세션 ID와 같은 것을 의미 할 것입니다.) 그리고 다른 몇몇 요구들. - Owin은
RefreshToken
을 만듭니다. RefreshToken | | 티켓 | DateIssued | DateExpire | DateEnd서버 모두를 제공
GUID (PK)이 :
- 서버에는 다음 필드로
RefreshToken
테이블에 항목을 만듭니다AccessToken
및RefreshToken
을 클라이언트에 전송합니다. 클라이언트는
AccessToken
과RefreshToken
을 모두 SessionStorage에 저장합니다.클라이언트는
AccessToken
으로 Api에 액세스합니다.
AngularJS와는 AccessToken 만료에 가까운 것을 감지, 모든 요청과 발행 grant_type refresh_token request
버퍼;
서버 RefreshToken
클라이언트 제공하고 사용
- 검사를 새로 고침 토큰 여전히 DB에서 유효한 경우 (
DateExpire > GetTime() And DateEnd is Null
)는 - 는
- 티켓에서 AccessToken를 생성 DB로부터 티켓을 취하고
- db 날짜를 새로운 날짜, 새로운
RefreshToken
및 새 티켓으로 업데이트합니다 (참고 : GUID는 동일하게 유지됩니다).
클라이언트가 로그 아웃 서버 측에 도달하면 기록 된 사용자의 ID 클레임에서 읽은 GUID가 테이블의 항목을 무효화하는 데 사용됩니다 (DateEnd = GetTime()
).
클라이언트 쪽 두 토큰은 SessionStorage
에서 제거됩니다.
이렇게하면 RefreshToken
을 취소하여 다른 요청을 거부하여 AccessToken
을 새로 가져올 수 있습니다.
이 접근법의 문제점은 권한 부여가 철회되는 시간대 (예 : RefreshToken
가 DB에서 무효화 됨)이지만 AccessToken
은 유효합니다 (제한된 시간대 임에도 불구하고).
각 요청에 대해 AccessToken
의 유효성을 검사하고 사용자 ID 클레임에서 GUID를 가져 와서 특정 GUID의 새로 고침 토큰이 유효한지 확인하기 위해 db를 확인하는 것이 좋습니다.
O (1)을 수행하는 쿼리를 만드는 것이 매우 간단하지만 단일 실패 지점 자체가 시스템의 확장 성과 성능에 부정적인 영향을 미칠 수 있습니다.
이 문제를 완화하는 또 다른 방법을 알고 계시 며 접근 방법에 결함이 있습니까?
모바일 장치에 대한 전자 메일 액세스를 차단할 때 Office 365 Exchange에서이 문제가 발생했습니다. 사용자의 전자 메일 계정은 액세스 토큰이 만료 될 때까지 잠기지 않습니다.이 경우 정확하게 1 시간이었습니다. – peterincumbria