浏览器扩展MSAL认证代码含Client ID,能否推送至GitHub?
MSAL Client ID 公开仓库推送的安全问题
能不能直接把带真实Client ID的代码推去公开GitHub?
绝对不行。虽说浏览器扩展这类Public Client的Client ID本身不算严格保密的信息(Azure AD里Public Client不需要存客户端密钥),但硬编码到公开代码里纯属给自己找麻烦——比如有人拿你的Client ID做钓鱼页面,诱导用户授权,要是你给应用开了太宽的权限,风险更大。
别人拿到我的Client ID能用吗?
得看你Azure AD应用的配置:如果你严格指定了重定向URI是你扩展的专属地址,那别人就算拿到Client ID,在其他域名下发起的认证请求会被Azure AD直接拒绝。但要是你配置了允许任意URI,或者有其他配置漏洞,就可能被滥用。
安全推送的解决办法
针对浏览器扩展的场景,给你几个实用方案:
- 用扩展存储存配置:把Client ID放到
chrome.storage或者browser.storage里,要么让用户在扩展设置页自行输入(如果是通用型扩展),要么打包的时候再把真实值注入进去。 - 构建工具+环境变量:开发时用环境变量存Client ID,用Webpack、Vite这类工具在构建阶段把变量替换到代码里,仓库里只留占位符就行。
- 锁死Azure AD配置:如果非得公开代码,一定要把应用的重定向URI严格限制为你的扩展专属地址,同时把权限缩到最小必要范围,尽量降低滥用风险。
修改后的代码示例(用占位符):
// Microsoft Authentication Library (MSAL) instance // Client ID is the Application (client) ID GUID from the Azure portal const msalInstance = new msal.PublicClientApplication({ auth: { authority: "https://login.microsoftonline.com/common/", clientId: process.env.MSAL_CLIENT_ID || "YOUR_CLIENT_ID_PLACEHOLDER", redirectUri: redirectUri, postLogoutRedirectUri: redirectUri }, cache: { cacheLocation: "localStorage" } });
内容的提问来源于stack exchange,提问作者TheRizza
相关产品推荐
相关产品推荐

