http headers
所有从客户端发起的https/http的流量会先进入lzc-ingress这个组件进行分流。
lzc-ingress主要处理以下任务
- 对http请求进行鉴权,若未登录则跳转到登录页面
- 根据请求的域名分流到不同的lzcapp后端
在鉴权成功转发给具体的lzcapp前,lzc-ingress会设置以下额外的http headers
X-HC-User-ID登录的UID(用户名)X-HC-Device-ID客户端位于本微服内的唯一ID, 应用程序可以使用这个作为设备标识符X-HC-Device-PeerID客户端的peerid, 仅内部使用。X-HC-Device-Version客户端的内核版本号X-HC-Login-Time微服客户端最后一次的登录时间, 格式为unix时间戳(一个int32的整数)X-HC-User-Role普通用户为:"NORMAL", 管理员用户为: "ADMIN"X-HC-SOURCE请求来源语义。当前可能取值为client、app:self、app:<pkg_id>、systemX-Forwarded-Proto固定为"https",以便少量强制https的应用可以正常工作X-Forwarded-By固定为"lzc-ingress"X-HC-User-Ticket用户票据。当前版本中,系统可能在已登录请求上下文中默认提供;未来版本将改为只能通过显式权限申请获得。应用不应假设该 header 会永久默认存在。
lzc-ingress是通过HC-Auth-Token这个cookie来进行鉴权的(客户端内是通过其他内部方式完成鉴权)。
当lzc-ingress遇到此cookie值无效或为空时,且目标地址不是public_path,则会跳转到登录页面。
当目标地址为public_path时, lzc-ingress依旧会进行一次鉴权,但不会跳转到登录页面。
- 如果鉴权失败,则会清空上述
X-HC-XX的header,避免一些安全风险 - 如果鉴权成功,则会带上上述
X-HC-XX的header。
也就是lzcapp开发者在编写后端代码时,不用考虑是否为public_path, 直接信任X-HC-User-ID即可。
X-HC-User-Ticket
X-HC-User-Ticket 用于表达“应用以某个真实用户身份继续访问自身或其他 lzcapp 服务”的用户票据语义。
约束:
- 当前能力最低要求
lzcos v1.5.2。 - 当前版本中,
X-HC-User-Ticket可能由系统在已登录请求上下文中默认提供。 - 当前默认提供方式只是临时行为,不做兼容性保障。
- 预计在
lzcos v1.7.x,系统会改为只有用户明确授权后,应用才能获取该票据。 - 应用不应把“当前版本默认存在”视为长期兼容承诺。
- 应用间访问场景请同时参考 应用间访问。
- 新能力设计应统一以
X-HC-User-Ticket为最终字段名,不再使用X-HC-User-Delegation。
X-HC-SOURCE
X-HC-SOURCE 用于表达当前请求的业务来源语义。
当前可能取值:
clientapp:selfapp:<pkg_id>system
说明:
client表示真实客户端访问。app:self表示应用代表当前真实用户访问自己。app:<pkg_id>表示其他应用代表当前真实用户访问当前应用。- 该 header 由系统生成,应用不应信任客户端自行传入的值。