openEuler ceph mgr dashboard 无法登陆 报错 401 Unauthorized You are not authorized to access that resource

博客讲述了作者在使用openEuler系统安装Ceph过程中遇到的登录Dashboard 401错误。问题源于Chrome浏览器的Cookie同源策略和Samesite策略,导致Set-Cookie未生效。通过切换到Edge浏览器解决了登录问题。文章探讨了Chrome的Samesite策略变化及其对安全性的影响,并分享了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里面的错误很明确, 就是没有授权登陆, 但是实际上用户名密码是正确的,已经可以成功拿到token

登陆接口调用

http://192.168.0.13:8080/api/auth

{
	"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJjZXBoLWRhc2hib2FyZCIsImp0aSI6IjVlYjAyN2JlLWNmNGQtNDcxMS05NGM4LTFiNDgxMjgzMzZjOSIsImV4cCI6MTY2OTgzNzU0MSwiaWF0IjoxNjY5ODA4NzQxLCJ1c2VybmFtZSI6Imdzb25nIn0.4xm19Z1a8qBODo1_FbMCC-xoWCM0HR3nbMGaNdXmTQw",
	"username": "admin",
	"permissions": {
		"cephfs": ["read", "update", "delete", "create"],
		"grafana": ["read", "update", "delete", "create"],
		"hosts": ["read", "update", "delete", "create"],
		"iscsi": ["read", "update", "delete", "create"],
		"log": ["read", "update", "delete", "create"],
		"manager": ["read", "update", "delete", "create"],
		"monitor": ["read", "update", "delete", "create"],
		"nfs-ganesha": ["read", "update", "delete", "create"],
		"osd": ["read", "update", "delete", "create"],
		"pool": ["read", "update", "delete", "create"],
		"prometheus": ["read", "update", "delete", "create"],
		"rbd-image": ["read", "update", "delete", "create"],
		"rbd-mirroring": ["read", "update", "delete", "create"],
		"rgw": ["read", "update", "delete", "create"],
		"user": ["read", "update", "delete", "create"],
		"config-opt": ["create", "delete", "read", "update"],
		"dashboard-settings": ["create", "delete", "read", "update"]
	},
	"pwdExpirationDate": null,
	"sso": false,
	"pwdUpdateRequired": false
}

此时无论你怎么排查, 都是按教程来的, 也没有任何错误

账号密码是正确的, 角色权限也都有, 但是就出现这样的问题

我之前使用 Cephadm 安装过一次, 是可以正常登陆的, 但是由于初次使用对osd磁盘不太理解, 导致osd没有自动创建, 由于当时使用的是centos7.9,内核较旧, 所以换成openEuler尝试一下

无奈 openEuler不支持 cephadm, 所以改用 Rook k8s进行安装, 安装成功后, 出现无法登陆 dashborad 的情况, 而且 mon 存在一直重启的现象并且还看不出来任何错误, osd倒是理解清楚了, 可以正常创建识别了, 但由于mon一直重启,让人很痛苦

后来改成 直接手动方式安装, 手动方式安装非常利于对整个组件的理解, 一步一步按教程执行, 很顺利, 但是遇到 python3.10的bug,  报错  Error EINVAL: SystemError: PY_SSIZE_T_CLEAN macro must be defined for '#' formats

这个bug在3.11已经修复, 可是 我使用的openEuler比较新 是22.09版本的, 用的3.10.2 , 这个bug直接导致我无法创建用户

所以决定换成 22.03 LTS版本, 这个版本使用的是python3.9.9 , 不存在 上述的bug

我在单台测试机器上安装试验后,现在dashboard登陆不上, 报 401 , 跟Rook出现的错误是一样的,但是网上基本上找不到这样的错误, 有这样的错误但是没有解决方案, 让人很困惑, 按理说我2次安装都遇到相同的问题, 网上应该很多解决方案,但是并没有

仔细思考了一下, 报401应该是token传的不对, 分析cookie发现了问题, 调用接口

http://192.168.0.13:8080/api/mgr/module/orchestrator  使用的token如下

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2Njg5MTEwNzUsInVzZXIiOiJ7XCJ1c2VySWRcIjo0MTA0NTcsXCJ1c2VyTmFtZVwiOlwieHdrMTExXCJ9In0.yB8zHMOTkK - P3s8Y0ed7aYCmBAyF8Wz0ClyAls7AFf4;
token = eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJjZXBoLWRhc2hib2FyZCIsImp0aSI6IjVlYjAyN2JlLWNmNGQtNDcxMS05NGM4LTFiNDgxMjgzMzZjOSIsImV4cCI6MTY2OTgzNzU0MSwiaWF0IjoxNjY5ODA4NzQxLCJ1c2VybmFtZSI6Imdzb25nIn0 .4 xm19Z1a8qBODo1_FbMCC - xoWCM0HR3nbMGaNdXmTQw

思考到这里就有点感觉了, 换个浏览器试试吧

换成Edge浏览器, 一下子就登陆上了, 柳暗花明的感觉非常棒

然后仔细比较了一下两边的不同

在Edge浏览器, 调用登陆接口时响应头有Set-Cookie返回

Set-C***ookie:

to***ken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJjZXBoLWRhc2hib2FyZCIsImp0aSI6IjA0YzY0MTljLTQ4NjktNGNmNS05OWVjLTU4MjYzYmRiMTcwYyIsImV4cCI6MTY2OTgzODc0NSwiaWF0IjoxNjY5ODA5OTQ1LCJ1c2VybmFtZSI6Imdzb25nIn0.IG3JofYSZjHaU8kbqEcFbwKOCjMaxwMCOS9Cv3vipvU; HttpOnly; Path=/; SameSite=Strict

然后在调用http://192.168.0.13:8080/api/mgr/module/orchestrator请求时

请求头的cookie设置是这样的

Co**okie:

tok**en=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJjZXBoLWRhc2hib2FyZCIsImp0aSI6IjA0YzY0MTljLTQ4NjktNGNmNS05OWVjLTU4MjYzYmRiMTcwYyIsImV4cCI6MTY2OTgzODc0NSwiaWF0IjoxNjY5ODA5OTQ1LCJ1c2VybmFtZSI6Imdzb25nIn0.IG3JofYSZjHaU8kbqEcFbwKOCjMaxwMCOS9Cv3vipvU

这说明 chrome 浏览器屏蔽了 set-cookie, 这也是因为我关闭了ssl 的原因

网上找到一段原因

关于chrome78版本升级之后,关于set-cookie中同源的等级划分以及samesite等级修改方法
1.samesite等级:
Strict
Lax
None
1.1 Strict最为严格,完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。换言之,只有当前网页的 URL 与请求目标一致,才会带上 Cookie。
1.2 Lax规则稍稍放宽,大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外。
1.3 Chrome 计划将Lax变为默认设置。这时,网站可以选择显式关闭SameSite属性,将其设为None。不过,前提是必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效.
google通过调整samesite等级,一定程度上削减了csrf攻击的可能性

换成https依然报 401, 虽然 auth接口响应头有Set-Cookie,但是调用依然不起作用

主要是证书是标红的, 仍然被认定不安全吧, 网上有些介绍前端的技术可以规避这个setCookie不生效问题, 不过 ceph 我仅仅能使用即可, 使用Edge浏览器打开也可以了.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值