如何解决如何从 RP 终止 OneLogin 会话?
我有一个 React SPA,我最初使用 Cognito 对用户进行身份验证以访问安全的 Lambda 微服务。现在我必须将 SSO 与基于 SAML 的后台垂直应用集成。
我为垂直应用程序向 OneLogin 添加了连接器,将 OneLogin 添加为 Cognito 的 Idp,为我的 SPA 添加了 OIDC 连接器,并将 SPA 更改为使用 OneLogin 而不是 Cognito 进行身份验证。 SSO 工作正常,但我的用户无法注销。当他们退出 SPA 或垂直应用程序并返回时,它会再次登录。如果他们导航到垂直应用程序,他们也会在那里登录。邮递员告诉我,我仍然可以访问 AWS 网关端点。
根据 OneLogin 的开发人员知识库 [https://developers.onelogin.com/api-docs/1/users/log-user-out],没有可用的注销端点或功能,但我可以使用 V1接口。文档已经过时了,我不知道我是否可以信任它们。
截至 11 月,此线程 [https://github.com/onelogin/onelogin-oidc-node/issues/8] 表示注销功能将在 2021 年第一季度可用,但我找不到有关新功能的任何文档.
我尝试按照建议使用 v1 API 注销,但收到 CORS 错误:
Access to fetch at 'https://api.us.onelogin.com/api/1/users/***/logout' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs,set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
VM95:1 PUT https://api.us.onelogin.com/api/1/users/***/logout net::ERR_FAILED
失败代码:
const putOptions = {
method: 'PUT',headers: {
'Authorization' : 'bearer:' + token,'mode' : 'no-cors'
}
};
const response = await fetch(`https://api.us.onelogin.com/api/1/users/${userid}/logout`,putOptions);
如果我理解正确,我想我必须在调用 API 之前首先使用 client_secret 和 client_id 建立 API“会话”。这是一个仅使用微服务的无服务器应用程序。我无法在 JS 中嵌入秘密和 id。
如何在没有服务器且不公开 client_id 和 client_secret 的情况下从 RP 终止所有三个连接器之间的 OneLogin 会话?
解决方法
我知道我想多了。我在 [https://developers.onelogin.com/openid-connect/api/logout] 找到了 v2 注销端点。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。