【问题标题】:How to implement OAuth2 authorization with WSO2 API Manager如何使用 WSO2 API Manager 实现 OAuth2 授权
【发布时间】:2026-01-14 09:50:02
【问题描述】:

我已经使用 WSO2 API Manager 创建并发布了 API。 API 客户端通过 OAuth2 和客户端凭据授予获取访问权限,发送消费者密钥和消费者密钥以请求访问令牌。但是现在我需要通过授权码授予的方式来实现授权。我必须使用 WSO2 APIM 的 client_id 和 client_secret 以及后端应用程序的用户登录表单,而不是 WSO2 APIM 用户。

谁能告诉它是否可能以及如何实施???

WSO2 的文档没有描述这个流程,我发现的所有示例都只描述了 WSO2 APIM 用户的授权过程(OAuth2,authorization_code)。

【问题讨论】:

    标签: wso2 wso2-am


    【解决方案1】:

    现在我需要通过授权码授予的方式来实现授权。 我必须使用 WSO2 APIM 的 client_id 和 client_secret 以及后端应用程序的用户登录表单,而不是 WSO2 APIM 用户。

    如果您想使用自己的(应用程序)身份验证表单,最简单的选择是利用password grant type,您的应用程序通过后端服务将令牌请求与应用程序和用户凭据一起发送

    使用代码授权,您假设使用授权端点 https://gateway:8243/authorizedocumentation 中描述的参数,并且确实在用户尚未通过身份验证时使用默认登录表单

    (由于不搜索文档,我仍然想对这个问题投反对票)

    如果你仍然想在你自己的验证表单中使用代码授权类型,你可以自定义 wso2 api 网关的默认登录表单或自定义验证器以使用你的应用程序的表单(这是一个非常高级的主题,需要配置您自己的实施和超出问题/答案的范围)

    【讨论】:

    • 感谢您的建议,我将尝试自定义端点 /authenticationendpoint/login.do 或实现自定义身份验证处理程序
    • @AndreyAfanasenkov 您可以更改application-authentication.xml 中的AuthenticationEndpointURL 以使用不同的URL 进行登录(表单仍然需要将所有参数发送到身份验证端点,只需查看http 流量即可了解它是)
    • 请注意实现您自己的 AuthenticationEndpointURL 不再受 WSO2 支持/推广。仅当您重命名 authenticationendpoint.war 或由于特定的负载平衡器设置时才应使用此选项。但是您应该保留原始身份验证应用程序。否则你会遇到麻烦,例如同意管理。
    【解决方案2】:

    您在此处有 2 个选项,无需任何自定义。

    1) 如果您的后端有用户存储,则可以将其配置为 APIM 的辅助用户存储。然后,您可以使用该用户存储中的任何用户进行身份验证。

    https://docs.wso2.com/display/ADMIN44x/Configuring+Secondary+User+Stores

    2) 如果上述选项不可行,并且您的后端 IDP 支持任何联合 SSO 协议(例如 SAML2 或 OIDC),则可以使用 WSO2 IS 配置联合。

    https://docs.wso2.com/display/IS550/Single+Sign-On+and+Identity+Federation

    【讨论】:

      最近更新 更多