Maison > Opération et maintenance > Nginx > le corps du texte

Comment Nginx implémente la configuration du contrôle d'accès basé sur les cookies

WBOY
Libérer: 2023-11-08 19:26:07
original
1946 Les gens l'ont consulté

Comment Nginx implémente la configuration du contrôle daccès basé sur les cookies

Comment Nginx implémente la configuration du contrôle d'accès basé sur les cookies, des exemples de code spécifiques sont requis

Dans les applications Web, le contrôle d'accès est une fonction clé. Grâce à la configuration du contrôle d'accès basé sur les cookies, les utilisateurs peuvent être empêchés d'accéder à des pages ou des ressources spécifiques. Cet article expliquera comment utiliser Nginx pour implémenter un tel contrôle d'accès et donnera des exemples de code spécifiques.

  1. Activez le module http_auth_request de Nginx
    Tout d'abord, vous devez vous assurer que Nginx a activé le module http_auth_request. S'il n'est pas activé, vous pouvez ajouter le module en éditant le fichier de configuration Nginx.
cd /path/to/nginx/source/
./configure --with-http_auth_request_module
make
sudo make install
Copier après la connexion
  1. Configurer les règles de contrôle d'accès Nginx
    Dans le fichier de configuration Nginx, vous pouvez définir des règles de contrôle d'accès via la directive d'emplacement. Dans cet exemple, nous allons mettre en place une page protégée à laquelle seuls les utilisateurs disposant d'un cookie spécifique pourront accéder.
location /protected {
    auth_request /auth;
    error_page 401 = @error401;
}

location = /auth {
    internal;
    proxy_pass http://backend/auth;
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Original-URI $request_uri;
}
Copier après la connexion

Dans la configuration ci-dessus, location /protected définit une page protégée, et la commande auth_request /auth enverra une requête à /auth</code > code> emplacement pour l'authentification. Si l'authentification réussit, l'accès à la page est autorisé ; sinon, une erreur 401 sera renvoyée. <code>location /protected定义了一个受保护的页面,auth_request /auth指令将会发送一个请求到/auth位置进行认证。如果认证成功,则允许访问该页面;否则,将会返回401错误。

location = /auth定义了一个内部请求,它将会被传递给后端服务器进行认证。在这个例子中,我们假设后端服务器的地址是http://backend,认证接口为/auth。通过proxy_pass指令实现请求的转发,并通过proxy_pass_request_body offproxy_set_header Content-Length ""禁用请求体的传递。另外,还通过proxy_set_header X-Original-URI $request_uri传递原始的URI信息给后端服务器。

  1. 编写后端服务器的认证接口
    在上一步的配置中,我们假设后端服务器的地址为http://backend,认证接口为/auth。现在,我们来编写该接口的实际实现。

实现一个简单的认证接口可以使用任何Web编程语言(如Python、PHP或Java)来完成。在这里,我们以Python为例,使用Flask框架实现一个简单的接口。

from flask import Flask, request

app = Flask(__name__)

@app.route('/auth', methods=['POST'])
def auth():
    cookie = request.headers.get('Cookie')
    if cookie == 'your_cookie_value':
        return 'OK'
    else:
        return 'Unauthorized', 401

if __name__ == '__main__':
    app.run()
Copier après la connexion

在上述代码中,我们定义了一个/auth的路由,它接受POST请求。通过request.headers.get('Cookie')

location = /auth définit une requête interne, qui sera transmise au serveur backend pour authentification. Dans cet exemple, nous supposons que l'adresse du serveur backend est http://backend et que l'interface d'authentification est /auth. Implémentez le transfert de requête via la directive proxy_pass et désactivez la livraison du corps de la requête via proxy_pass_request_body off et proxy_set_header Content-Length "". De plus, les informations URI d'origine sont transmises au serveur principal via proxy_set_header X-Original-URI $request_uri.
    1. Écrire l'interface d'authentification du serveur backend
      Dans la configuration de l'étape précédente, nous supposons que l'adresse du serveur backend est http://backend et l'interface d'authentification est /auth. Maintenant, écrivons l'implémentation réelle de cette interface.

    La mise en œuvre d'une interface d'authentification simple peut être effectuée à l'aide de n'importe quel langage de programmation Web (tel que Python, PHP ou Java). Ici, nous prenons Python comme exemple et utilisons le framework Flask pour implémenter une interface simple.

    rrreee

    Dans le code ci-dessus, nous définissons une route de /auth, qui accepte les requêtes POST. Obtenez les informations sur le cookie dans la demande via request.headers.get('Cookie') et comparez-les avec le cookie par défaut. S'ils correspondent, « OK » est renvoyé pour indiquer une authentification réussie ; sinon, une erreur 401 est renvoyée pour indiquer un échec de l'authentification ;

    🎜🎜Tester le contrôle d'accès basé sur les cookies🎜Après avoir terminé les étapes ci-dessus, redémarrez le service Nginx et accédez à la page protégée définie dans la configuration. Ce n'est que lorsqu'une demande contenant le bon cookie est envoyée que l'accès à la page est possible. 🎜🎜🎜En résumé, nous avons implémenté un contrôle d'accès basé sur les cookies via le module http_auth_request de Nginx, la configuration des règles de contrôle d'accès et l'interface d'authentification du serveur back-end. Une telle configuration peut contrôler de manière flexible l'accès des utilisateurs à des pages ou des ressources spécifiques. 🎜🎜Remarque : dans un environnement de production réel, une configuration de contrôle d'accès plus stricte doit être effectuée en fonction des besoins réels et des exigences de sécurité, et une logique d'authentification plus complexe doit être implémentée dans l'interface d'authentification du serveur principal. Les exemples ci-dessus ne fournissent que des idées et des démonstrations de base, et la mise en œuvre spécifique doit être ajustée en fonction de la situation spécifique. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal