【问题标题】:IdentityServer4 and Update password using APIIdentityServer4 和使用 API 更新密码
【发布时间】:2020-05-19 03:04:18
【问题描述】:

我有一个 API 项目和一个运行 IdentityServer4 的单独项目。第 3 方应用程序登录到 IdentityServer4 并接收访问令牌。使用令牌 3rd 方应用程序调用 API 项目。现在第 3 方应用程序希望 API 资源 (api/users/change_password) 能够通过提供用户名、当前密码和新密码来更改用户的密码。如何从 API 项目更新/更改用户密码?

【问题讨论】:

  • 用户是否登录您的 IdentityServer4 应用程序 (IDP) 以获取访问令牌?用户在哪里输入用户名/密码?
  • 是的。用户将用户/密码输入到第三方应用程序,该应用程序重定向到身份服务器并接收令牌。
  • 你使用什么 oauth2 流?
  • 我认为用户不应该在 3rd 方应用程序中输入密码。用户应在 IDP 本身中执行此操作。如果用户想要更改密码,他应该为此访问 IDP。
  • 你是对的,用户实际上是在 IDP UI 中输入用户名/密码,第 3 方应用程序只是将用户重定向到 IDP 登录屏幕。

标签: c# api oauth-2.0 identityserver4 openid-connect


【解决方案1】:

我会说要求有问题。要获取访问令牌,请将用户重定向到 IDP UI。但是要更改密码,您不想这样做。为什么?通过 API 设置密码并不安全。这意味着3rd party application可以根据自己的意愿更改用户密码。风险很大。

【讨论】:

  • 在我们的例子中,第 3 方应用程序也是由我们开发的,我们将使用资源所有者密码流。我们的要求是将用户保留在单个应用程序中。用户将向 3rd 方应用程序提供用户名/密码,该应用程序将通过 IDP 进行身份验证,而无需将用户重定向到 IDP。 3rd 方应用程序将使用令牌对进一步的服务进行 API 调用。现在用户可能想要更新她的密码,只需提供当前密码和新密码。第三方应用会调用 API 更新用户密码。
  • 这就是为什么我问用户在哪里输入密码。我最初的想法是您使用资源所有者流程。很可能可以将它用于您自己的应用程序。但是您应该花一些时间添加更多安全检查,例如在发生新登录时通知用户等。我仍然不建议通过 API 更改密码。
  • 如何通过通过令牌保护的 API 更新密码。我应该在 IDP 项目中创建用户管理 API 资源还是让 API 能够管理用户(这违背了让 IDP 保护 API 的初衷)?
  • 1. 如果您不想让它管理用户的身份,为什么还要使用 IDP? 2.您是否还有其他使用 IDP 的应用程序(您自己的和/或第 3 方)?
  • 是的,我们计划将 IDP 用于其他应用程序(自己的)。我们的主要目标是将身份验证与其他应用程序分开。我们的大多数客户都会使用我们为他们开发的应用程序。
猜你喜欢
  • 2019-05-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-26
  • 2018-02-01
  • 2017-07-21
  • 2018-08-29
  • 2020-10-25
  • 1970-01-01
相关资源
最近更新 更多