【问题标题】:Get access token Azure AD using client_secret key (client credential flow) Angular application使用 client_secret 密钥(客户端凭据流)Angular 应用程序获取访问令牌 Azure AD
【发布时间】:2021-10-23 09:21:01
【问题描述】:

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

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

【问题讨论】:

  • 永远不要向客户端添加秘密。
  • "But then I need to request another access token from (Dev AD) without user interaction (client credential flow) using client_secret, application_id. for being able to call a secure API (our back end)" 这似乎没问题,在这种情况下,您可以将您的azure ad credential 保留在您的backend configuration filesazure key vault 这些是常见的做法。但是为什么你需要在你的前端保留apps secret 呢?要实现您的后端团队的建议,不需要将您的应用程序凭证保留在 Angular 端或前端。这不应该。让我知道你的更新。
  • 谢谢你们!
  • Md Farid Uddin Kiron,我会让你知道我们的更新。

标签: angular azure-active-directory frontend msal-angular


【解决方案1】:

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

【讨论】:

  • 非常感谢您的解释。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 2020-03-17
    • 1970-01-01
    • 2021-09-17
    • 2018-02-08
    • 2023-04-05
    • 2011-08-03
    • 2023-03-25
    • 2022-06-16
    相关资源
    最近更新 更多