postman | 通过cookie访问有账号密码的URL

本文详细介绍了如何通过浏览器开发者工具获取已登录状态的Cookie,并利用Postman工具进行测试,展示了Cookie在Session跟踪中的作用。

1. 查询cookie

Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。cookie中存储着用户的授权信息,在cookie中有token值,先找出登入后的token值,已经登入系统的token值可以通过服务器的验证,可以访问该网页。

我们先登录一个网页才能拿到cookie,比如我这里是csdn的写文章页面,已经登录。

步骤

  • 打开开发人员工具面板:按F12,或者Fn+F12,我的笔记本是需要按Fn+F12的,如果是Microsoft edge(win10自带的浏览器),也可以打开开发人员工具

在这里插入图片描述

  • 选择网络,内容类型为文档,这个时候下面可能没有URL,刷新一下网页就有了,然后选择要测试的URL,具体如下图:
    1
  • 点击选中的URL,可以看到对应的cookie,右键,复制cookie。
    3
  1. cookie复制到postman

    步骤

  • headers上key填cookie,value就粘贴前面复制的cookie。5
  • 这里先不给cookie打钩,对比一下填没填cookie的差别,可以看到,没有填cookie,直接发送请求,它是会要求先登录的。
    8
  • 这里给cookie打钩,可以看到,不用登录,可以直接写文章了
    -
