2015-11-23 42 views
0

我正在使用imgur api。我使用沒有數據庫的Flask。在Flask中沒有數據庫存儲Oauth2 access_token

我試圖訪問一個專用帳戶,所以在這個應用程序中不會有多個用戶帳戶(因此我只需手動授權一次,然後使用tokens the service gives to me完成其餘操作,無需一個數據庫)。 一旦在帳戶上授權應用程序,Imgur會給我兩個令牌:一個小時後過期的access_token和一個不過期的refresh_token,可用於請求新的access_token。

我想不出任何方法的不同只在需要時該使用這種兩個標記並刷新訪問一個正確的發送請求到服務器:

from flask import Flask 
from foobar import foo, bar 
import config 

app = Flask(__name__) 
app.config.from_object(config) 

#I initialize the access_token with the value hardcoded in the config file 
access_token = config.access_token 

@app.route('/',methods=['POST']) 
def home(): 

    #I access the value i initialized when starting the server 
    global access_token 

    if request.method == 'POST': 

     #I send the access_token to a method that contacts Imgur servers and checks if it's still valid. If not it will request and return a new one. 
     access_token = foo(access_token) 

     #I send the token, now sure it's always a valid one, to the rest of the logic that uses it to do actual requests 
     bar(access_token) 

這工作。只要我不重新啓動服務器,它只會在需要時才需要一個新的access_token,但它並不是一個很好的做事方式。硬編碼在一個小時內到期的令牌聽起來真的很愚蠢,我真的不知道如果使用該全局變量可能是一種好的做法,也不會在某些情況下從配置文件重新初始化,我目前忽略。我怎樣才能避免這種情況?我應該將新刷新的access_token寫入文件並從配置文件中加載它?這是否會造成安全隱患?

此外,refresh_token不會過期,所以我認爲將它存儲在cofing文件中沒有問題,但是每當我請求access_token時,sill也會給我一個新的refresh_token,我應該更新它嗎?這似乎沒有必要,舊的仍然有效,但也許我錯過了一些東西。

回答

1

根據imgur的API文檔,access_token一個月後過期不到一小時。我認爲這是可接受的方法將它存儲在一個文件中。您已經將refresh_token存儲在配置文件中,因此如果攻擊者可以訪問應用程序的目錄,那麼access_token是否也存在並不重要。 (當然,你應該以獨立用戶的身份運行Flask應用程序,並且只能由該用戶訪問所有文件。)

您也可以將過期日期與access_token一起存儲,以便您可以檢查是否有在請求之前更新它。

+0

這真讓我困惑。我清楚地記得,在它說它在一小時後過期的文檔中,我不知道我是完全誤讀了它還是最近更新了它。我已經寫過一個方法,我在使用任何請求聯繫服務器來檢查它是否仍然有效的請求之前使用,如果不是,它會請求一個新的並返回它。如果我在一週前正確記得測試時離開服務器運行並去吃飯,當我回來時(超過一個小時),我提出了一個請求,並且該方法返回了一個新的令牌,但也許我記得它錯誤。無論如何,謝謝你的建議! – seesharp

相關問題