提问人:Berg 提问时间:10/6/2023 更新时间:10/9/2023 访问量:118
如何将 ClientID 和 Authority 存储在托管在 Azure 和公共的 React 应用程序中?
How to store ClientID and Authority in an React Application that is hosted on Azure and public?
问:
我正在开发一个 React 应用程序,并且正在为 PublicClientApplication 配置 msalconfig.我是 Azure 和前端开发的新手。此外,我们是一个非常小的团队:(
我的问题: 硬编码 clientID 和权限:我阅读了多篇帖子,建议 clientID 和权限不是机密,可以直接存储在应用程序中。但是,我不愿对这些值进行硬编码,因为这似乎有风险。
Azure 应用服务配置:我还阅读了 Azure 应用服务在“配置”部分具有连接字符串/应用程序设置。但是,我不确定如何在 React 应用程序的代码中访问或使用这些设置,因为我是 Azure 新手。
我的第一个 Keyvault 注意事项:最初,我考虑通过 Azure Keyvault 检索 clientId 和颁发机构。但是,要访问 Keyvault,我需要提供机密,但我希望避免将任何此类机密存储在可能公开的客户端应用程序中。
问题: 对 clientID 和权限进行硬编码是一种安全的做法吗?有哪些安全隐患?
如何在 React 应用程序中从 Azure 应用服务访问连接字符串/应用程序设置?或者我什至应该使用它们?
使用的技术: 反应 维特 Azure 服务
后端只是 nodejs
import {Configuration, AccountInfo} from '@azure/msal-browser';
let MSAL_CONFIG: Configuration;
export const setupMSALConfig = async () => {
MSAL_CONFIG = {
auth: {
clientId: import.meta.env.VITE_CLIENT_ID as string,
authority: import.meta.env.VITE_AUTHORITY as string,
redirectUri: '/',
},
cache: {
cacheLocation: 'sessionStorage',
storeAuthStateInCookie: true,
},
telemetry: {
application: {
appName: 'App',
appVersion: '1.0.0',
},
},
};
return MSAL_CONFIG;
};
export type {AccountInfo};
export const loginRequest = {
scopes: ['openid', 'profile', 'User.Read'],
};
我尝试对其进行硬编码/从密钥保管库获取信息。这有效,但有其缺点。
答:
对 clientID 和权限进行硬编码是一种安全的做法吗?有哪些安全隐患?
对任何客户端密码进行硬编码都不是一种安全的方法,不建议这样做。
可用于存储客户端密钥的选项之一是使用 。Environment Variables
感谢@TechBrij的解释。
- 我们可以使用后跟变量名称来访问环境变量中的值。
process.env
如何从 Azure 应用服务访问连接字符串/应用程序设置How can I access Connection String/Application Settings from the Azure App Service
首先,我们需要在已部署的 React App 的 Environment Variable 部分设置 Key-Value 对。
- 如上所述设置的变量可在“环境变量”部分 (KUDU) 中找到。
链接到 KUDU - DeployedAppName.scm.azurewebsites.net
- 现在您可以访问 as
ClientID
const clientid = process.env.ClientID;
- 但与环境变量相比,使用 Azure 是更安全、更好的机密存储方式。
Key Vault
但是要访问 Keyvault,我需要提供一个机密,
我们只需要传递 KVName 和 Secret 名称。 无需在客户端应用程序中存储密钥值。
评论
process.env
ClientID
TenantID
ClientID
TenantID
ClientID
TenantID
评论