当前位置: 首页 > 知识库问答 >
问题:

使用Keycloak时的静默认证CORS问题

童花蜂
2023-03-14

我正尝试使用以下调用在我的站点上执行静默身份验证:

fetch('http://localhost:8100/auth/realms/master/protocol/openid-connect/auth?response_type=code&scope=openid&client_id=portal&redirect_uri=http%3A//localhost%3A8080/o/auth/oidc/callback&state=CJOREX0_bHtivjgNUYRkE3908LqdnUUvm2Jhxo5U8tg&nonce=MJj2eQkCtlwqIx0UbSFdWRsbll7fiBSUkRkbxzi2VFs&prompt=none', {
    method: 'GET',
    mode: 'cors'
})

但我还是得到了CORS错误:

从'http://localhost:8100/auth/realms/master/protocol/openid-connect/auth?被CORS策略阻止:请求的资源上没有“访问-控制-允许-来源”标头。如果一个不透明的响应满足您的需要,请将请求的模式设置为“no-cors”,以便在禁用CORS的情况下获取资源。

你知道我错过了什么吗?

共有1个答案

仲璞瑜
2023-03-14

整个方法在这里是一个错误。我试图使用来自客户端的授权代码流,这不是它应该如何工作。授权代码流总是关于服务器到服务器与客户端重定向的交互。

如果您想使用它,您将需要在iframe或单独的页面中打开目标页面(对于静默身份验证,一个不可见的iframe就可以了)。

如果您的目标是拥有纯客户端身份验证,那么您宁愿考虑使用隐式(这是经典且简单的,但出于安全原因,目前不建议使用)或带有PKCE流的授权代码。

有许多关于auth流的参考资料,但是如果您想查看它们的快速和高级概述,我建议查看这篇简短的文章:https://dev.to/hem/oauth-2-0-flows-explain-in-gifs-2O7a

 类似资料:
  • 我使用Keycloak 10.0.2来确保spring boot REST API的前端和Angular 9。前端由运行在http://localhost:8080上的spring boot微服务提供服务。在keycloak方面,openid-connect客户端web源配置为允许所有源。 spring boot spring安全配置为使用keycloak作为oauth2客户端提供程序。 angu

  • 我正在Inno安装程序中开发一个安装文件。当用户选择“自定义”时,它有3个不同的可选组件要安装。 它工作正常,但当传递参数时,不会安装任何组件。我想是因为没有检查组件。 …这是相关的代码片段: 我需要在传递 / 或 参数时默认安装三个组件之一(组件“Usuario”)。 我想我必须使用,但我不知道在哪里。事实上,我尝试在部分添加,但没有任何反应: 在”部分中都没有: 以下是我需要的: < Li >

  • 在我的keycloak客户端设置中,我向Web Origins配置部分添加了一个值'*'。 我还使用node cors库在我的node express应用程序上启用了cors,请遵循以下express指南 我使用keycloak的3.2.1版本,以防有任何不同(我看到一个新版本是作为RC发布的) 谢谢

  • 我已经实现了一个自定义的Keycloak UserStorageProvider SPI(以下是官方文档https://www.Keycloak.org/docs/latest/server_development/index.html#_user-storage-spi的第11点),它执行以下操作: 根据外部身份验证服务对用户(以前不存在于本地存储中)进行身份验证。 将(针对自定义服务成功进行身

  • 这里和这里的类似问题并没有帮助我解决这个问题。 我使用的是KeyClope 4.4。0来保护我的REST服务,该服务是使用Spring Boot实现的,我使用React作为前端。 当前端(在上运行)调用并被重定向到KeyCloak登录页面时,我得到一个CORS错误。 错误是: localhost/:1未能加载http://localhost:8080/login:重定向自'http://local

  • 使用默认值几个好处: 如果变量未定义可以防止报错 如果变量为空可以提供默认值,减少条件判断,复杂默认值还是要使用条件判断标签来实现 给变量设置默认值输出 {$category.name|default='分类名为空'} {$user.user_nickname|default='这个家伙没有设置昵称'} 给系统变量设置默认值输出 {$Think.get.name|default="名称为空"}