auth_request

auth_request模块

文件目录

test_1
├── app_auth.py
├── app.py
├── nginx.conf
└── templates
    ├── index.html
    ├── login.html
    ├── t1.html
    └── t2.html

文件内容

index.html

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <title>展示页面</title>
</head>

<body>
    <h1>这是一个需要认证后才能访问的页面</h1>
</body>

</html>

t1.html

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <title>展示页面</title>
</head>

<body>
    <h1>t1t1</h1>
</body>

</html>

t2.html

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <title>展示页面</title>
</head>

<body>
    <h1>t2t2</h1>
</body>

</html>

app.py

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def index():
    return render_template('index.html')

@app.route('/t1')
def t1():
    return render_template('t1.html')


@app.route('/t2')
def t2():
    return render_template('t2.html')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

app_auth.py

from flask import Flask, request, jsonify
from urllib.parse import urlparse, parse_qs

app = Flask(__name__)


@app.route('/auth', methods=['POST'])
def authenticate():
    # 从请求头中获取 token
    token = request.headers.get('X-Auth-Token')
    print("token", token)
    if token == 'valid_token':
        return jsonify({'status': 'authenticated'}), 200
    return jsonify({'status': 'unauthenticated'}), 401

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5001)

通过url参数传递

http://127.0.0.1:9991/t1?token=valid_token传递给http://127.0.0.1:5001/auth

配置proxy_set_header X-Original-URI $request_uri;

nginx.conf

events {
    worker_connections 1024;
}


http {
    server {
        listen 9991;
        server_name 127.0.0.1;

        location / {
            auth_request /auth;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_pass http://127.0.0.1:5000;
        }

        location /auth {
            proxy_pass http://127.0.0.1:5001/auth;
            proxy_method POST;
            proxy_set_header Content-Type application/json;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Original-URI $request_uri;
            internal;
        }
    }
}

app_auth.py

from flask import Flask, request, jsonify
from urllib.parse import urlparse, parse_qs

app = Flask(__name__)


@app.route('/auth', methods=['POST'])
def authenticate():
    # 从url参数中获取
    token = None
    original_uri = request.headers.get('X-Original-URI')
    if original_uri:
        parsed_uri = urlparse(original_uri)
        query_params = parse_qs(parsed_uri.query)
        _token = query_params.get('token', [None])[0]
        token = _token
    print("token", token)
    if token == 'valid_token':
        return jsonify({'status': 'authenticated'}), 200
    return jsonify({'status': 'unauthenticated'}), 401

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5001)


通过header传递参数

配置proxy_set_header X-Auth-Token $http_x_auth_token;

nginx.conf

events {
    worker_connections 1024;
}


http {
    server {
        listen 9991;
        server_name 127.0.0.1;

        location / {
            auth_request /auth;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_pass http://127.0.0.1:5000;
        }

        location /auth {
            proxy_pass http://127.0.0.1:5001/auth;
            proxy_method POST;
            proxy_set_header Content-Type application/json;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Auth-Token $http_x_auth_token;
            internal;
        }
    }
}

app_auth.py内容

from flask import Flask, request, jsonify

app = Flask(__name__)


@app.route('/auth', methods=['POST'])
def authenticate():
    # 从请求头中获取 token
    token = request.headers.get('X-Auth-Token')
    print("token", token)
    if token == 'valid_token':
        return jsonify({'status': 'authenticated'}), 200
    return jsonify({'status': 'unauthenticated'}), 401

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5001)
posted @ 2025-01-06 16:50  lxd670  阅读(12)  评论(0)    收藏  举报