【问题标题】:Getting "Invalid parameter: redirect_uri" trying NODE.JS authentication with KeyCloak获取“无效参数:redirect_uri”尝试使用 KeyCloak 进行 NODE.JS 身份验证
【发布时间】:2016-09-04 01:55:00
【问题描述】:

我正在使用 Node.JS (express) 和一个名为 keycloak-connect 的 NPM 连接到 keycloak 服务器。
当我按照所述实施默认机制来保护路由时:

app.get( '/about', keycloak.protect(), function(req,resp) {
    resp.send( 'Page: ' + req.params.page + '<br><a href="/logout">logout</a>');
} );

我确实被提及 keycloak,但出现以下错误:“无效参数:redirect_uri

我的查询字符串是:(xx 用于演示)
https://xx.xx.xx.xx:8443/auth/realms/master/protocol/openid-connect/auth?client_id=account&amp;state=aa11b27a-8a0b-4a3b-89dc-cb8a303dbde8&amp;redirect_uri=http%3A%2F%2Flocalhost%3A3002%2Fabout%3Fauth_callback%3D1&amp;response_type=code

我的 keycloak.json 是:(xx 用于演示)

{
  "realm": "master",
  "realm-public-key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwS00kUaH6OoERNSkFUwxEBxx2SsqmHu9oVQiPs6nlP9fNQm0cK2lpNPphbLzooZL6kivaC4VzXg20F3zY7jRDc4U/XHgXjZVZUXxJ0NeCI5ESDo00EV9xh9XL3xvXslmG0YLWpywtQSYc+XcGDkz87edokbHQIIlQc2sgoVKIKpajZyrI5wnyMhL8JSk+Mdo2T9DeNnZxPkauiKBwWFJReBO51gsoZ49cbD39FRa8pLi8W0TtXoESIf/eGUSdc3revVFR7cjzHUzxF0p0WrLsTA1aBCLkt8yhnq88NqcKsW5mkxRmhLdw20ODTdsmRtm68rjtusMwifo/dZLJ9v5eQIDAQAB",
  "auth-server-url": "https://xx.xx.xx.xx:8443/auth",
  "ssl-required": "external",
  "resource": "account",
  "credentials": {
    "secret": "9140d4e6-ed05-4899-a3c0-a9cf94ab407d"
  },
  "use-resource-role-mappings": true
}

keycloak 配置:

【问题讨论】:

    标签: node.js npm keycloak


    【解决方案1】:

    我猜你在客户端设置选项卡中为客户端 URL 添加了一个端口。

    例如

    root url: https://demo.server.biz:443/cxf
    

    只需删除端口

    root url: https://demo.server.biz/cxf
    

    Valid Redirect URIsWeb Origins 也是如此

    1 更新

    2 更新您的网址

    【讨论】:

    • 我没有端口,只有默认值,我将更新我的问题以包含来自 keycloak 的屏幕截图。我也尝试将“localhost”添加到这些字段
    • localhost 是您尝试保护的网址吗?如果不添加您尝试保护的 ​​URL。我也用截图扩展了我的答案。
    • 在这种情况下,您要么必须添加 /about,要么需要通配符 (*)。请参阅随附的屏幕截图。
    • 谢谢,我之前也尝试过通配符,我得到了相同的结果
    • 我只是好奇您是否像我在第二个示例中那样应用了配置?你用的是 cxf 还是 resteasy?
    【解决方案2】:

    我不知道你是否会继续怀疑,但我必须通过以下方式使用 https 调用配置节点服务器:

    var fs = require('fs');
    var https = require('https');
    .....
    const HOST = 'your_site.com';
    const PORT = process.env.PORT || 3001;
    
    const key = fs.readFileSync('./certs/private.pem');
    const cert = fs.readFileSync('./certs/public.pem');
    const https_options = {
        key: key,
        cert: cert
    };
    var serverKeycloak = https.createServer(https_options, appKeyCloak);
    serverKeycloak.listen(PORT, HOST);
    ...
    

    然后适配器自动发送到keycloak https

    【讨论】:

      猜你喜欢
      • 2018-01-03
      • 2019-01-30
      • 2021-09-25
      • 2017-11-04
      • 2021-11-16
      • 1970-01-01
      • 2021-04-26
      • 2019-03-02
      • 1970-01-01
      相关资源
      最近更新 更多