openBMC web会话管理
session
在openBMC中,web会话显示会话session列表= 所有通过bmcweb服务(HTTP/HTTPS)建立的会话:包括:
Redfish 标准接口(
/redfish/v1/SessionService/Sessions)传统 REST 接口(
/login)
不包括SSH 会话和IPMI 会话。
session创建
redfish
Redfish协议规定的标准登录方式,核心操作就是创建一个Session资源。
请求方法:
POST请求URL:
https://<BMC_IP>/redfish/v1/SessionService/Sessions请求头:
Content-Type: application/json请求体:一个JSON对象,包含用户名和密码。
json
{ "UserName": "root", "Password": "0penBmc" }
一个成功的请求会返回一个201 Created状态码,并在响应头中包含一个名为X-Auth-Token的字段。后续的所有API请求都需要在请求头中携带这个Token来进行身份认证
响应如下:
{
"@odata.id": "/redfish/v1/SessionService/Sessions/pwFE8aMLDO",
"@odata.type": "#Session.v1_7_0.Session",
"ClientOriginIPAddress": "192.168.20.101",
"Description": "Manager User Session",
"Id": "pwFE8aMLDO",
"Name": "User Session",
"Roles": [
"Administrator"
],
"UserName": "root"
}
上图是给webui使用的,即通过浏览器的方式去访问
X-Auth-Token是通过API的方式去访问的,常用于postman curl以及自动化测试
Basic Auth
需要注意的是,Openbmc的bmcweb实现中,使用Basic Auth(即在请求头中直接携带Authorization: Basic <credentials>)时,也可能会隐式地创建或复用一个Session。
但这并非Redfish规范的要求。规范明确指出,Basic Auth与Session是两种完全独立的认证机制,Basic Auth本身不应该创建Session。因此,OpenBMC的这种行为是一个具体实现细节,并非标准做法。
session get
有两种:获取所有session信息和单个session。可以直接使用之前创建时保留的token访问:
session安全性和持久性
理论上,如果普通用户能登录到BMC的操作系统(Shell),并读取bmcweb_persistent_data.json文件,就可能拿到所有Token。但OpenBMC已经通过文件系统权限(如将文件权限设为640)来防范这一点,确保只有特定用户(如root或bmcweb组)能读取该文件。