Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
安全性对于新式 Web 应用程序至关重要。 Fluid Framework 作为 Web 应用程序体系结构的一部分,是保护的重要基础结构。 Fluid Framework 是一种分层体系结构,基于它连接到的 Fluid 服务实现与身份验证相关的概念。 这意味着,尽管所有 Fluid 服务都有常见的身份验证主题,但每个服务的详细信息和细节将有所不同。
Azure Fluid Relay 服务
你创建的每个Azure Fluid Relay服务租户都分配有一个租户 ID 及其自己的唯一租户密钥。
密钥是 共享机密。 应用/服务知道它,Azure Fluid Relay服务知道它。 由于租户机密密钥与您的租户唯一绑定,因此使用它对请求进行签名,可以向 Azure Fluid Relay 服务保证这些请求来自该租户的授权用户。
密钥是Azure Fluid Relay服务知道请求来自应用或服务的方式。 这一点至关重要,因为一旦Azure Fluid Relay服务可以信任它正在发出请求的应用,它就可以信任你发送的数据。 这也是为什么必须安全地处理机密。
Caution
有权访问机密的任何人都可以在与 Azure Fluid Relay 服务通信时模拟应用程序。
JSON Web 令牌和 Azure Fluid Relay 服务
Azure Fluid Relay使用 JSON Web 令牌(JWT)对使用密钥签名的数据进行编码和验证。 JSON Web Token(JWT)是一段经过签名的 JSON 数据,其中可包含有关权利和权限的附加信息。
注释
JWT 的具体细节超出了本文的范围。 有关 JWT 标准的详细信息,请参阅 JSON Web 令牌简介。
尽管 Fluid 服务之间的身份验证详细信息不同,但必须始终存在多个值。
- containerId Fluid 服务需要容器 ID 来标识哪个服务对应于调用容器。 注意:JWT 调用此字段 documentId,但 Fluid 服务需要此字段中的容器 ID。
- tenantId:Azure Fluid Relay服务使用租户 ID 检索用于对请求进行身份验证的共享机密。
- 范围:范围定义调用容器的权限。 范围字段的内容很灵活,允许你创建自己的自定义权限。
{
"alg": "HS256",
"typ": "JWT"
}.{
"documentId": "azureFluidDocumentId",
"scopes": [ "doc:read", "doc:write", "summary:write" ],
"user": {
"name": "TestUser",
"id": "Test-Id-123"
},
"iat": 1599098963,
"exp": 1599098963,
"tenantId": "AzureFluidTenantId",
"ver": "1.0"
}.[Signature]
用户模式指示连接是处于只读模式还是读写模式。 可以在connections的AzureAudience字段中查看。 可以在您的无服务器 Azure Function 中,更新 generateToken 函数下的令牌作用域权限。
const token = generateToken(
tenantId,
documentId,
key,
scopes ?? [ "Token Scope" ],
user
);
令牌范围以及容器行为和模式如下所示:
| 令牌作用域 | 我的文档行为 | 受众文档中的行为 |
|---|---|---|
| DocRead | 读取和写入文档。 对文档所做的更改不会反映在任何其他受众文档中。 模式:读取 |
读取和写入文档。 这些更改未反映在任何其他受众文档中。 模式:写入 |
| DocWrite | 读取和写入文档。 所做的更改反映在所有其他受众文档中。 模式:写入 |
读取和写入文档。 所做的更改反映在所有其他受众文档中。 模式:写入 |
| DocRead、DocWrite | 读取和写入文档。 所做的更改反映在所有其他受众文档中。 模式:写入 |
读取和写入文档内容。 所做的更改反映在所有其他受众文档中。 模式:写入 |
注释
请注意,令牌还包括用户信息(请参阅上面的第 7-9 行)。 您可以使用此功能,通过 受众 功能补充 Fluid 代码可自动获取的用户信息。 有关详细信息,请参阅 向令牌添加自定义数据 。
令牌提供程序
对Azure Fluid Relay的每个请求都必须使用有效的 JWT 进行签名。 Fluid 将创建和对这些令牌进行签名的职责交由令牌提供程序负责。
令牌提供程序负责创建并签署令牌,供 @fluidframework/azure-client 用于向 Azure Fluid Relay 服务发出请求。 您需要提供您自己的安全令牌提供程序实现。 但是,Fluid 提供了一个可接受租户机密的 InsecureTokenProvider,并在本地生成并返回签名令牌。 此令牌提供程序可用于测试,但不能用于生产方案。
安全的无服务器令牌提供程序
构建安全令牌提供程序的一个选项是创建无服务器Azure函数并将其公开为令牌提供程序。 这样,便可以将 租户密钥 存储在安全服务器上。 然后,应用程序将调用 Azure 函数来生成令牌,而不是像 InsecureTokenProvider 那样在本地对其进行签名。 有关详细信息,请参阅如何:使用 Azure 函数编写 TokenProvider。
将用户身份验证连接到 Fluid 服务身份验证
Fluid 服务使用共享客户端密码(未绑定到特定用户)对传入调用进行身份验证。 可以根据 Fluid 服务的详细信息添加用户身份验证。
用户身份验证的一个简单选项是仅使用 Azure 函数作为令牌提供程序,并强制用户身份验证作为获取令牌的条件。 如果应用程序尝试调用函数,除非使用身份验证系统进行身份验证,否则它将失败。 例如,如果使用Microsoft Entra ID,则可以为 Azure 函数创建Microsoft Entra应用程序,并将其绑定到组织的身份验证系统。
在这种情况下,用户将使用 Microsoft Entra ID 登录你的应用程序,你则通过它获取一个令牌,用于调用 Azure Function。 Azure函数本身的行为相同,但现在只有通过Microsoft Entra ID进行身份验证的用户才能访问它。
由于 Azure 函数现在是获取有效令牌的入口点,因此只有已正确向函数进行身份验证的用户才能从客户端应用程序向Azure Fluid Relay服务提供该令牌。 通过这两个步骤,可以将自己的自定义身份验证过程与 Azure Fluid Relay 服务结合使用。