KamoCRM

OAuth 상태 토큰은 서버 측 기록이며 브라우저의 손이 다시 blob하지 않습니다

FixEmailService
Shipped
2026년 9월 23일 오전 2:58 UTC
Author
Kamo
Commit
78c4a87

/api/email/oauth/callback 및 ****************는 공개 및 세션리스 (the 공급자는 Kamo 세션없이 브라우저를 리디렉션합니다), 그래서 `state`는 단지 장소 조직은에서 올 수 있었다 — 그리고 그것은 self-describing base64 JSON CALLER 내장: {"orgId": 1, "nonce": "...", "provider": "GOOGLE WORKSPACE"}. 누구나 손으로 만들 수 있습니다. 다른 org와 그들이 자신의 얻은 허가 코드에 대하여 재생; "nonce" 내부는 생성되었지만 저장되지 않았거나 아무것도 검사하지 않았다. 그래서 아무것도 멈추지 않는다. 더 보기 callback 신뢰할 수 있는 orgId/provider/memberId는 그것을 해독하고 연결해 활성화했습니다 org 의 상태에 대한 공급자. OAuthStateStore는 opaque를 축소하고, `issue`의 unguessable 토큰은, org/member/provider/를 유지 Redis 레코드 만 10 분 TTL - 토큰 자체에 절대로 흐릅니다. `peek`는 그것을 소비하지 않고 레코드를 읽습니다 (리디드 URI를 선택하고 흐름 전에 콜백은 핸들러에 커밋합니다. `consume`는 읽고 영구적으로 삭제합니다. 그래서 콜백은 단일 용도 : 재생 또는 재사용 된 토큰은 아무 것도 해결하지 못합니다. 현재 위치 OAuthFlowService 및 GroupwareOAuthService - blob를 구축하고 해독하는 데 사용되는 독립적으로, 같은 메커니즘의 자체 사본과 각각 - 이제 모두 민트와 redeem 토큰 이 상점을 통해서, 그래서 어떤 국가 토큰이 의미하는지 결정하는 정확히 한 장소가 있습니다. OAuthStateStoreTest는 수정 없이 실패합니다 (같은 토큰의 두번째 소모는 아직도 돌려보냅니다 null 대신 기록); OAuthFlowServiceTest, OAuthFlowKindStateTest 및 GroupwareOAuthServiceTest 새로운 메커니즘에 대한 업데이트 - 그들은 더 이상 구축하거나 직접 국가 blob를 디코딩하지 않습니다, 이후 암호가없는 것은 없습니다.

All changes

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing