首页
学习
活动
专区
圈层
工具
发布

架构必备「RESTful API」设计技巧经验总结

对于鉴权错误 401:访问令牌没有提供,或者无效。 403:访问令牌有效,但没有权限。 对于标准状态 200: 所有的都正确。 500: 服务器内部抛出错误。...登录 在我的程序实现中,正常的登录过程如下所示: 1. 通过/login接收邮件和密码。 2. 检查数据库的电子邮件和密码哈希。 3. 创建一个新的刷新令牌和JWT访问令牌。 4....续订令牌 正常的续订验证流程如下所示: 1. 尝试从客户端创建请求时,JWT已经过期。 2. 将刷新令牌提交到/renew。 3. 通过将刷新令牌进行哈希与数据库中保存的进行匹配。 4....成功后,创建新的JWT访问令牌并延长到期时间。 5. 返回访问令牌。 验证令牌 通过检查到期日期和签名哈希可以校验JWT访问令牌的有效性。如果校验失败,则认为是一个无效的令牌。...如果验证通过,则JWT的有效载荷中包含了一个uid,它用于在API响应的上下文中传递一个对应的user对象来检查权限/角色,并相应地创建/读取/更新/删除数据。

2.7K30

5个REST API安全准则

必须确保传入的HTTP方法对于会话令牌/API密钥和相关资源集合,操作和记录都是有效的。 例如,如果您有一个RESTful API的库,不允许匿名用户删除书目录条目,但他们可以获得书目录条目。...例如,GET请求可能是对应读取实体,而PUT将更新现有实体,POST将创建一个新实体,DELETE将删除现有实体。 只允许需要的动词,其他动词将返回适当的响应代码 ( 例如,禁止一个403)。...当设计REST API时,不要只使用200成功或404错误。 以下是每个REST API状态返回代码要考虑的一些指南。 正确的错误处理可以帮助验证传入的请求,并更好地识别潜在的安全风险。...401未授权 -错误或没有提供任何authencation ID /密码。 403禁止 -当身份验证成功,但身份验证的用户没有权限使用请求的资源。 404未找到 -当请求一个不存在的资源。...403“禁止”的真正含义未经授权,“我明白您的凭据,但很抱歉,你是不允许的!” 概要 在这篇文章中,介绍了5个RESTful API安全问题和如何解决这些问题的指南。

