Identity and Authentication - Sending Tokens with Requests

先给个简单代码来热热身

from flask import Flask, request

app = Flask(__name__)

@app.route('/headers')
def headers():
    # unpack the request header
    print('hello world')
    return 'not implemented'

在 Terminal里,对应的文件夹里,输入下面的命令

$ export FLASK_APP=example.py
$ export FLASK_DEV=environment
$ flask run 

之后, 在Terminal 里能看到给到的 URL, 这是打开 Postman
请添加图片描述
同时,在Terminal里能看到

hello world

现在需要在我们的request里添加authorization header.

先得在Postman里,添加随意一个token来做测试
请添加图片描述
之后将上面的代码稍微修改一下

from flask import Flask, request

app = Flask(__name__)

@app.route('/headers')
def headers():
    # unpack the request header
    auth_headers = request.headers['Authorization']

    print(auth_headers)
    return 'not implemented'

如果代码更新后,还是没有看到token在Terminal里,就重新输入

$ flask run

然后,在Postman里,点击 Send 按钮
这时,就能在terminal里,看到接收到了Bearer token

Bearer exampletoken

如果只是要获取token, 可以将上面的代码稍微修改一下

from flask import Flask, request

app = Flask(__name__)

@app.route('/headers')
def headers():
    # unpack the request header
    auth_headers = request.headers['Authorization']
    token_get = auth_headers.split(" ")[1]

    print(token_get)
    return 'not implemented'

这时还是得重新输入命令,flask run来运行代码,再在Postman里点击Send按钮

在Terminal里,就能看到

exampletoken

这时,我们要validate Auth Header formats

判断 Authorization是否在headers里

from flask import Flask, request, abort

app = Flask(__name__)

@app.route('/headers')
def headers():
    # unpack the request header
    if 'Authorization' not in request.headers:
        abort(401)

    auth_headers = request.headers['Authorization']
    token_get = auth_headers.split(" ")[1]

    print(token_get)
    return 'not implemented'

在Postman里, 根据下面的截图操作
请添加图片描述
重新运行代码,flask run, 然后点击 Send 按钮,就能看到下面截图里的结果,new request is unauthorized
请添加图片描述


现在来validate token is valid.

将上面代码里稍微修改:

from flask import Flask, request, abort

app = Flask(__name__)

@app.route('/headers')
def headers():
    # unpack the request header
    if 'Authorization' not in request.headers:
        abort(401)

    auth_headers = request.headers['Authorization']
    token_get = auth_headers.split(" ")[1]

    if len(token_get) != 2:
        abort(401)
    elif token_get[0].lower() != 'bearer':
        abort(401)

    print(token_get)
    return 'not implemented'

重新运行下代码,flask run

在 Postman里,根据下面截图操作
请添加图片描述
上面的结果是符合预期的

如果Value里只有一个参数,结果还是符合预期的
请添加图片描述

如果我们将token value改一下,还是符合预期的
请添加图片描述


现在将代码稍微整理一下,这样就可以适用于各种route

from flask import Flask, request, abort

def get_token_auth_header():
    if 'Authorization' not in request.headers:
        abort(401)

    auth_headers = request.headers['Authorization']
    token_get = auth_headers.split(" ")

    if len(token_get) != 2:
        abort(401)
    elif token_get[0].lower() != 'bearer':
        abort(401)
    
    return token_get[1]

app = Flask(__name__)

@app.route('/headers')
def headers():
    # unpack the request header
    jwt = get_token_auth_header()

    print(jwt)
    return 'not implemented'

在terminal里能看到token值

exampletoken

还可以这么将代码整理

from flask import Flask, request, abort
from functools import wraps

def get_token_auth_header():
    if 'Authorization' not in request.headers:
        abort(401)

    auth_headers = request.headers['Authorization']
    token_get = auth_headers.split(" ")

    if len(token_get) != 2:
        abort(401)
    elif token_get[0].lower() != 'bearer':
        abort(401)
    
    return token_get[1]

def requires_auth(f):
    @wraps(f)
    def wrapper(*args, **kwargs):
        jwt = get_token_auth_header()
        return f(jwt, *args, **kwargs)
    
    return wrapper

app = Flask(__name__)

@app.route('/headers')
@requires_auth
def headers(jwt):
    # unpack the request header
    print(jwt)
    return 'not implemented'

# 这样就可以写更多的route了
@app.route('/test')
@requires_auth
def tests(jwt):
    # unpack the request header
    print(jwt)
    return 'not implemented'

在 Terminal 里能看到结果

exampletoken

这里提供一些文章来做参考
React + Redux Example
Angular Interceptors for Authorization
Postman Auth Docs

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值