1

我们的客户希望我们实现一个受信任的子系统设计,这意味着他们拥有自己的 Azure AD(客户端 AD)来授权用户使用前端。并要求我们使用自己的 Azure AD (Dev AD) 来授权前端到后端。我们管理来自客户端 AD 的授权流程(使用 angular-msal 库)并且没有问题。我们得到一个访问令牌并授权到前端。但是然后我需要使用client_secretapplication_id从(Dev AD)请求另一个访问令牌而无需用户交互(客户端凭据流). 能够调用安全 API(我们的后端)。这就是我的后端人员建议的方式。所以在那之后,他们可以在后端验证第二个 access_token 并将安全数据提供回客户端。我的问题是:这是使用client_secretapplication_id从 Angular 应用程序获取访问令牌的正确且安全的方式吗?至少当我尝试时,我遇到了 CORS 问题。一位客户还添加了以下我不明白的描述。如果它有助于理解问题:

使用 MSAL 库时,可以在请求令牌时将身份提供程序 (Azure AD) 作为参数提供

4

2 回答 2

1

我建议构建您自己的后端 API,该 API 将负责使用客户端凭据生成令牌并使用令牌调用安全后端 API。我还建议使用密钥库来安全地存储客户端机密。您可以将用户访问令牌(您在用户身份验证后收到的令牌)传递给您自己的后端 API,以保护浏览器和您自己的后端 API 之间的通信。

于 2021-08-23T03:22:26.127 回答
0

在前端是多租户应用程序而后端是单租户应用程序的情况下,使用用户的访问令牌可能不起作用。在这种情况下,前端和后端之间的客户端凭据流将是首选。

将客户端密码保存到前端并不安全。我会按照以下方式做一些事情:

  • 将客户端机密存储在密钥库中
  • 为前端定义 keyVault 访问策略
  • 在应用程序启动时,从 keyvault 获取客户端密码到前端到运行时变量
  • 使用客户端密码获取 AD 令牌
  • 使用 AD 令牌调用 API

需要进一步限制 KeyVault 访问,以便前端应用程序只能访问 keyvault 中的客户端机密(可能还有 clientID 和其他类似数据,如果被认为是“敏感的”)。

于 2021-12-03T14:51:30.080 回答