首页 > 解决方案 > 使用本地数据库的 WSO2 API Manager 最终用户自定义身份验证策略

问题描述

对于通过 Web 浏览器通过 Internet 访问的 Web 应用程序门户,需要在 WSO2 API 管理器中实现以下身份验证流程。

从文档中我们发现,应创建辅助用户存储以允许应用程序的最终用户成为 WSO2 API Manager 用户的一部分,因此身份验证将由 API Manager 本身负责。我想更好地了解如何实现这一点。

  1. 通过应用程序中的用户管理屏幕,最终用户数据库中的预期变化是非常动态的,这是否需要以某种方式更新到 API 管理器用户存储?或者API manager用户存储可以配置直接从适用的用户表中读取。?
  2. API 管理器可以针对每个用户执行在应用程序数据库中配置的加密密码验证吗?
  3. 是否有任何替代方法,例如,我的应用程序公开一个用于身份验证的休息端点,并且 API 管理器通过传递作为令牌 api 的一部分接收的用户名和密码来调用此端点来执行身份验证。

标签: javaspring-securitywso2wso2-amwso2carbon

解决方案


您可以将应用程序的用户存储作为 API Manager 中的辅助存储并满足您的要求。有关详细信息,请参阅有关配置辅助用户存储的官方文档。

此外,如果您有 JDBC 用户存储,那么您可以在 API Manager 中自定义辅助用户存储的查询以正确查询用户条目。此外,您还可以实现自定义用户存储管理器和插件(如果您有更多自定义字段和操作)。

回答您的问题

通过应用程序中的用户管理屏幕,最终用户数据库中的预期变化是非常动态的,这是否需要以某种方式更新到 API 管理器用户存储?或者API manager用户存储可以配置直接从适用的用户表中读取?

不,除非您没有正确配置用户存储,否则不需要在 API Manager 中执行任何手动更改。但是,请注意,如果您计划使用应用程序用户存储中的用户来创建 API 并在 API 平台中订阅,删除这些用户可能会导致平台中的行为不一致。

API 管理器可以针对每个用户执行在应用程序数据库中配置的加密密码验证吗?

您可以编写自定义用户存储管理器来处理您喜欢的密码验证。

是否有任何替代方法,例如,我的应用程序公开一个用于身份验证的休息端点,并且 API 管理器通过传递作为令牌 API 的一部分接收的用户名和密码来调用此端点来执行身份验证。

我可以想到另一种 REST API 方法。即开发一个自定义处理程序并将其与 API 结合以执行除令牌验证之外的验证。简单来说,

  • 开发突触处理程序
  • 将处理程序与 API 以及默认值一起使用APIAuthenticationHandler
  • 从自定义处理程序中的 Transport 标头中读取并提取usernameandpassword
  • 调用应用程序的 REST 端点并检查有效性
  • 如果成功,则继续 API 调用(继续进行通常的令牌验证过程和所有操作),如果不成功,则放弃并返回错误消息

但是,请注意,此外部验证过程需要足够快,以免长时间阻塞 API 管理器。


推荐阅读