<think>我们正在解决Postman调用授权接口返回401的问题。根据用户上下文,我们知道在网页访问是成功的,但在Postman中失败。这通常是因为网页访问时用户已经登录(有有效的会话),而Postman请求缺少必要的认证信息。 问题核心:`/oauth/authorize`端点需要用户认证(即登录状态)。在浏览器中,用户通过登录表单已经建立了会话(通常通过Cookie维护)。而Postman默认不会携带浏览器的Cookie,因此需要手动添加会话信息。 解决方案: 1. 在浏览器中成功登录,获取会话Cookie(通常是JSESSIONID)。 2. 在Postman中,将获取到的Cookie添加到请求的Headers中。 具体步骤: 步骤1:通过浏览器登录获取Cookie - 使用浏览器访问应用登录页面(例如:http://192.168.8.174:8999/login) - 输入正确的用户名和密码进行登录 - 登录成功后,打开开发者工具(F12),在Application或Storage标签页中找到Cookies,复制JSESSIONID的值。 步骤2:在Postman中配置Cookie - 打开Postman,创建新的GET请求 - 输入URL:`http://192.168.8.174:8999/oauth/authorize?response_type=code&client_id=client-id&redirect_uri=http://www.baidu.com&scope=all` - 在Headers标签页添加一个Header: Key: `Cookie` Value: `JSESSIONID=复制的值` (例如:`JSESSIONID=123456789ABCDEF`) 步骤3:发送请求 - 发送请求,此时应该会得到302重定向响应,重定向到`redirect_uri`并附带code参数(注意:在Postman中可能需要关闭自动跟随重定向,才能看到302响应和Location头) 注意:如果仍然返回401,请检查: - Cookie是否过期?重新登录获取新的Cookie - 请求参数(尤其是`client_id`和`redirect_uri`)是否与服务器注册的一致? - 服务器端是否配置了CSRF保护?如果是,可能需要禁用CSRF(对于OAuth2授权端点,通常可以禁用CSRF,因为OAuth2有自己的安全机制) 关于CSRF保护:在Spring Security中,我们可以针对特定路径禁用CSRF。例如: ```java @Override protected void configure(HttpSecurity http) throws Exception { http .csrf().ignoringAntMatchers("/oauth/authorize"); // 禁用授权端点的CSRF } ``` 另外,根据引用[1]的内容,系统中有管理员和普通用户的角色区分,确保你登录的用户拥有访问OAuth2授权端点的权限。 如果以上步骤还不能解决问题,可以尝试在Postman中设置用户认证信息(如Basic Auth)?但请注意,`/oauth/authorize`端点通常是用户认证(即用户登录)而不是客户端认证,客户端认证是在`/oauth/token`端点上使用的。 总结:Postman调用`/oauth/authorize`接口401错误的根本原因是缺少用户会话(Cookie)。添加正确的Cookie即可解决。 相关问题: 1. 如何在Postman中管理Cookie? 2. OAuth2授权码流程中,用户认证和客户端认证的区别是什么? 3. 如何在Spring Security中为特定端点禁用CSRF保护? 4. 如何确保不同的用户角色(如管理员和普通用户)具有正确的OAuth2授权访问权限? 参考引用[1]中关于角色权限的说明,确保测试使用的用户具有足够的权限(例如管理员角色)[^1]。 </think>### 🔍 解决 Postman 调用 OAuth2 授权接口 401 错误的完整方案 #### 一、问题本质分析 在网页访问成功但 Postman 调用失败的情况下,核心问题在于 **用户会话状态缺失**: 1. **浏览器环境**:用户登录后会产生会话 Cookie(如 `JSESSIONID`),自动携带在后续请求中 2. **Postman 环境**:默认不会携带浏览器 Cookie,导致服务器判定为"未认证用户"[^1] 3. **权限验证机制**:系统验证用户角色权限时,无会话信息将直接拒绝访问 `/oauth/authorize` 端点 #### 二、具体解决步骤 ##### 步骤1:获取有效会话 Cookie 1. 浏览器访问登录页(如 `http://192.168.8.174:8999/login`) 2. 使用管理员账号登录(管理员拥有完整权限[^1]) 3. 按 F12 打开开发者工具 → Application → Cookies ```http # 示例 Cookie 格式 JSESSIONID: A3B5F7C9-D0E2-4F6A-8B1C-3D5E7F9A1B2C ``` ##### 步骤2:Postman 配置会话 1. 新建 GET 请求: ``` http://192.168.8.174:8999/oauth/authorize?response_type=code&client_id=client-id&redirect_uri=http://www.baidu.com&scope=all ``` 2. 在 Headers 添加: ```bash Cookie: JSESSIONID=A3B5F7C9-D0E2-4F6A-8B1C-3D5E7F9A1B2C # 替换为实际值 ``` 3. 关闭重定向跟踪(避免 code 被消耗): ```mermaid graph LR 设置 --> Settings --> 取消勾选'Automatically follow redirects' ``` ##### 步骤3:验证角色权限(关键步骤) 1. **确保登录账号是管理员角色**(普通用户可能仅有查询权限[^1]) 2. 在 Postman 预执行脚本添加权限验证: ```javascript // 测试脚本:验证用户角色 pm.sendRequest({ url: "http://192.168.8.174:8999/user/me", method: "GET", headers: { Cookie: pm.request.headers.get("Cookie") } }, (err, res) => { if (err) console.error("会话无效"); else if (!res.json().roles.includes("ADMIN")) console.warn("当前用户权限不足"); }); ``` #### 三、进阶排查方案 当基础方案无效时,检查以下配置: | 排查点 | 检测方法 | 解决方案 | |--------------------------|-----------------------------------|----------------------------------------| | CSRF 保护 | 查看控制台是否出现 `_csrf` 错误 | 在 Spring Security 配置中禁用 CSRF | | Cookie 作用域 | 检查浏览器 Cookie 的 Domain 属性 | 确保 Domain 包含 `192.168.8.174` | | 权限配置 | 查看用户角色分配记录[^1] | 确认管理员角色拥有 `/oauth/**` 访问| | HTTPS 安全传输 | 检查是否强制 HTTPS | Postman 关闭 SSL 验证或在本地配置证书 | **Spring Security 配置示例**: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() // 关键:禁用CSRF .authorizeRequests() .antMatchers("/oauth/authorize").hasRole("ADMIN") // 管理员权限控制[^1] // 其他配置... } } ``` #### 四、全流程测试验证 ```mermaid sequenceDiagram participant Postman participant Server participant Browser Postman->>Browser: 手动登录获取Cookie Browser->>Server: 用户认证 Server-->>Browser: Set-Cookie: JSESSIONID Postman->>Server: 携带Cookie请求/oauth/authorize Server->>Server: 验证会话+角色权限[^1] alt 管理员角色 Server-->>Postman: 302 Redirect with code else 普通用户 Server-->>Postman: 401 Unauthorized end ``` #### 五、常见错误解决方案 1. **持续返回 401**: - 清除浏览器所有 Cookie 后重新登录 - 在 Postman 中点击 `Cookies` 链接管理本地 Cookie 2. **redirect_uri 不匹配**: ```java // 确保服务端配置包含精确URL .redirectUris("http://www.baidu.com") ``` 3. **权限验证失败**: - 检查用户是否被正确分配管理员角色[^1] - 验证权限表达式:`hasRole('ADMIN')` 而非 `hasAuthority('ADMIN')` --- ### ❓ 相关问题 1. 如何在分布式系统中同步会话状态以实现多节点认证? 2. 当使用 JWT 替代会话 Cookie 时,OAuth2 授权流程需要哪些调整? 3. 如何在不暴露管理员凭证的情况下自动化测试 OAuth2 授权接口? 4. 对于普通用户角色,如何安全地实现 OAuth2 授权码流程? 5. 在微服务架构下,如何集中管理 OAuth2 客户端的 redirect_uri 配置?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值