나는 그것이 만료 또는 만료에 가까이 있는지 확인하기 위해 사용자 신원의 청구 범위에서 제 3 자 토큰을 확인이 방법ICookieAuthenticationProvider.ValidateIdentity에서이 토큰 새로 고침 동시성 문제를 방지하려면 어떻게해야합니까?
public async override Task ValidateIdentity(CookieValidateIdentityContext context)
으로 owin 파이프 라인 내 자신의 CookieAuthenticationProvider을 부여했습니다. 그렇다면 새로 고침 토큰을 사용하여 제 3 자로부터 새 액세스 토큰을 얻고 새 액세스로 새 ID를 생성하고 토큰을 새로 고친 다음 로그인하여 현재 ID를 바꿉니다. 이렇게하면 사용자는 타사 사이트에 대한 유효한 액세스 토큰을 항상 갖게됩니다.
우리는 많은 Ajax 요청과 함께 실시간으로 들어오는 신호 요청을 제외하고는 완벽하게 작동합니다. 그래서 매우 일반적으로 사용자의 두 요청은 서로 다른 스레드 A &에서 처리됩니다. 스레드 A는 [ Authorize] 특성을 먼저 발동합니다. 토큰이 만료되었거나 만료되었으며 새로 고침을 요청합니다. 한편 B 실은 같은 일을합니다. 스레드 A가 처음 끝나면 새로운 액세스 토큰과 새로 고침 토큰이 생깁니다. 스레드 B는 타사가 이제는 유효하지 않다고 생각한 원래 새로 고침 토큰을 사용하여 새로 고침을 호출하여 새로 고침하지 못하고 사용자 요청이 승인되지 않도록 새로운 액세스 토큰을 거부합니다 . 스레드 A 완료 및 모든 것이 좋아 보인다. 스레드 B는 처음부터 무엇이든지 실패 할 것입니다.
제 질문은 이것이 올바른 장소입니까? 더 좋은 방법이 있습니까? 이 경쟁 조건을 어떻게 피할 수 있습니까?
서로 다른 새로 고침 시간을 사용하여 비동기 토큰을 2 개 가져야하는 경우 모범 사례가 실제로 이와 같은 솔루션을 중심으로 실행되기 때문에 답변으로 설정하겠습니다. 우리는 해커지만 작동하는 MVC 필터를 추가해야했습니다. – DasAmigo