使用秘密为你的函数提供敏感配置,比如个人访问令牌和 API 密钥。 绝不要在源代码中硬编码秘密值,也不要将其暴露给前端。 在运行时通过调用 ctx.getSecret() 来读取它们。
先决条件
- 一个已初始化函数的 Fabric 应用。 关于设置说明,请参见“在 Fabric 应用中使用函数”。
- 该应用至少使用
npx rayfin up部署过一次。rayfin secret set和rayfin secret list以当前活动的已部署项为目标,并在不存在远程端点时失败。 - 这是函数所需的秘密值。
设置机密
从应用根节点,启用函数功能并设置密钥:
npx rayfin secret set API_KEY
命令提示输入该值并掩盖你的输入。 要更新已有的秘密,请再次执行同样的命令。 新值取代了现有值。
Important
不要在命令中包含秘密值,也不要提交给源码控制。
列出密钥
列出已配置的机密名称:
npx rayfin secret list
该命令显示秘密名称和时间戳,但从不显示秘密值。
从函数中访问秘密
调用 ctx.getSecret('NAME') 以检索当前调用所需的密钥。 当秘密未配置时,方法会返回 undefined ,因此显式处理可选秘密或提供合适的非秘密默认值。
以下函数从GitHub仓库获取文件。 公共仓库不需要个人访问令牌(PAT)。 对于私有仓库,该函数会将 GITHUB_PAT 密钥添加到请求中:
import {
UserDataFunctions,
type RayfinContext,
} from '@microsoft/fabric-user-data-functions';
const udf = new UserDataFunctions();
udf.func(
'getGitHubFile',
async (
owner: string,
repo: string,
path: string,
ref: string,
ctx: RayfinContext,
): Promise<string> => {
const pat = ctx.getSecret('GITHUB_PAT');
const headers: Record<string, string> = {
Accept: 'application/vnd.github.raw+json',
'User-Agent': 'rayfin-app',
};
if (pat) {
headers.Authorization = `Bearer ${pat}`;
}
const encodedPath = path
.split('/')
.map(encodeURIComponent)
.join('/');
const url =
`https://api.github.com/repos/${encodeURIComponent(owner)}/` +
`${encodeURIComponent(repo)}/contents/${encodedPath}` +
`?ref=${encodeURIComponent(ref || 'main')}`;
const response = await fetch(url, { headers });
if (!response.ok) {
throw new Error(`GitHub ${response.status}: ${await response.text()}`);
}
return response.text();
},
[],
);
空连接数组表示函数没有声明外部资源受众。 PAT是一个秘密代币,而不是平台提供的资源代币。
按环境配置机密信息
在函数运行的环境中提供秘密值:
-
本地开发:将密钥值添加到
Values的rayfin/functions/local.settings.json部分。 本地函数主机从该文件读取函数环境值。 - Fabric:在 Fabric 门户中为已部署项配置机密。
在每个环境里使用相同的秘密名称。 例如,先在本地和 Fabric 中配置 GITHUB_PAT,然后在两个环境中都使用 ctx.getSecret('API_KEY') 读取它。
Important
不要将 rayfin/functions/local.settings.json 或任何其他文件中的机密值提交到版本控制中。 在提交的文件中只存储非秘密的示例或占位符。