小红书实习
# 目前简历
1. 设计搭建了基于SAML协议的公司内部业务系统SSO单点登录,结合Open SAML工具实现安全的登录和注销,提升系统安全和用户体验。
2. 负责开发和实现 OIDC 协议,并将公司员工钉钉登录用OIDC的方式接入公司内部 SSO 认证系统,提高了系统安全性和用户体验。
3. 负责公司账户业务系统重构,双写迁移MongoDB至MySQL,提升响应速度、稳定性,无停机迁移。
4. 对风控累积量平台 Flash 存储结构进行优化。重新设计 Flash 的存储结构和上层实现,解决原来老系统读放大的问题,使缓存 redkv 流量下降 80% 。
5. 分析风控中哪些实体会对已经上线的策略产生影响,并设计上报至公司内部的xray平台,达到在风控中因修改出现问题时能够快速定位操作人、操作类型等。
2
3
4
5
- 什么是SSO。公司内部为什么会有 sso。什么是SAML SSO,怎么设计的?
当时讨论的SAML迁移方案:[SAML迁移](http://other-file-manager.oss-cn-hangzhou.aliyuncs.com/xiaohongshu/20230716200259_SAML SSO实现现状与迁移方案.pdf)
其他网站对SAML的解释: authing (opens new window)
开发当中有没有遇到什么问题:
①创建新的表sp_metadata 。创建新的rpc接口,通过thrift
②协议对比,构造samlResponse,对sp方无感,我们只需要修改idp方。通过预期标签和构造标签进行对比,找出相应的缺失部分(最艰难)
③证书错误login2和login3证书不同
SAML中比较重要的标签
Issuer: idp方唯一标识
Attribute:相关属性
ID: 与request对应的唯一标识
Signature:验签
- OIDC协议是什么?和SAML有什么区别?为什么来做的OIDC。证书是怎么获得的?单点登录还有哪些协议
- OIDC简介 (opens new window)
- OIDC与SAML区别 (opens new window)
- 钉钉接入OIDC
- 所有协议 (opens new window)
- 怎么获取证书 (opens new window)
- 数据库迁移
调研:sso重构数据层实现现状调研 (opens new window)
方案:迁移方案、开发方案.pdf (opens new window)
复盘:SSO重构项目复盘 (opens new window)
①mysql相关表
表结构制定中遇到了哪些问题?
oid问题
mongo中为null的字段,迁移到mysql后应该是什么
由于mongo表无schema限制,mysql表有schema限制,因此部分字段迁到mysql后数据会发生改变:
a. 字符类型字段,若mongo数据为null,迁移到mysql后变为 空字符串
b. 日期类型字段,若mongo数据为null,迁移到mysql后变为 CURRENT_TIMESTAMP(mysql datetime类型字段的默认值)
- 联合索引问题,oid字段需要单独加唯一索引
②更改java层代码
- 如何设计?
最小接口(接口隔离):
● 接口应该尽量正交
单一职责:
● 在设计时,接口应该(几乎)完全不与具体的数据库相关。
db 层的重要设计目标之一是屏蔽数据在存储层的差异。
● 在设计以及实现时,单一接口内不允许同时包含读写两种数据库操作。
● 接口的实现应该类似 fp 的纯函数。
写接口的调用不应引起任何除向数据库网络 IO 外的其他副作用,例如 uuid 生成,password 带 salt hash 等。
写接口对同样的入参执行无限次应该永远发出相同的数据库写请求。
● 尽量少或不对入参做修改。
仅包含必要的到存储层数据类型的转换,这一转换也应是抽象的,对上层应该做到不被感知。
● 不应与业务相关,不包含任何业务逻辑。
● 入参的合法性,由调用方保证。
● 异常封装为通用的业务异常。
● 返回的复杂类型使用通用的 DTO。
工程:
● 保持单一写入口,对外不暴露数据库接口,保证数据写入完全可控。
● 更新数据时尽量不要使用 upsert,存在并发同步问题。
实际上是对比Mongo rep层新增mysql repo层
③dts同步
④增量数据同步
- Flash平台研发
- 本质是日志的处理
开发同一的xray调度接口,供业务方使用
- 项目中有什么收获(技术、非技术)
- 为什么想要接触更大的挑战(责任==挑战),b与c的区别