我有以下用例要实现:
用户应该能够通过外部 IDP 的授权代码授权流登录到 WSO2 身份服务器中配置的服务提供者 -> 通过添加外部 IDP 并将其配置为服务提供者中的联合身份验证器来实现此要求。
登录后,我们还想持久化外部IDP的用户access_token。这样我们就可以调用外部用户特定的 API。尝试了以下方法:
WSO2 APIM Endpoint Security Configurations
想知道如何利用 WSO2 IS 和 WSO2 API 管理器(仅在需要时)来实现我的要求。
高度赞赏围绕此要求的任何可能的解决方案。提前致谢。
环境 WSO2 IS -> v5.10.0 WSO2 API 管理器 -> v3.2.0
答案 0 :(得分:1)
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。联合身份验证成功后,Identity Server 将发布 SESSION_CREATE 事件。所以你可以编写一个事件处理程序并监听这个 SESSION_CREATE 事件。然后,您可以使用 EventHandler 从身份验证上下文中获取 accesstoken。
关于事件处理程序的文档
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