wso2 api 管理器,可选身份验证 (v1.9)

时间:2021-04-20 20:50:41

标签: wso2 wso2-am

我正在使用较旧的 (v1.9) 版本的 wso2,我们正在尝试基本上拥有一个带有可选身份验证的端点。如果资源的安全性设置为 None,如果请求带有令牌(经过身份验证),它不会被发送到后端。有没有办法强制 wso2 v1.9 在这样的路由上进行身份验证并将 JWT 转发到后端如果有一个 Authorization 标头集?

1 个答案:

答案 0 :(得分:1)

在 API Manager v1.9 中,默认情况下它会从消息上下文中删除 Auth 标头,并且不会传递给后端服务 [1]。

有一个名为 RemoveOAuthHeadersFromOutMessage 的属性,您可以在其中禁用删除此标头 [2]。 但这是一个系统范围的配置,它会影响系统中的所有 API。如果将此值设置为 false,则对于所有 API,它都不会删除 Auth 标头。在这种情况下,您可以使用全局序列或自定义序列 [3] 来有选择地删除此身份验证标头。

另一种解决方法:

您可以使用自定义处理程序 [4] 并在 API 安全处理程序之前应用此处理程序。在此处理程序中,您可以将 auth 标头值复制到不同的标头,然后使用自定义序列再次将自定义标头值复制到 auth 标头。在这种情况下,您不需要更改 RemoveOAuthHeadersFromOutMessage 的值。但是在处理程序中,您必须有选择地执行此操作。

[1] - https://github.com/wso2/carbon-apimgt/blob/1.2.5/components/apimgt/org.wso2.carbon.apimgt.gateway/src/main/java/org/wso2/carbon/apimgt/gateway/handlers/security/oauth/OAuthAuthenticator.java#L96

[2] - https://docs.wso2.com/display/AM191/Working+with+Access+Tokens

[3] - https://docs.wso2.com/display/AM191/Adding+Mediation+Extensions

[4] - https://docs.wso2.com/display/AM191/Writing+Custom+Handlers