不用第三方 auth 库纯手写的情况下,怎么处理例如 passwd 或 token 之类的敏感信息? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
netabare
V2EX    问与答

不用第三方 auth 库纯手写的情况下,怎么处理例如 passwd 或 token 之类的敏感信息?

  •  
  •   netabare 2022-12-31 07:53:34 +08:00 1590 次点击
    这是一个创建于 1015 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为有需要通过 keycloak 进行授权的需求,一开始是想找看有没有官方提供的 lib ,结果发现因为各种原因(比如说框架太新、依赖没更上等)并没有能用的,强行找一个的结果就是出现各种诡异的错误(比如说 userid 始终为 null )。

    然后考虑能不能直接调用 http 请求,自行拼接 header 和 body……postman 测试完全可以,只要自己记得保存 access_token 和 refresh_token 就行了。但是问题来了……

    把登入时需要的信息保存下来,也就是大概会创建一个长这样的 store:

    { client_id: string, client_secret: string, ... } 

    而且在调用 http request 的时候,也会把用户名和密码直接传过去。如果在浏览器里面打断点的话,可以直接取得当前的用户名和密码。就算是 app client ,也是可以通过 hack 进内存的方式获得这些敏感信息的吧。

    如果把这些 passwd 和 token 在 store 里面 encrypt 的话,问题在于和 keycloak 通信的时候需要传输这个 token 本身,也就是说 encrypt 的内容必须能够被解密,在已知源代码或源代码产生物的时候,这样就意味着白加密了。

    那么一般对待这些敏感信息的话,该用什么方式来处理以防止信息泄漏呢?

    话说过来也看了一下现在在用的客户端开发的框架里面的非官方 keycloak 封装库……感觉就是直接在 http api 上封装了一层,压根没有讨论到加密的内容……所以大概也是不符合要求的了。

    2 条回复    2022-12-31 09:15:40 +08:00
    Rocketer
        1
    Rocketer  
       2022-12-31 08:26:44 +08:00 via iPhone   1
    再读一遍 oauth 的原理吧,根本不用加密,也不要在 token 里存密码等敏感信息。

    所谓 token ,就是一段能验证真伪的内容,一般存个用户 ID 就足够了。向服务端发请求时带上 token ,服务端就可以读出明文存储的用户 ID ,然后通过 token 里的附加信息验证真伪。确认用户身份后该干啥干啥。这里面没有涉及任何密码的验证。
    netabare
        2
    netabare  
    OP
       2022-12-31 09:15:40 +08:00   1
    @Rocketer 这样呀……感谢解答。

    看了一下这个讨论串( https://www.zhihu.com/question/20274730 ),oauth 好像也无法保证 secret 等内容泄漏的时候该怎么办,所以是要用 `process.env` 来存例如 secret 等关键信息嘛。

    之前的想法是在客户端单独写个登入界面取得用户名密码后发起请求,这么看来感觉还是要用 Authorization code 跳转 auth 服务器登入后拿 code 的流程来做了。按照这个流程的话,在客户端里确实不需要和用户名密码打交道了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5382 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 09:13 PVG 17:13 LAX 02:13 JFK 05:13
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86