如何解决使用本地数据库的 WSO2 API 管理器最终用户自定义身份验证策略
对于通过网络浏览器通过互联网访问的网络应用程序门户,需要在 WSO2 API 管理器中实现以下身份验证流程。
- 应用程序(门户-Web 瘦客户端)的最终用户必须使用用户/密码方案登录。
- 用户和凭据信息存储在本地应用程序 RDBMS 数据库(例如 MySQL)中。
- 应用程序具有用户管理屏幕,用于添加/删除/更新用户和映射角色。
- API 管理器必须针对本地用户存储对用户进行身份验证并生成 JWT/Ouath2 令牌。
- 需要配置自定义密码策略(例如,用户必须在 5 次失败尝试后被锁定)。
- 最终用户将使用生成的令牌访问受保护的 API。
- API 管理器应授权令牌并将 API 路由到适当的微服务。
从文档中我们发现,应创建辅助用户存储以允许应用程序的最终用户成为 WSO2 API Manager 用户的一部分,因此身份验证将由 API 管理器本身负责。我想更好地了解如何实现这一点。
- 通过应用程序中的用户管理屏幕,最终用户数据库中的预期变化非常动态,这是否需要以某种方式更新到 API 管理器用户存储?或者可以配置 API 管理器用户存储直接从适用的用户表中读取。
- API 管理器能否针对每个用户执行在应用程序数据库中配置的加密密码验证?
- 是否有任何替代方法,例如,我的应用程序公开一个用于身份验证的休息端点,API 管理器调用此端点以通过传递作为令牌 API 的一部分接收到的用户名和密码来执行身份验证。?
解决方法
您可以将应用程序的用户存储作为 API 管理器中的辅助存储并实现您的要求。有关详细信息,请参阅有关配置 Secondary User-store 的官方文档。
此外,如果您有一个 JDBC 用户存储,那么您可以在 API 管理器中自定义辅助用户存储的查询以正确查询用户条目。此外,您还可以实现自定义 User-store manager 和插件(如果您有更多自定义字段和操作)。
回答您的问题
最终用户数据库中预期的更改通过应用程序中的用户管理屏幕非常动态,这是否需要以某种方式更新到 API 管理器用户存储?或者API管理器用户存储可以配置直接从适用用户的表中读取吗?
不,除非您没有正确配置用户存储,否则不需要在 API 管理器中执行任何手动更改。但是请注意,如果您打算使用应用程序用户商店中的用户创建 API 并在 API 平台中订阅,则删除这些用户可能会导致平台中的行为不一致。
API 管理器是否可以针对每个用户执行在应用程序数据库中配置的加密密码验证?
您可以编写自定义用户存储管理器来根据需要处理密码验证。
是否有任何替代方法,例如,我的应用程序公开一个用于身份验证的休息端点,API 管理器调用此端点以通过传递作为令牌 API 的一部分接收到的用户名和密码来执行身份验证。?
我可以想到一种替代 REST API 方法的方法。这是开发自定义处理程序并将其与 API 结合以执行除令牌验证之外的验证。简而言之,
- 开发Synapse Handler
- 使用 API 以及默认的
APIAuthenticationHandler
- 从自定义处理程序的 Transport 标头中读取并提取
username
和password
- 调用应用程序的 REST 端点并检查有效性
- 如果成功,继续 API 调用(继续通常的令牌验证过程和所有),如果不成功,放弃并返回错误
但是,请注意,此外部验证过程需要足够快,以免长时间阻塞 API 管理器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。