我有一个API项目和一个运行IdentityServer4的单独项目。第三方应用程序登录到IdentityServer4并接收访问令牌。使用令牌第三方应用程序可以调用API项目。现在,第三方应用程序希望API资源(api / users / change_password)能够通过提供用户名,当前密码和新密码来更改用户密码。如何从API项目中更新/更改用户密码?
我会说要求有问题。要获取访问令牌,请将用户重定向到IDP UI
。但是,您不想更改密码。为什么?通过API设置密码不安全。这意味着3rd party application
可以根据自己的意愿更改用户密码。风险很大。
在我们的情况下,我们也开发了第三方应用程序,我们将使用资源所有者密码流。我们的要求是使用户保持在单个应用程序中。用户将向第三方应用程序提供用户名/密码,该应用程序将通过IDP进行身份验证,而无需将用户重定向到IDP。第三方应用程序将使用令牌对进一步的服务进行API调用。现在,用户可能想要更新她的密码,而只需提供当前密码和新密码即可。第三方应用程序将进行API调用以更新用户密码。
这就是为什么我问用户在哪里键入密码。我最初的想法是您使用资源所有者流。很可能可以将其用于自己的应用程序。但是您应该花一些时间来添加更多的安全检查,例如在发生新的登录时通知用户等。我仍然不建议通过API更改密码。
如何通过通过令牌保护的API更新密码。我应该在IDP项目中创建用户管理API资源,还是应该使该API能够管理用户(这首先使IDP保护API的目的无效)?
1.
如果您不想让IDP管理用户身份,为什么还要使用IDP?2.
您是否还有其他使用IDP的应用程序(您自己和/或第三方)?是的,我们计划将IDP用于其他应用程序(自己的)。我们的主要目标是将身份验证与其他应用程序分开。我们的大多数客户将使用我们为他们开发的应用程序。