我们的客户希望我们实现一个可信的子系统设计,这意味着他们有他们的Azure AD(客户端AD)来授权用户使用前端。并要求我们使用自己的Azure AD (Dev AD)来授权前端到后端。我们从客户端AD管理授权流(使用angular-msal库),没有问题。我们有一个访问令牌,被授权进入前台。但是,我需要从(Dev AD)请求另一个访问令牌,没有用户交互(客户端凭据流)使用client_secret,application_id。能够调用安全API(我们的后端)。我的后台人员就是这么求婚的。因此,在此之后,它们可以在后端验证第二个access_token,并向客户机提供安全的数据。我的问题是:这是使用client_secret从angular应用程序获取访问令牌的正确和安全的方法吗?,application_id? 至少当我尝试的时候,我有CORS问题。一个客户还添加了以下我不理解的描述。如果它能帮助理解问题:
当使用MSAL库时,可以在请求令牌时将身份提供程序(Azure AD)作为参数给出
在前端是多租户应用程序而后端是单租户应用程序的情况下,使用用户的访问令牌可能不起作用。在这种情况下,前端和后端之间的客户端凭证流将被首选。
将客户端秘密保存到前端是不安全的。我将按照以下行做一些事情:
- 将客户端秘密存储在keyvault
- 为前端定义keyVault访问策略
- 在应用启动时,从keyvault获取客户端密钥到前端到运行时变量
- 使用客户端秘密获取AD令牌
- 使用AD令牌调用API
KeyVault访问需要进一步限制,以便前端应用程序只能访问KeyVault中的客户端秘密(如果被认为是"敏感的",可能还有clientID和其他类似的数据)。
我建议构建自己的后端api,它将负责使用客户端凭证生成令牌并使用令牌调用安全后端api。此外,我建议使用密钥库来安全地存储客户端的秘密。您可以将用户访问令牌(您在用户身份验证后收到的令牌)传递给您自己的后端API,以确保浏览器和您自己的后端API之间的通信安全。