【问题标题】:how to solve port issue between heroku and okta?如何解决heroku和okta之间的端口问题?
【发布时间】:2020-07-31 05:39:52
【问题描述】:

我有一个使用 okta 服务进行身份验证的 nodejs 应用程序。

我在我的电脑上本地测试的应用程序运行正常,它开始监听端口 3000:

const port = process.env.PORT || 3000
app.listen(port, () => console.log(`App listening on port ${port}`))

到目前为止一切顺利。
下一步我在 heroku 上部署了该应用程序,但是 - 不幸的是 - 它不起作用...
我检查了日志文件,发现了罪魁祸首:似乎 heroku 忽略了我在 .env 文件中设置为 3000 的端口,它使用(随机?)端口值,例如 16709:

2020-04-17T09:51:40.261031+00:00 app[web.1]:应用监听端口 16709

这就解释了身份验证失败的原因。
正如我在 okta 设置中看到的,它肯定需要端口 3000:

Login redirect URIs : http://localhost:3000/authorization-code/callback 

所以我被卡住了......我搜索了stackoverflow,我发现了这个:How login with okta oauth in new heroku app,但不幸的是没有答案:(

请问,有人知道如何缓解/解决 heroku 和 okta 之间的这个端口问题吗?


更新
我尝试了下面的答案和 cmets 的建议,但它仍然不起作用...
我从 okta auth 得到的是:

“400 - 错误请求。您的请求导致错误。身份 提供者:未知。错误代码:invalid_request。”

这里有一些来自 okta 的日志:

结果

Reason mismatched_redirect_uri
Result FAILURE

严重警告系统

DebugContext
    DebugData
        AuthCode <removed by me>
        AuthorizationServer <removed by me>
        AuthorizationServerName default
        ClientAuthType client_secret_basic
        GrantType authorization_code
        GrantedScopes
        RedirectUri https://my_app.herokuapp.com//authorization-code/callback
        RequestId <removed by me>
        RequestUri /oauth2/default/v1/token
        RequestedScopes
        ThreatSuspected false
        Url /oauth2/default/v1/token?
LegacyEventType app.oauth2.as.token.grant_failure

【问题讨论】:

  • 我已经用我得到的错误更新了我的问题,一些来自 heroku 的日志和登录验证码 sn-p。
  • 也许您可以从 okta 日志中发布错误?这些对您的情况最有帮助。 Heroku 日志在这里没有多大帮助,因为问题似乎在 auth 方面,即来自 okta。

标签: node.js heroku port okta


【解决方案1】:

好吧,通过检查您的 okta 日志,您的重定向 URL 中似乎有一个额外的“/”。
这绝对是“mismatched_redirect_uri”失败的主要原因。

请更改此项(注意:authorization-code 之前的双斜杠):

RedirectUri = https://my_app.herokuapp.com//authorization-code/callback

使用这个(注意:authorization-code 之前的单斜杠):

RedirectUri = https://my_app.herokuapp.com/authorization-code/callback

在上述更正之后,只需尝试重做所有测试(登录、身份验证等)。
我 99% 确信这会解决您的问题。

【讨论】:

    【解决方案2】:

    app Heroku 在内部设置了一个随机端口,但在标准 https 端口 (443) 上将您的应用程序公开给公众。因此,如果您在 heroku 上有一个名为:nodejs-okta 的应用程序,那么可公开访问的 url 将是:

    https://nodejs-okta.herokuapp.com

    您需要在 okta 应用设置中将此网址列入白名单,以便重定向正常工作:

    https://nodejs-okta.herokuapp.com/authorization-code/callback

    注意:我在 Okta 的开发者宣传团队工作

    【讨论】:

    • 感谢您的回答,但我在开发者控制台的白名单中找不到用于设置 URL 的菜单的确切位置...?
    • 从 Okta 开发者控制台的菜单中选择 Applications。单击您的 OIDC 应用程序并选择 General 选项卡。单击Edit,然后将URI 添加到页面上的Login redirect URIs 部分。 HTH!
    • 哦,已经试过了,但是没用。通过“白名单”,我认为您指的是为开发控制台中的 URL 白名单设计的菜单/功能......还有其他想法或我应该进一步调查什么?
    猜你喜欢
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多