5.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    手把手教你排查403 Forbidden错误是什么意思?

    某些应用会在403响应中嵌入子错误代码,如"403.1 - 执行访问被禁止"或"403.18 - 无法在当前应用程序池中执行请求的URL",这些细节能直接指向配置层面的问题。...在微服务架构中,服务间的认证通常采用mTLS(双向TLS)或JWT令牌。403错误可能表示客户端证书未被服务端信任,或JWT签名验证失败。...排查此类问题需要检查证书链的完整性、中间CA证书的配置、以及系统时间的同步状态——时间偏差可能导致令牌有效期验证失败。...当业务系统的出口IP被列入此类数据库时,即便请求本身完全合规,也可能遭遇无差别的403拦截。这种情况下,切换至具备良好信誉记录的住宅代理网络是有效的解决方案。...在分布式系统中,还需关注权限数据的同步延迟问题——刚更新的角色权限可能需要时间传播到所有服务节点。代理网络环境的调试技巧当业务系统通过代理网络访问外部服务时,403错误的排查复杂度显著增加。

    26820

    JWT在Web应用中的安全登录鉴权与单点登录实现

    JWT通过使用密钥进行签名,确保了数据的完整性和来源的验证。...JWT可以有效地实现SSO,以下是其实现过程:JWT TOKEN实现单点登录(SSO)的Python代码和案例1. 身份验证描述: 用户首次登录时,系统验证身份并生成JWT。...刷新令牌详细策略: 为每个用户会话生成一个唯一的刷新令牌,存储在安全的地方(如服务器端数据库)。当用户从新设备登录时,使旧设备的刷新令牌失效。...令牌黑名单详细策略: 实现一个黑名单系统,用于存储被撤销的令牌。在验证JWT时,首先检查令牌是否在黑名单中。...通知机制详细策略: 当用户的会话被挤掉时,通过电子邮件、短信或应用内通知等方式,及时通知用户。

    1.7K00

    供应链系统前端安全防护:XSS、CSRF与JWT攻防实战

    ,减少XSS攻击面禁止不安全的内联脚本和样式最终效果:通过AI辅助实现的XSS防护体系,成功拦截了测试阶段的所有XSS攻击尝试,包括存储型、反射型和DOM型XSS。...:为每个会话生成唯一CSRF令牌通过Cookie和Header双重传递令牌验证敏感请求的令牌有效性重点逻辑:使用加密安全随机数生成器生成令牌仅对需要保护的HTTP方法进行验证令牌同时通过Cookie和请求头...(访问令牌+刷新令牌)使用不同的密钥和有效期增强安全性实现令牌黑名单支持注销功能设计思路:短期访问令牌减少泄露风险长期刷新令牌支持用户体验黑名单机制处理令牌注销需求重点逻辑:使用不同的密钥签署访问和刷新令牌为每个令牌生成唯一...:通过AI辅助实现的JWT安全方案,提供了全面的令牌管理、安全存储和自动刷新功能。...本文详细记录了以下安全实践:XSS全面防护:通过输入验证、输出编码和C策略构建了三层防护体系CSRF多重防护:结合CSRF令牌、SameSite Cookie和关键操作验证有效防止请求伪造JWT安全实践

    49020

    基于.NetCore开发博客项目 StarBlog - (32) 第一期完结

    这些响应并不是通过异常机制处理的,因此常规的异常处理中间件或 UseExceptionHandler 无法捕获和修改这些特定的错误响应。...下面以 JWT 认证为例说明如何自定义 401 和 403 的响应: 配置 JWT 认证以自定义 401 和 403 响应 在 services.AddAuthentication().AddJwtBearer...认证流程中,JwtBearerEvents 类提供了多个事件来处理不同的认证相关情景: OnChallenge - 这个事件是在认证失败时触发的,通常是因为请求中没有提供有效的 JWT 令牌。...OnAuthenticationFailed - 这个事件在认证过程中出现异常时触发。这通常涉及到令牌解析或验证中出现的错误,比如令牌被篡改。在此事件中,你可以记录异常或修改认证失败时的处理逻辑。...OnForbidden - 当用户通过了认证但是不符合特定的授权条件时触发。例如,用户的角色或权限不足以访问某个资源。在此事件中,你可以自定义返回 403 禁止访问的响应。

    67610

    `AccessToken`和`RefreshToken`安全令牌

    使用AccessToken 发送请求:客户端在每次请求受保护资源时,都需要在HTTP请求的头部(Header)中包含AccessToken。...三、刷新AccessToken 监控过期时间:客户端需要监控AccessToken的有效期,并在接近过期时自动刷新。 刷新流程: 使用存储的RefreshToken向服务器发送刷新请求。...使用过期的access_token去请求服务通常会得到一个错误响应,因为服务端会验证令牌的有效性。...这可以通过检查JWT的过期时间声明(exp)来实现,或者根据上次刷新时间来估算。...安全性: 在处理令牌刷新时,确保所有的通信都是通过安全的连接进行,以防止令牌被截获。 日志记录: 对于令牌刷新的尝试和结果,应该进行适当的日志记录,以便于问题的调试和安全审计。

    68110

    资深开发者亲授:.NET 9 应用安全实战指南

    作为资深开发者,我深知安全偷懒的代价——凌晨被生产环境漏洞警报惊醒、用户数据泄露或收到勒索邮件。本文将用真实案例和久经考验的策略,手把手教你加固 .NET 9 应用。 1....API 端点安全加固 安全使用 JWT 令牌 确保 JWT 正确签名并拒绝过期令牌: services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme...ValidateIssuer = false, ValidateAudience = false, ValidateLifetime = true, // 验证有效期...防御 XSS 与 CSRF 启用内容安全策略(CSP) 禁止内联脚本并限制资源来源: app.Use(async (context, next) => { context.Response.Headers.Add...使用 Azure Key Vault、AWS Secrets Manager 或环境变量: var secret = Configuration["SecretKey"]; // 从安全配置读取 强加密机制

    34810

    一文搞懂Cookie、Session、Token、JWT

    示例: 用户希望通过移动应用程序访问他们的电子邮件。应用程序向电子邮件提供商的服务器发送带有用户凭据的请求。成功认证后,服务器发出一个访问令牌。...应用程序存储此令牌,并在随后的API请求中使用它来访问用户的电子邮件。 JWT (JSON Web Tokens) JWT是一种紧凑、安全的表示双方之间传输声明的方法。...当用户想要访问受保护的资源时,客户端在HTTP请求的Authorization头部中包含JWT。服务器验证JWT,如果有效,则授予资源访问权限。...防止CSRF攻击:确保所有敏感操作都通过POST请求执行,使用Spring Security的@csrfProtection注解来启用CSRF保护。...JWT是Token的一种实现方式,具有更高的可移植性和可扩展性。选择合适的技术可以有效地保护系统稳定运行并提高用户体验。

    1.1K10

    VoidProxy平台对多因素认证的绕过机制与防御对策研究

    一旦攻击者控制企业高管或IT管理员的邮箱、云文档或身份管理后台,即可利用B2B协作信任链发起供应链攻击——例如伪造合作方邮件、篡改共享合同、或通过合法API导出敏感数据。...,即使用户登出仍有效;Access Token:短期有效(通常1小时),但可用于调用Microsoft Graph API。...攻击者利用这些令牌可直接通过API访问用户邮箱、OneDrive文件、Teams聊天记录等,完全绕过前端UI与MFA提示。.../.default返回的Access Token可立即用于读取邮件:GET /v1.0/me/messages HTTP/1.1Host: graph.microsoft.comAuthorization...例如,欧盟NIS2指令已要求关键实体实施“强客户认证”(SCA),未来或明确禁止长期有效的非绑定刷新令牌。六、结语VoidProxy平台揭示了当前MFA部署模型在面对实时会话劫持时的根本性不足。

    24810

    让jwt来保护你的接口服务

    以前写过一篇关于接口服务规范的文章,原文在此,里面关于安全性问题重点讲述了通过appid,appkey,timestamp,nonce以及sign来获取token,使用token来保障接口服务的安全。...今天我们来讲述一种更加便捷的方式,使用jwt来生成token。...Playload就是存放有效信息的地方,JWT规定了以下7个字段,建议但不强制使用: iss: jwt签发者 sub: jwt所面向的用户 aud: 接收jwt的一方 exp: jwt的过期时间,这个过期时间必须要大于签发时间... 0.9.0 根据JWT的定义生成一个使用RSA算法加密的,有效期为30分钟的token public...下面这段是我网上看到的一段关于JWT比较适用的场景: 有效期短 只希望被使用一次 比如,用户注册后发一封邮件让其激活账户,通常邮件中需要有一个链接,这个链接需要具备以下的特性:能够标识用户,该链接具有时效性

    83040

    基于OAuth同意滥用的假冒微软应用钓鱼攻击研究

    此类攻击不依赖凭据窃取,而是滥用OAuth 2.0授权框架中的“用户同意”流程,使恶意应用获得长期有效的刷新令牌(refresh token),进而通过Microsoft Graph API静默读取邮件...);用户点击“接受”,微软返回授权码;应用用授权码向令牌端点兑换访问令牌与刷新令牌;应用使用令牌调用Microsoft Graph API。...4.6 Graph API 异常行为监控部署KQL查询,检测异常API调用模式:// 检测单应用大量邮件读取AuditLogs| where OperationName == "Consent to application...5 实验验证在测试租户中模拟攻击流程:注册假冒应用,请求Mail.Read + offline_access;使用普通用户账户完成同意;通过脚本每小时读取100封邮件,持续72小时。...结果:对照组:攻击成功,72小时内读取300封邮件,未触发任何告警;实验组:用户尝试同意时被条件访问策略阻止(62%);若管理员误批准,Cloud Apps在2小时内标记高风险(28%);剩余10%在24

    24410

    JWT在Node.js中的最佳实践

    签名(Signature)通过将头部和编码后的载荷使用指定的算法和密钥进行加密生成。签名的目的是确保令牌的内容没有被篡改。...用户注册和登录逻辑在用户注册时,除了存储用户的基本信息(如用户名、电子邮件等),还需要对密码进行加密处理。...在API中的应用示例以下是一个简单的Node.js中使用JWT实现API身份验证和权限控制的示例:1....只有在请求头中携带有效的JWT时,用户才能获取自己的基本信息。总结在Node.js开发中使用JWT时,遵循这些最佳实践可以确保系统的安全性、高效性以及良好的用户体验。...通过合理的签名算法选择、过期时间设置、使用HTTPS传输以及正确的客户端存储方式等,可以有效地保护用户的信息安全和应用的正常运行。

    1.7K00

    【安全】如果您的JWT被盗,会发生什么?

    以API服务为例:如果您有一个API密钥,可以让您通过服务器端应用程序与API服务进行通信,那么API密钥就是API服务用来“记住”您的身份的密钥,请查看您的帐户详细信息 ,并允许(或禁止)您提出请求。...在此示例中,您的API密钥是您的“令牌”,它允许您访问API。 然而,当大多数人今天谈论令牌时,他们实际上是指JWT(无论好坏)。 什么是JSON Web令牌(JWT)?...JWT时,它可以仅使用用于创建它的“密钥”来验证它 - 从而避免与后端数据库或缓存通信的性能损失,增加每个请求的延迟。...,它将解析标记并使用“密钥”验证它 最后,如果令牌有效并且循环将完成,则服务器端应用程序将处理请求 简而言之:JWT用于识别客户端。...但是,有一件事使得被盗的JWT比被盗的用户名和密码稍微不那么糟糕:时机。由于JWT可以配置为在设定的时间(一分钟,一小时,一天等)后自动过期,因此攻击者只能使用您的JWT访问该服务,直到它过期。

    13.7K30

    API OWASP 标准

    主版本在 URI 中(仅当 API 管理平台不支持基于客户端订阅的版本控制时) API 使用无状态处理(无会话,OpenID 连接令牌是可以的) 没有特殊处理(异步事件) HTTP 方法 GET -...HTTP 状态码 404 用于错误的 URL 400 -responses 有特定错误的附加信息(例如缺少必需的属性) 当 API 使用者使用错误的凭证时使用 401 -response 403 使用有效但请求...API 使用者无法访问的端点或尝试使用他们不允许执行的操作 500 - 当存在 API 使用者无法通过更改请求来解决的内部处理问题时响应 500 -responses 具有特定于应用程序的错误代码...如果使用 ISO 标准中的地理坐标? 有效负载本地化支持或可通过 API 访问的本地化值? 支持错误消息本地化吗?...是否需要在实施前评估消息完整性(通常使用签名和加密的 JWT 令牌作为身份验证和确保完整性)? 是否已根据评估的需要实施消息完整性? UUID 用于标识对象而不是内部 ID?

    3.3K20

    基于Python编写一个调用API的类

    现在后端开发基本上都是写各种API提供给别人使用,我在日常工作里既写API,也经常调用别人写的API。 分享一下经常使用的调用API的模块。 看代码之前会有一些假设,可以帮助理解代码。...: 刷新令牌,可以用来在访问令牌过期后获取新的访问令牌。 错误处理 如果用户名或密码错误,会返回401 Unauthorized错误,并且具有描述性的错误信息。...Connection """ def __init__(self): # 通过环境变量来获取后端的host,而不是硬编码 self.api_url =...(也就是path参数)获取数据返回给前端, 默认是100条数据, 使用于不做任何过滤的情况 """ self.request_jwt()...,有以下几个问题 异常处理只有日志 每个方法都单独请求一次self.request_jwt(),既对后端造成没必要的压力,有增加了自身的耗时 可以使用request.Session()来保持一些header

    48410

    关于 Node.js 的认证方面的教程(很可能)是有误的

    安全问题有自己的问题。虽然这可能看起来像安全性过度,电子邮件地址是你拥有的,而不是你认识的内容,并且会将身份验证因素混合在一起。你的电子邮件地址成为每个帐户的关键,只需将重置令牌发送到电子邮件。...但是,如果攻击者通过 BSON 注入对数据库中的用户对象进行读取访问,或由于配置错误,可以自由访问 Mongo,这些令牌将非常危险了。...错误三:API 令牌 API 令牌是凭据。它们与密码或重置令牌一样敏感。...拥有一个无状态的、可添加黑名单的、可自定义的令牌比十年来使用的旧 API 密钥/私密模式更好。...不幸的是,这教程实际上并不帮助我们,因为它没使用凭证,但是当我们在这里时,我们会很快注意到凭据存储中的错误: 我们将 以明文形式将 JWT 密钥存储在存储库中。 我们将使用对称密码存储密码。

    6.3K90

    高级OAuth钓鱼攻击的演化机制与防御体系构建

    向令牌端点换取访问令牌与刷新令牌;Client使用访问令牌调用受保护资源(如Microsoft Graph API)。...输入凭证并通过MFA后,进入授权确认页面。由于应用名称与图标可自定义,且权限描述使用通用术语(如“读取您的邮件以提供服务”),用户极易误判为合法请求。...返回的JSON响应包含access_token与refresh_token。前者有效期通常为1小时,后者可达90天(取决于租户策略)。攻击者利用刷新令牌可无限续期访问令牌,实现长期潜伏。...获得令牌后,攻击者通过Microsoft Graph API执行侦察:import requeststoken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.xxxxx"headers...可使用Microsoft Graph PowerShell批量设置:# 禁止用户同意应用Set-MgPolicyAuthorizationPolicy -PermissionGrantPolicyId

    28710
    领券