我知道如何在烧瓶中保护端点,我想做同样的事情来招摇生成的python服务器存根。我想知道如何为招摇的 python 服务器集成烧瓶令牌身份验证,以便端点得到保护。我可以轻松地将令牌身份验证装饰器添加到烧瓶中的端点。这就是烧瓶休息加中的工作方式,下面的这个完全有效:
from flask import Flask, request, jsonify
from flask_restplus import Api, Resource
app = Flask(__name__)
authorizations = {
'apikey' : {
'type' : 'apiKey',
'in' : 'header',
'name' : 'X-API-KEY'
},
}
api = Api(app, security = 'apikey',authorizations=authorizations)
def token_required(f):
@wraps(f)
def decorated(*args, **kwargs):
token = None
if 'X-API-KEY' in request.headers:
token = request.headers['X-API-KEY']
if not token:
return {'message' : 'Token is missing.'}, 401
if token != 'mytoken':
return {'message' : 'Your token is wrong, wrong, wrong!!!'}, 401
print('TOKEN: {}'.format(token))
return f(*args, **kwargs)
return decorated
class classResource(Resource):
@api.doc(security='apikey')
@token_required
def get(self):
return "this is test"
如何在大摇大摆生成的服务器存根处进行持有者身份验证:
我想知道如何将此身份验证集成到招摇生成的 python 服务器存根中。以下是规范文件的开始方式:
openapi: 3.0.2
info:
title: test api
version: 1.0.0
servers:
- url: /api/v1/
description: Example API Service
paths:
/about:
get:
summary: general summary
description: get current version
responses:
'200':
description: About information
content:
application/json:
schema:
$ref: '#/components/schemas/version'
'401':
description: Authorization information is missing or invalid.
components:
securitySchemes:
BearerAuth:
scheme: bearer
type: http
security:
- BearerAuth: []
Swagger Python 服务器存根上的控制器:
更新:我的新尝试:
这是由 Swagger Python 服务器存根生成的default_controller,我尝试如下:
import connexion
import six
@api.doc(security='apikey')
@token_required
def about_get(): # noqa: E501
return 'do some magic!'
但是authorize
按钮不见了。为什么?
在 Swagger Python 服务器存根中,我也有authorization_controller
它具有以下代码逻辑:
from typing import List
def check_BearerAuth(token):
return {'test_key': 'test_value'}
更新:
这里在招摇的蟒蛇服务器存根。about_get()
是一个端点,目前并不安全。我们如何才能像在烧瓶中所做的那样确保它?有什么想法吗?
如何将上述烧瓶令牌身份验证添加到 Swagger Python 服务器存根中的about_get()
?有什么办法可以做到这一点吗?知道吗?
更新
下面是一个使用 JWT 作为持有者格式的示例 yaml: https://github.com/zalando/connexion/blob/master/examples/openapi3/jwt/openapi.yaml
生成烧瓶服务器后,您可以在 swagger-ui 上找到"授权"按钮。如果您在"授权"之前执行/secret,您将收到 401 错误。
因此,对于您的情况,您必须将其更改为:
openapi: 3.0.2
info:
title: test api
version: 1.0.0
servers:
- url: /api/v1/
description: Example API Service
paths:
/about:
get:
summary: general summary
description: get current version
security:
- jwt: ['secret']
responses:
'200':
description: About information
content:
application/json:
schema:
type: string
components:
securitySchemes:
jwt:
type: http
scheme: bearer
bearerFormat: JWT
x-bearerInfoFunc: app.decode_token
因此,在安装connexion[swagger-ui]
并通过python -m swagger_server
启动服务器后。然后,导航到http://0.0.0.0:8080/api/v1/ui/
,您可以测试身份验证是否正常工作。如果在授权之前调用/about
,它将遇到 401 错误。
从代码添加身份验证:
from flask_restx import Api
authorizations = {
'Bearer Auth': {
'type': 'apiKey',
'in': 'header',
'name': 'Authorization'
},
}
api = Api(app, security='Bearer Auth', authorizations=authorizations)
顺便说一句,最好将flask_restplus迁移到flask_restx,因为不再维护flask_restplus。
源
https://github.com/noirbizarre/flask-restplus/issues/398#issuecomment-444336893