网站首页 > 技术教程 正文
背景
通过 URL 在浏览器下载文件时,并且要判断有权限的用户才能下载。
功能描述
浏览器输入下载 URL,吊起浏览器自带的用户名和密码输入框,将填入的用户信息传给服务端,校验通过下载文件,校验不通过重新输入。
实现思路
- 在 Nginx 中配置下载路径拦截
- 定义一个需要认证才能访问的文件下载路径设置 auth_request 向服务端转发请求,验证用户信息设置 alias 文件静态地址,若鉴权通过,下载文件
代码
Nginx 配置
nginx.config
conf
复制代码
location /auth { proxy_pass http://localhost:7001/auth/protected-check; # 向后端转发的鉴权请求 proxy_redirect off; proxy_set_header X-real-ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # 需鉴权的文件下载 location /auth-download { auth_request /auth; alias /uploads/email/; # 绝对路径 autoindex on; sendfile on; sendfile_max_chunk 1m; tcp_nopush on; expires off; add_header Cache-Control private; }
服务端接口
这里用的是 egg.js 写的服务端
- 在 app/router.js 中添加对应的鉴权路由
ts
复制代码
import { Application } from'egg';exportdefault (app: Application) => {const { controller, router } = app; router.get('auth/protected-check', controller.auth.protectedCheck);}
- 在对应的 Controller 中添加 protectedCheck 方法
- 当服务器响应一个 HTTP 401 Unauthorized 状态码,并且在响应头请求响应头中包含WWW-Authenticate字段时,多数现代浏览器会自动弹出一个对话框要求用户输入用户名和密码
- 最后,根据 Nginx 的配置,如果这个函数返回 200 状态码,Nginx 将认为鉴权已通过,并允许访问配置的文件目录进行下载。否则,Nginx将继续阻止访问,直到鉴权通过。
app/controller/auth.js
ts
复制代码
publicasyncdownloadCheck() {const { ctx } = this;const authHeader = ctx.request.header.authorization;if (!authHeader || !authHeader.startsWith('Basic ')) { ctx.status = 401; ctx.set('WWW-Authenticate', 'Basic realm="Restricted Area"');return; }const base64Credentials = authHeader.slice(6);const credentials = Buffer.from(base64Credentials, 'base64').toString('ascii');const [username, password] = credentials.split(':');// 这里你可以添加自己的验证逻辑,比如查询数据库if (username === 'admin' && password === 'password') { ctx.body = 'Access granted';// 当 status 为 200 时 Nginx 会判断鉴权通过,进而从配置的文件目录下载文件 ctx.status = 200; } else { ctx.status = 401; ctx.set('WWW-Authenticate', 'Basic realm="Restricted Area"'); } }
猜你喜欢
- 2024-10-10 【Nginx基础】Nginx对用户名和密码做限制的实现示例
- 2024-10-10 Centos7 环境下生成自签名 SSL 证书的具体过程:
- 2024-10-10 Nginx学习笔记(07) 限制特定用户访问的 auth_basic 模块
- 2024-10-10 elasticsearch 集群身份认证与用户鉴权
- 2024-10-10 学成在线 类慕课网 微服务教育网-第17天-讲义-用户认证 Zuul
- 2024-10-10 CA双向认证完整实现步骤(证书双向认证流程)
- 2024-10-10 自建CA和nginx实现ssl双向认证(nginx证书双向认证)
- 2024-10-10 「Kubernetes」第九章:认证(certified kubernetes admin)
- 2024-10-10 免费https证书申请及部署教程(https://sq.cfca.com.cn数字证书申请平台)
- 2024-10-10 通过配置nginx开启登陆网站验证功能(不修改网站代码)
你 发表评论:
欢迎- 最近发表
-
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- linux移植(Linux移植freemodbus)
- 独家解读:Win10预览版9879为何无法识别硬盘
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- Docker镜像瘦身(docker 减小镜像大小)
- 在linux上安装ollama(linux安装locale)
- 渗透测试系统Kali推出Docker镜像(kali linux渗透测试技术详解pdf)
- Linux环境中部署Harbor私有镜像仓库
- linux之间传文件命令之Rsync傻瓜式教程
- 解决ollama在linux中安装或升级时,通过国内镜像缩短安装时长
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)