无需额外Angular库对接IdentityServer4/5的技术问题咨询
解答
1. 浏览器端存放client id与client secret的安全性
- client id属于OIDC客户端的公开标识,设计上就允许公开暴露,放在浏览器端不存在安全问题。
- client secret绝对不能存放在浏览器端,你看到的示例如果在前端代码中嵌入secret属于错误用法。针对SPA场景的标准授权码流+PKCE模式本身就不需要使用client secret,IdentityServer4/5原生支持该模式,完全不需要把secret暴露到公网环境。
2. 对接IdentityServer4/5的实现方案选择
不需要强制在Angular客户端实现认证逻辑,你提到的「仅服务端作为client、所有客户端请求透传至服务端处理」的方案完全可行,这就是当前业内更推荐的BFF(Backend For Frontend)认证架构,相比纯前端实现的方案安全性更高:
- 所有敏感凭证(access token、refresh token)全部存储在服务端,不会暴露给前端JS运行环境,能大幅降低XSS攻击导致的凭证泄露风险
- 前端不需要引入任何OIDC相关依赖,只需要和自有后端交互,认证逻辑全部收敛在服务端,维护成本更低
- 你可以直接使用.NET Core官方的OIDC认证处理程序对接IdentityServer,配置为Cookie认证模式,前端请求自动携带Cookie即可,后端负责完成认证、令牌刷新、请求透传的全流程,对前端完全透明。
如果你的两个站点需要统一认证逻辑,也可以额外部署统一的认证网关作为BFF层,统一处理两个站点的所有认证相关请求。
内容的提问来源于stack exchange,提问作者Aiham Abu Rafaa
相关产品推荐
相关产品推荐

