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

来自rest api的keycloak登录已被CORS阻止

吕俊才
2023-03-14

我正在尝试使用keycloak从现有的localhost(localhost:3000)登录页面进行登录。Keycloak在另一台主机上运行(http://kchost:38080)。我知道这不是推荐的登录方式,但我需要尽快适应现有的系统。

尝试卷曲:

    curl --location --request POST 'http://kchost:38080/auth/realms/myrealm/protocol/openid-connect/token' \
        --header 'Content-Type: application/x-www-form-urlencoded' \
        --data-urlencode 'client_id=publictestclient' \
        --data-urlencode 'username=myuser' \
        --data-urlencode 'password=mypass' \
        --data-urlencode 'grant_type=password'
axios.defaults.httpsAgent = new https.Agent({ rejectUnauthorized: false })
axios.defaults.crossDomain = true;

await axios({
            method: "POST",
            url: 'http://kchost:38080/auth/realms/myrealm/protocol/openid-connect/token',
            headers: {
               "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
               'Access-Control-Allow-Origin': '*'
            },
            data: {
               client_id: 'publictestclient', 
               username: 'myuser', 
               password: 'mypass', 
               grant_type: 'password', 
           }
})

错误是:CORS策略阻止了从来源“http://localhost:3000”访问位于“http://kchost:38080/auth/realms/myrealm/protocol/openid-connect/token”的XMLHttpRequest:请求头字段Access-Control-Allog-Origin不允许在飞行前响应中使用Access-Control-Allog-Headers。

如果省略标头'access-control-allog-origin':'*',则错误为:从起源'http://localhost:3000'访问位于'http://kchost:38080/auth/realms/myrealm/protocol/openid-connect/token'处的XMLHttpRequest已被CORS策略阻止:请求的资源上没有'access-control-allog-origin'标头。

在Keycloak管理端,客户端具有访问类型“public”,以避免“客户端机密”要求。已启用直接访问授权。尝试了“Web来源”和“有效重定向URL”的不同配置,当前的配置是:

valid redirect url: localhost*
web origins: *

我很确定这是一个与服务器配置有关的问题。我怎么解决?

共有1个答案

赫连晋
2023-03-14

有效的重定向url前面应该有http或https。因此,对于localhost的有效值可以是:https://localhost/*如果您想确保其安全,web起源应该类似于https://localhost。

 类似资料:
  • 我在Axios Laravel crossite中遇到问题,它返回以下erorr: CORS 策略阻止了从源“http://localhost:8000”在“http://localhost/moddle/moodle/login/index.php”处访问 XMLHttpRequest:对预检请求的响应未通过访问控制检查:请求的资源上不存在“访问控制-允许-源”标头。 我在stackoverfl

  • 我试图部署一个API用于前端。当单独测试API时,它是工作的,但当集成到Vue应用程序中时,它返回CORS错误,错误返回是: CORS策略阻止从来源“http://localhost:8080”访问位于“https://apidomain/development/pin”的XMLHttpRequest:请求的资源上没有“Access-Control-Allow-Origin”标头。 我使用serv

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

  • 我有一个。NET核心应用程序,它有一个REST API被一个角客户机使用,但遇到了CORS问题。 但仍在客户端(运行在本地端口4200上)中获取错误: CORS策略阻止从来源“HTTP://localhost:4200”访问位于“HTTP://localhost/myapi/api/table”的XMLHttpRequest:对飞行前请求的响应没有通过访问控制检查:它没有HTTP ok状态。

  • 截至今天,用户无法在新的配置文件中使用selenium登录到Google帐户。我发现,谷歌正在阻止这个过程(拒绝?)甚至尝试stackauth。(在升级到v90后经历过这种情况)。 这是我之前发布的使用OAuth登录Google的答案,直到最近才生效 简而言之,您将通过stackauth直接登录。 我可以绕过限制的唯一方法是禁用Secure-App-Access或添加以下给定参数。(我不喜欢这样,

  • 当我尝试在角7网络应用程序中执行补丁请求时,我遇到了一个问题。在我的后端,我有: 在我的前端服务中,我: 错误是: 我能做什么?谢谢