Python Authlib Flask - วิธีจัดการกับโทเค็นการรีเฟรช
ฉันต้องการแค่ oauth2 สำหรับการเข้าสู่ระบบเท่านั้น แต่ฉันรู้สึกว่าเพื่อให้สมบูรณ์พอสมควรแอปของฉันควรจัดการกับโทเค็นการรีเฟรช
ฉันค่อนข้างใหม่สำหรับ oauth ดังนั้นนี่คือความเข้าใจของฉัน:
ด้วยการรักษาอายุการใช้งานโทเค็นการเข้าถึงให้สั้น แต่อายุการใช้งานของโทเค็นการรีเฟรชจะยาวนานคุณบังคับให้ไคลเอ็นต์ "เช็คอิน" เป็นประจำเพื่อต่ออายุโทเค็นการเข้าถึงและด้วยเหตุนี้จึงควบคุมได้มากขึ้น
แต่จะทำอย่างไรโดยใช้ authlib และการรวมขวด?
ดูเหมือนว่าจะไม่มี refresh_token () บน FlaskRemoteApp และฉันไม่พบโค้ดตัวอย่างที่แสดงสิ่งนี้
ดูเหมือนว่าจะได้รับโทเค็นใหม่
res = oauth.myOauth2.fetch_access_token(refresh_token=session['tok_res']['refresh_token'])
session['tok_res'].update(res)
แต่ล้มเหลวเมื่อใช้ access_token ใหม่ในภายหลังสำหรับการเรียก API
ฉันคิดว่าอาจเป็นข้อผิดพลาดของเซิร์ฟเวอร์หรือฉันอาจต้องรอให้โทเค็นเก่าหมดอายุก่อนจึงจะใช้ใหม่ได้ เวลา expires_at อัปเดตอยู่ตลอดเวลาและนั่นก็ไม่สมเหตุสมผลสำหรับฉันในกรณีนั้น
จะดีมากถ้าใครสามารถอธิบายได้ว่า refresh_token มีไว้เพื่อใช้กับ authlib และ flask อย่างไร
คำตอบ
ดีเว้นแต่@leptureลดลงโดยมีคำตอบผมมีอย่างน้อยคำตอบ ฉันหายไปจากการโทร ตอนนี้สิ่งนี้ได้ผลตามที่ฉันคาดไว้grant_type='refresh_token'
if session['oatoken']['expires_at'] - 2 < now: # refresh 2 seconds early
oatoken = oauth.myOauth2.fetch_access_token(
refresh_token=session['oatoken']['refresh_token'],
grant_type='refresh_token')
session['oatoken'].update(oatoken)
ฉันเล่นไปเล็กน้อยกับการตั้งค่าฟังก์ชัน update_token ในรีจิสทรี แต่ไม่สามารถทำงานได้ ไม่ว่าในกรณีใดฉันเชื่อว่าจะเกิดขึ้นก็ต่อเมื่อการเรียก API โดยใช้โทเค็นได้รับการตอบกลับ "โทเค็นหมดอายุ" ในกรณีของฉันฉันใช้ Oauth สำหรับการเข้าสู่ระบบเท่านั้นดังนั้นฉันจึงสามารถดูเวลา expires_at และกดเซิร์ฟเวอร์รับรองเมื่อจำเป็นเท่านั้น