【发布时间】:2018-02-05 06:21:31
【问题描述】:
一些关于 oAuth 的教程使用 Flask 会话在 Flask 会话中存储状态参数和访问令牌。 (Brendan McCollam's very useful presentation from Pycon is an example)
我了解 Flask 将会话存储在客户端的 cookie 中,并且它们很容易暴露(see Michael Grinberg's how-secure-is-the-flask-user-session)。我自己尝试过,并且能够看到令牌过期等。
在烧瓶会话中存储状态和令牌是否正确,或者它们应该存储在其他地方?
代码示例:
@app.route('/login', methods=['GET'])
def login():
provider = OAuth2Session(
client_id=CONFIG['client_id'],
scope=CONFIG['scope'],
redirect_uri=CONFIG['redirect_uri'])
url, state = provider.authorization_url(CONFIG['auth_url'])
session['oauth2_state'] = state
return redirect(url)
@app.route('/callback', methods=['GET'])
def callback():
provider = OAuth2Session(CONFIG['client_id'],
redirect_uri=CONFIG['redirect_uri'],
state=session['oauth2_state'])
token_response = provider.fetch_token(
token_url=CONFIG['token_url'],
client_secret=CONFIG['client_secret'],
authorization_response=request.url)
session['access_token'] = token_response['access_token']
session['access_token_expires'] = token_response['expires_at']
transfers = provider.get('https://transfer.api.globusonline.org/v0.10/task_list?limit=1')
return redirect(url_for('index'))
@app.route('/')
def index():
if 'access_token' not in session:
return redirect(url_for('login'))
transfers = requests.get('https://transfer.api.globusonline.org/v0.10/task_list?limit=1',
headers={'Authorization': 'Bearer ' + session['access_token']})
return render_template('index.html.jinja2',
transfers=transfers.json())
【问题讨论】:
-
有人吗?任何人?我会回答一半......当然我不是唯一一个认为这很重要的人
标签: session flask oauth-2.0 access-token