Flask登录mechanisim来验证每个令牌我的电话

Nec*_*net 7 authentication auth-token flask flask-login

嗨,我正在查看flask-login处理会话登录很好,这项工作很适合模板和视图,我有权访问会话.

不过,我一直试图知道是否有办法将user_token发送给授权的电话.我查看了文件,对此非常模糊.它说我应该

  • 在我的User对象中实现get_auth_token.
  • Decorte可以加载用户令牌库的@user_loader函数.

我虽然看到了以下内容(请纠正我,如果我错了)

  • 用于存储身份验证令牌的Cookie库有一种方法可以决定将令牌作为参数,正文或标题的一部分发送,而不必从cookie中获取它.
  • 我不太确定如何使用auth令牌验证呼叫.

Nec*_*net 9

我有一个更好的方法,更符合我的需求.基本上我扩展了LoginManager非常简单和直接,如果你看看flask-plugin的来源,你会发现有一个调用@before_request有一个叫做reload_user的方法,这就是我最终做的事情

class CustomLoginManager(LoginManager):
    def reload_user(self):
        if request.headers.has_key('Authorization'):
            ctx = _request_ctx_stack.top
            ctx.user = User.get(token=request.headers['Authorization'])
            return
        super(CustomLoginManager,self).reload_user()
Run Code Online (Sandbox Code Playgroud)

如果在我的标题中我传递了授权密钥,那么我将尝试使用此密钥而不是基于会话的方法加载,当然我需要通过签署密钥来为此方法添加更多安全层但总体而言这就是我需要.

谢谢大家.

顺便说一句,你可以覆盖一堆别人的方法,我强烈建议你看一下插件源代码,这样你就可以更深入地了解它的代码值得阅读的644行代码

https://github.com/maxcountryman/flask-login/blob/master/flask_login.py


Sma*_*boy 5

看起来你想要像OAuth这样的东西,而不是使用Flask-Login.如果您不知道(引自维基百科),OAuth是一种利用令牌以便代表资源所有者访问资源的协议.考虑让用户能够向您网站的某些部分发放代客密钥.许多网站(如Google,Facebook和Twitter)都使用OAuth来验证第三方客户端,以便访问某些用户资源.

现在,在不太灵活和不太复杂的OAuth 1.0a和更灵活但更复杂的OAuth 2.0之间存在分歧.Python中的OAuth 1.0a存在许多库,但OAuth 2.0中存在的库较少.但是,如果稳定性目前不是最受关注的问题,那么可以选择OAuth 2.0.

对于客户端,如果您使用OAuth 1.0a ,Flask-OAuth可用,并且由Flask创建者Armin维护,因此您可以放心,它不会死亡.对于提供商,有一个名为Flask-OAuthProvider的扩展,支持OAuth 1.0a.如果您不介意自己集成并希望获得2.0支持,pyoauth2会为您提供客户端和提供程序,尽管它看起来维护较少.

希望这可以帮助您探索一种可能的途径来使用auth令牌,尽管不使用Flask-Login.在我看来,除非他们理解协议,否则不应该重新实现协议,因此即使您决定不使用它,我也建议您阅读OAuth.它上面有很多很棒的文章,比如谷歌这篇文章.