wso2 - 如何使用 WSO2 IS 持久化外部 Idp 生成的用户 access_token
问题描述
我在下面要实现的用例:
用户应该能够通过外部 IDP 的授权代码授权流登录到 WSO2 身份服务器中配置的服务提供者 -> 通过添加外部 IDP 并将其配置为服务提供者中的联合身份验证器来实现此要求。
登录后,我们还想持久化外部 IDP 的用户 access_token。这样我们就可以调用外部用户特定的 API。尝试了以下方法:
- 试图在 WSO2 API Manager 中发布外部 API,但为了访问外部 API/资源,我们需要当前用户的访问令牌。因为我们可以配置客户端凭据/资源所有者密码授予类型,这将授权应用程序或特定用户。但我们的用例不限于特定用户。
想知道如何通过利用 WSO2 IS 和 WSO2 API 管理器来满足我的要求(仅在需要时)。
高度赞赏围绕此要求的任何可能的解决方案。提前致谢。
环境 WSO2 IS -> v5.10.0 WSO2 API 管理器 -> v3.2.0
解决方案
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
推荐阅读
- react-native - 关于 react-native 中的图表
- r - 给定一个有限的调色板,如何从热到冷排序,即发散
- xpages - ViewScope 变量变为空,keepsessionalive 不起作用?
- c# - 在 Outlook 365 中创建电子邮件草稿,然后将其打开以进行编辑
- c# - 可以找到错误 CS1061 “...不包含定义和扩展方法...接受类型的第一个参数”
- reactjs - 反应原生重新加载不起作用
- html - 在 google sheet modalDialog 中按下按钮为单元格赋值
- c# - DbUpdateException“无法保存更改”
- talend - Talend - 执行作业的命令行
- google-sheets - 谷歌表提取 URL 参数字符串