Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何解决heroku和okta之间的港口问题?_Node.js_Heroku_Port_Okta - Fatal编程技术网

Node.js 如何解决heroku和okta之间的港口问题?

Node.js 如何解决heroku和okta之间的港口问题?,node.js,heroku,port,okta,Node.js,Heroku,Port,Okta,我有一个nodejs应用程序,它使用okta服务进行身份验证 我在pc上本地测试的应用程序运行正常,它在端口3000上开始侦听: const port = process.env.PORT || 3000 app.listen(port, () => console.log(`App listening on port ${port}`)) Login redirect URIs : http://localhost:3000/authorization-code/callback

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

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

const port = process.env.PORT || 3000
app.listen(port, () => console.log(`App listening on port ${port}`))
Login redirect URIs : http://localhost:3000/authorization-code/callback 
到目前为止还不错。
下一步,我在heroku上部署了该应用程序,但不幸的是,它无法工作…
我检查了日志文件,发现了罪魁祸首:heroku似乎忽略了我在.env文件中设置为3000的端口,它使用了一个(随机?)端口值,例如16709:

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

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

const port = process.env.PORT || 3000
app.listen(port, () => console.log(`App listening on port ${port}`))
Login redirect URIs : http://localhost:3000/authorization-code/callback 
所以我被卡住了。。。我搜索了stackoverflow,发现了以下内容:,但不幸的是没有答案:(

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


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

“400-请求错误。您的请求导致错误。Identityy” 提供程序:未知。错误代码:无效的\u请求。“

以下是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
调试上下文 调试数据 身份代码 授权服务器 AuthorizationServerName默认值 ClientAuthType客户端\u机密\u基本 GrantType授权代码 授权示波器 重定向URIhttps://my_app.herokuapp.com//authorization-code/callback 请求ID RequestUri/oauth2/default/v1/token 请求范围 恐吓怀疑虚假 Url/oauth2/default/v1/token? LegacyEventType app.oauth2.as.token.grant\u失败
app Heroku在内部设置一个随机端口,但在标准https端口(443)上向公众公开您的应用。因此,如果您在Heroku上有一个名为:nodejs-okta的应用,则可公开访问的url为:

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


注意:我在Okta的开发者宣传团队工作,app Heroku在内部设置了一个随机端口,但在标准https端口(443)上向公众公开了你的应用。因此,如果你在Heroku上有一个名为:nodejs-Okta的应用,那么公众可访问的url将是:

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


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

好吧,通过检查您的Okta日志,您的重定向URL中似乎有一个额外的“/”。
这无疑是失败的主要原因“不匹配的\u重定向\u uri

请更改此项(注意:授权代码前的双斜杠):

使用此选项(注意:授权代码前的单斜杠):

在上述更正之后,只需尝试重新执行所有测试(登录、验证等)。

我99%确信这将解决您的问题。

好吧,通过检查您的okta日志,您的重定向URL中似乎有一个额外的“/”。
这无疑是失败的主要原因“不匹配的\u重定向\u uri

请更改此项(注意:授权代码前的双斜杠):

使用此选项(注意:授权代码前的单斜杠):

在上述更正之后,只需尝试重新执行所有测试(登录、验证等)。

我99%相信这会解决您的问题。

谢谢您的回答,但我找不到在开发者控制台的白名单中设置URL的菜单的确切位置…?从Okta开发者控制台中,从菜单中选择
应用程序
。单击您的OIDC应用程序并选择
常规
选项卡。单击
编辑
,然后单击n在页面的
登录重定向URI
部分添加一个URI。HTH!哦,已经尝试过了,但不起作用。通过“白名单”我以为你指的是开发人员控制台中为URL白名单设计的菜单/功能…还有其他想法或我应该进一步研究什么吗?谢谢回答,但我找不到在开发人员控制台白名单中设置URL的菜单的确切位置…?从Okta开发人员控制台中,选择
Applications
从菜单中。单击您的OIDC应用程序并选择
常规
选项卡。单击
编辑
,然后将URI添加到页面上的
登录重定向URI
部分。HTH!哦,已经尝试过了,但不起作用。通过“白名单”我以为你指的是为开发控制台中的URL白名单设计的菜单/功能…还有其他想法或我应该进一步调查什么吗?我已经用我得到的错误、heroku的一些日志和登录验证代码片段更新了我的问题。也许你可以发布错误来自okta日志?这些对您的情况最有帮助。Heroku日志在这里没有多大帮助,因为问题似乎在身份验证方面,即来自okta。我已经用我得到的错误更新了我的问题,一些来自Heroku的日志和登录身份验证代码片段。也许您可以发布错误来自okta日志?这些对您的情况最有帮助。Heroku日志在这里没有多大帮助,因为问题似乎在授权方面,即来自okta。