4

我正在尝试为我的 Flask REST API 实现基于令牌的身份验证。我使用 Stormpath 作为我的第三方身份验证服务。

我研究了flask-stormpath建立在flask-login. 看起来它使用基于密码的身份验证,因为他们试图在服务器上维护会话。此外,文档没有为我提供足够的信息。

我们是否有基于 Stormpath 令牌的身份验证的烧瓶集成?如果是,有人可以指出我的示例代码。

我已经浏览了stormpath/flask-stormpath-samplegithub,它再次在服务器中维护会话。

参考:

https://stormpath.com ,

https://github.com/stormpath/stormpath-flask

4

2 回答 2

3

所以这是我目前使用的方式,直到rdegges将此功能构建到flask-stormpath.

您将需要 Stormpath python sdk 最新版本并从 func 工具包装。

from stormpath.api_auth import (PasswordGrantAuthenticator, RefreshGrantAuthenticator, JwtAuthenticator)
from functools import wraps

您可以这样创建您的应用程序。

stormpathClient = Client(id=KEYS['STORMPATH_ID'], secret=KEYS['STORMPATH_SECRET'])
stormpathApp = stormpathClient.applications.search('your-application')[0]

该装饰器将帮助您保护端点。

def tokenRequired(func):
    """
        Decorator to apply on all routes which require tokens.
    """

    @wraps(func)
    def wrappingFunc():
        #check the auth header of the request for a bearer token.
        authHeader = request.headers.get('Authentication')

        #make sure that the string is a bearer type.
        if len(authHeader)<8 or (not authHeader[:7] == 'Bearer ') or (
                not authHeader):
            return Response("401 Unauthorized",401)
        authToken = authHeader[7:]

        try:
            authenticator = JwtAuthenticator(stormpathApp)
            authResult = authenticator.authenticate(authToken)
            request.vUser = authResult.account
        except:
            return Response("403 Forbidden",403)

        return func()

    return wrappingFunc

#Use this decorator like below.

@flaskApp.route('/secure-route',methods=['GET','POST'])
@tokenRequired
def secureEndpoint():

    # return JSON based response 
    return Response("This is secure Mr." + request.vUser.given_name   ,200)

如果有人想知道令牌发行和刷新端点,请在评论中告诉我。

于 2016-05-24T22:22:18.250 回答
2

我是 Flask-Stormpath 库的作者。答案是不。我实际上正在开发一个新版本的库(大约一个月后发布),它将默认提供此功能,但现在它只支持基于会话的身份验证。

于 2016-05-12T16:56:34.910 回答