百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Nginx 结合服务端实现下载文件鉴权

off999 2025-02-18 12:51 44 浏览 0 评论

背景

通过 URL 在浏览器下载文件时,并且要判断有权限的用户才能下载。

功能描述

浏览器输入下载 URL,吊起浏览器自带的用户名和密码输入框,将填入的用户信息传给服务端,校验通过下载文件,校验不通过重新输入。

实现思路

  1. 在 Nginx 中配置下载路径拦截
  2. 定义一个需要认证才能访问的文件下载路径设置 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 写的服务端

  1. app/router.js 中添加对应的鉴权路由
ts

复制代码

import { Application } from'egg';exportdefault (app: Application) => {const { controller, router } = app; router.get('auth/protected-check', controller.auth.protectedCheck);}

  1. 在对应的 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"'); } }

相关推荐

Python进阶教程:如何自定义异常(附电商库存管理案例)

在Python中,你可以使用异常(exceptions)来预期和处理那些干扰程序正常执行流程的错误。Python内置了许多常见的异常,例如ValueError、TypeError和KeyError,但...

Python 中使用try来处理异常的方法

六二,直方大,不习无不利。在学习python中会经常遇到各种异常事件;现归纳一下如何捕捉并处理这些异常;今天来给大家整理一下。一、异常的概念什么是异常?异常即是一个事件,该事件会在程序执行过程中发生,...

python入门-day3:异常处理(异常处理方法及流程python)

异常处理的内容,包括try、except、finally的用法,介绍常见异常类型,最后通过一个练习(处理用户输入的非法数字)帮你把知识点串起来。我会用简单易懂的语言,确保新手也能轻松掌握。Da...

16-Python的异常(python的异常类型及处理)

1-异常介绍1-2-什么是异常异常是程序运行时发生的错误或异常情况,它会中断正常的程序执行流程;Python使用异常处理机制来处理这些运行时错误。1-4-为什么要捕获异常异常会中断程序的执行;1-3-...

Python 异常处理详解(python中异常)

一、什么是异常?核心定义在程序运行过程中,当Python解释器检测到无法继续执行的操作时,会立即创建异常对象并中断当前流程。此时若不处理异常,程序将直接崩溃退出。典型场景与原理用户输入无效数据nu...

掌握这些 Python 异常处理技巧,代码稳如老狗!

在Python中,异常处理不仅可以帮助我们捕获和处理错误,还能让我们更清晰地了解错误发生的背景。1.异常层次结构Python内置了许多异常,我们在编程时可能会经常遇到,例如ZeroDivisi...

python异常处理机制最佳实践(python异常处理总结)

Python异常处理的最佳实践需要兼顾代码健壮性、可读性和性能。以下是经过工程验证的10个核心原则和技巧:一、精准捕获原则避免裸except禁止使用except:或exceptExce...

python之异常处理(python异常处理过程可以概括为三个步骤)

异常语法try:<代码块>except<异常类型>:<代码块>捕获通用异常try:<代码块>exceptExceptionas...

一天学一点,今天学习掌握Python:异常处理与文件操作全攻略

这一笔记记录了我学习python的异常和文件的操作,这也是针对Python异常和文件操作教程的进一步优化建议和注意事项:异常处理优化1.避免过度捕获异常o不要为了捕获异常而捕获异常,应根据实际需求...

新手学Python避坑,学习效率狂飙! 十二、Python 异常处理

异常处理系统分享在Python里,异常指的是程序运行期间出现的错误。当异常发生时,正常的程序流程会被中断,Python会抛出异常对象。为了防止程序因异常而崩溃,你可以使用异常处理机制捕获并处理这...

Python异常处理全攻略:从入门到精通,轻松应对代码“翻车”时刻

喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。引言:异常处理——代码世界的“保险丝”在编程的世界里,错误和异常就像路上的“坑”,稍不留神就会让你的程序“翻车”。而异常处理,就是...

Python异常处理全面指南(python异常处理步骤)

Python异常处理完全指南异常处理是编写健壮程序的关键技术。Python提供了灵活的语法和丰富的内置异常类型,能够有效管理程序运行时的错误。以下是Python异常处理的全面指南:一、异常处理...

进阶突破python——异常处理机制(异常处理用什么语句python)

Python的异常处理机制是其健壮性设计的核心,通过清晰的语法结构和灵活的处理策略实现错误管理。以下从核心语法、异常对象、高级特性和最佳实践四个维度详解:一、核心语法结构Python使用try-...

Python基础编程——详细介绍Python的异常捕获示例代码

这篇文章主要为大家详细介绍了python的异常捕获,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助①捕捉一个异常捕捉一个异常以用0作为除数会得到Ze...

Python学习 -- 异常捕获技巧(python怎么捕获异常)

在编写Python代码时,异常处理是确保程序稳定性的关键。Python提供了灵活的异常捕获机制,包括try...except语句、try...except...else语句和try...except....

取消回复欢迎 发表评论: