首页 > 解决方案 > 如何使用 WSO2 IS 持久化外部 Idp 生成的用户 access_token

问题描述

我在下面要实现的用例:

用户应该能够通过外部 IDP 的授权代码授权流登录到 WSO2 身份服务器中配置的服务提供者 -> 通过添加外部 IDP 并将其配置为服务提供者中的联合身份验证器来实现此要求。

登录后,我们还想持久化外部 IDP 的用户 access_token。这样我们就可以调用外部用户特定的 API。尝试了以下方法:

  1. 试图在 WSO2 API Manager 中发布外部 API,但为了访问外部 API/资源,我们需要当前用户的访问令牌。因为我们可以配置客户端凭据/资源所有者密码授予类型,这将授权应用程序或特定用户。但我们的用例不限于特定用户。

WSO2 APIM 端点安全配置

想知道如何通过利用 WSO2 IS 和 WSO2 API 管理器来满足我的要求(仅在需要时)。

高度赞赏围绕此要求的任何可能的解决方案。提前致谢。

环境 WSO2 IS -> v5.10.0 WSO2 API 管理器 -> v3.2.0

标签: wso2wso2iswso2-am

解决方案


WSO2 代表用户获取的这个访问令牌被持久化到 OIDC 出站连接器中的 AuthenticationContext 中。https://github.com/wso2-extensions/identity-outbound-auth-oidc/blob/master/components/org.wso2.carbon.identity.application.authenticator.oidc/src/main/java/org/wso2/ carbon/identity/application/authenticator/oidc/OpenIDConnectAuthenticator.java#L486。联合身份验证成功后,身份服务器将发布 SESSION_CREATE 事件。所以你可以编写一个事件处理程序并监听这个 SESSION_CREATE 事件。然后,您可以使用 EventHandler 从身份验证上下文中获取访问令牌。

事件处理程序文档

https://is.docs.wso2.com/en/5.12.0/develop/writing-a-custom-event-handler/ https://medium.com/@isurakarunaratne/wso2-identity-server-eventing-framework -32505bcc1600

请参阅此实现以编写自定义事件处理程序以侦听 SESSION_CREATE 事件。https://github.com/wso2-extensions/identity-inbound-auth-oauth/blob/master/components/org.wso2.carbon.identity.oauth/src/main/java/org/wso2/carbon/identity/ oauth2/token/bindings/handlers/TokenBindingExpiryEventHandler.java#L65


推荐阅读