【问题标题】:Azure Active Directory Client Secrets in SPA ApplicationsSPA 应用程序中的 Azure Active Directory 客户端机密
【发布时间】:2017-07-29 06:51:09
【问题描述】:

我正在使用 Azure Active Directory 来保护我的 ASP.NET Core API 和 SPA 应用程序。目前,我没有使用客户端密码,这对于 SPA 应用程序来说很好,因为它会在公共 JavaScript 中可见。

如果我要向我的一个 API 添加客户端密码,我如何告诉 Azure Active Directory 我不想将客户端密码用于我的 SPA,但我想在我的其他 API 中使用它正在进行 API 到 API 调用?

【问题讨论】:

  • 您现在使用用户凭据来保护您的 API 不受 SPA 影响?
  • @CuongLe 是的,Azure AD 重定向到登录页面,用户输入他们的登录信息并重定向回 SPA 应用程序。
  • 为什么不直接使用用户名/密码来获取令牌而不是使用客户端密码?

标签: api oauth oauth-2.0 single-page-application azure-active-directory


【解决方案1】:

在这种情况下,您的 API 需要是 Azure AD 中的单独应用程序。如果它们是同一个应用程序,则客户端密码可以在任何地方工作。

虽然实际上因为它是一个 SPA,但它可以使用秘密的唯一方法是通过 AJAX,而 Azure AD 不支持 CORS 并阻止它。

即使它在未来可以工作,不用说你永远不应该将你的客户端密码放在客户端代码中。这包括 Web 应用程序中的前端 JavaScript 和移动应用程序中的代码。 (我知道这对您来说很清楚,但请确保其他人稍后阅读答案也理解这一点。)有人可以相对轻松地从那里获取秘密,然后如果您的应用程序对某些 API 具有权限..您会得到这个正在走。

【讨论】:

  • 不将秘密与 SPA 一起使用的关键在于,它们最终会出现在浏览器中,对加载 SPA 的每个人(包括攻击者)都可见;这与 AJAX 或其使用方式无关。
  • 是的,很明显。这对 OP 来说也很清楚。我只是说,即使你想这样做,你实际上也做不到。无论如何,我都会将其添加到答案中:)
猜你喜欢
  • 2019-12-27
  • 2020-02-15
  • 1970-01-01
  • 2016-03-28
  • 2018-11-30
  • 2020-03-09
  • 2018-04-04
  • 2014-12-27
  • 2019-04-28
相关资源
最近更新 更多