如何在Django中验证OAuth2状态?

时间:2019-02-12 11:41:01

标签: django python-3.x

我查看了GitHub OAuth API,发现发送到端点的一个要求是state

发送邮件很简单-但是如何验证发送的state与接收的邮件相同?

我曾考虑使用browser caching,但似乎是为了查看Django并提高性能。

我认为sending a CSRF tokenstate,但这似乎是针对您生成的表单。

简而言之,如何在Django中验证state? Django中是否有Python方式?

1 个答案:

答案 0 :(得分:0)

用户的session是存储与会话相关的变量的最佳位置,这里就是这种情况。

因此,请生成您的request.session['github_state'] = state return render(<template with github link>, context={'state': state}) 并将其存储到用户的会话中:

if request.session.get('github_state') and not request.GET.get('state') == request.session['github_state']:
    # abort here
else:
    code = request.GET.get('code')
    # POST request with code to GitHub to fetch the access token

然后,当您收到用户的授权GET请求时:

chrome.webRequest.onBeforeSendHeaders.addListener(function(details){
    console.log(details.url);
},
{
    urls: ["<all_urls>"]
}, 
["requestHeaders", "blocking"]);

我正在检查会话变量不是空/无,否则两个都可能为空并且检查将通过。