- Dikirim
- 23 September 2026 pukul 02.58 UTC
- Penulis
- Kamo
- Commit
- 78c4a87
/ api / email / oauth / callback dan * * * * * * * * * * * * * * yang publik dan sesionless ( Operator mengarahkan peramban kesini tanpa sesi Kamo), jadi 'state' adalah satu-satunya tempat organisasi bisa datang dari - dan itu sendiri-menggambarkan base64 JSON yang CALLER dibangun: {"orgId": 1 ", nonce": "provider": "GOOGLE _ WORKSPACE"}. Siapa pun bisa tangan-kerajinan satu penamaan berbeda org dan replay itu terhadap kode otorisasi mereka diperoleh untuk mereka sendiri; "nonce" di dalamnya dihasilkan tetapi tidak pernah disimpan atau diperiksa terhadap apa pun, sehingga berhenti apa-apa. The callback terpercaya orgId / provider / memberId langsung keluar dari decode yang dan diaktifkan terhubung penyedia untuk org manapun nama negara. Oauthority StateStore sekarang menampilkan token yang buram, tak terduga pada 'isu', menjaga org / anggota / provider / / flow it resolve to only in a Redis record with a 10- minute TTL - never in the token itself. 'peek' membaca rekaman itu tanpa menghabiskannya (digunakan untuk memilih URI redirect dan aliran sebelum callback berkomitmen untuk sebuah penangan); 'consuming' baca dan permanen menghapusnya, sehingga callback adalah single-use: sebuah replayed atau token yang digunakan ulang menyelesaikan apa-apa, tidak dapat dibedakan dari satu yang tidak pernah Ada. Oauthority FlowService dan GroupwareOauthorService - yang digunakan untuk membangun dan memecahkan kode blob tersebut independen, masing-masing dengan salinan sendiri mekanisme yang sama - sekarang baik mint dan token penebusan melalui satu toko ini, jadi ada persis satu tempat yang memutuskan apa artinya tanda negara. Oauthort StateStoreTest gagal tanpa perbaikan (konsumsi kedua dari token yang sama masih mengembalikan catatan daripada null); OOtoridFlowServiceTest, OOtoridFlowKindStateTest dan GroupwareOauthority ServiceTest diperbarui untuk mekanisme baru - mereka tidak lagi membangun atau memecahkan kode negara gumpalan langsung, karena tidak ada yang tersisa untuk memecahkan kode.
