【发布时间】:2020-03-30 16:22:01
【问题描述】:
我正在将 Azure Active Directory 集成到云平台中。由于我们的应用程序是多租户的并且依赖于特定于平台的声明,因此我们确定了解决此问题的最简单方法是通过我们的 SPA 获取 Azure AD 令牌,将其传递回我们的 WebApi,对其进行验证并返回到 SPA一个平台令牌,包含我们开展正常业务所需的所有声明(就好像它是一个简单的用户名/密码认证请求)。
不过,我对此的安全级别感到担忧。
一些背景
由于我们的平台是多租户的,我们要求每个客户端在其 Azure AD 门户上注册应用程序,然后向我们提供生成的应用程序(客户端 ID) 和 目录(租户)ID。我们使用这两条信息通过我们的前端 SPA 向 Azure 发出初始请求(在注册应用程序时遵循 Microsoft 的Quickstart 指南提供的node.js 示例)。现在,由于此时用户未经身份验证,我们需要某种方法来为客户端返回这两个特定的 id。我们已经使用子域进行识别。
例如acmeinc.mydomain.com 将返回与billy.mydomain.com 不同的应用程序(客户端 ID)和目录(租户)ID。这些现在显然是公开的,因为此请求来自未经身份验证的前端路由。
当我传递它时,我可以在前端和后端很好地处理令牌响应,并验证这两条信息在令牌中是正确的,但作为前端 - end 被赋予它们开始,对这些的验证是多余的。此外,验证发行者似乎与知道目录(租户)ID 的人一样多余,也可以伪造它(对吗?)
我在这里遗漏了什么吗?如果可以要求客户还包括我的平台私下生成的声明,我会感到更加轻松,这样我就可以在正常的 JWT 验证的同时验证这个声明。 Azure AD 门户似乎无法自定义声明。
我是错过了关键步骤,还是只是想多了?
【问题讨论】: