基于 Flask-Stormpath 令牌的身份验证
Flask-Stormpath Token based authentication
我正在尝试为我的 Flask REST API 实施基于令牌的身份验证。我正在使用 Stormpath 作为我的第三方身份验证服务。
我研究了建立在 flask-login
之上的 flask-stormpath
。看起来它使用基于密码的身份验证,因为他们试图在服务器上维护会话。另外,文档没有提供足够的信息。
我们是否有用于基于 stormpath 令牌的身份验证的烧瓶集成?
如果是,有人可以指出示例代码吗?
我已经在 github 上完成了 stormpath/flask-stormpath-sample
,它再次在服务器中维护会话。
参考文献:
我是 Flask-Stormpath 库的作者。答案是不。我实际上正在开发一个新版本的库(大约一个月后发布),它将默认提供此功能,但现在它只支持基于会话的身份验证。
这是我目前使用的方式,直到 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)
如果有人想知道令牌发行和刷新端点,请在评论中告诉我。
我正在尝试为我的 Flask REST API 实施基于令牌的身份验证。我正在使用 Stormpath 作为我的第三方身份验证服务。
我研究了建立在 flask-login
之上的 flask-stormpath
。看起来它使用基于密码的身份验证,因为他们试图在服务器上维护会话。另外,文档没有提供足够的信息。
我们是否有用于基于 stormpath 令牌的身份验证的烧瓶集成? 如果是,有人可以指出示例代码吗?
我已经在 github 上完成了 stormpath/flask-stormpath-sample
,它再次在服务器中维护会话。
参考文献:
我是 Flask-Stormpath 库的作者。答案是不。我实际上正在开发一个新版本的库(大约一个月后发布),它将默认提供此功能,但现在它只支持基于会话的身份验证。
这是我目前使用的方式,直到 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)
如果有人想知道令牌发行和刷新端点,请在评论中告诉我。