我正在使用较旧的 (v1.9) 版本的 wso2,我们正在尝试基本上拥有一个带有可选身份验证的端点。如果资源的安全性设置为 None
,如果请求带有令牌(经过身份验证),它不会被发送到后端。有没有办法强制 wso2 v1.9 在这样的路由上进行身份验证并将 JWT 转发到后端如果有一个 Authorization 标头集?
答案 0 :(得分:1)
在 API Manager v1.9 中,默认情况下它会从消息上下文中删除 Auth 标头,并且不会传递给后端服务 [1]。
有一个名为 RemoveOAuthHeadersFromOutMessage 的属性,您可以在其中禁用删除此标头 [2]。 但这是一个系统范围的配置,它会影响系统中的所有 API。如果将此值设置为 false,则对于所有 API,它都不会删除 Auth 标头。在这种情况下,您可以使用全局序列或自定义序列 [3] 来有选择地删除此身份验证标头。
另一种解决方法:
您可以使用自定义处理程序 [4] 并在 API 安全处理程序之前应用此处理程序。在此处理程序中,您可以将 auth 标头值复制到不同的标头,然后使用自定义序列再次将自定义标头值复制到 auth 标头。在这种情况下,您不需要更改 RemoveOAuthHeadersFromOutMessage 的值。但是在处理程序中,您必须有选择地执行此操作。
[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