如何解决heroku和okta之间的端口问题?

时间:2020-04-17 16:33:48

标签: node.js heroku port okta

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

我在PC上本地测试的应用正常运行,它开始在端口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之间的端口问题吗?


更新
我尝试了以下答案和评论中的建议,但仍然无法正常工作...
我从okta身份验证获得的是:

“ 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

2 个答案:

答案 0 :(得分:1)

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

https://nodejs-okta.herokuapp.com

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

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

注意:我在Okta的开发者倡导团队工作

答案 1 :(得分:1)

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

请更改此设置(注意:{ "Manufacturers": [ { "ManufacturerId": 1, "Products": [ { "ProductId": P1, "Qualities": [ { "QualityId": 1, "Price": 10 }, { "QualityId": 2, "Price": 20 }] }] }, { "ManufacturerId": 2, "Products": [ { "ProductId": P1, "Qualities": [ { "QualityId": 1, "Price": 15 }, { "QualityId": 2, "Price": 30 }] }] }] } 前加双斜杠):

{
    "Keys": [
        "1-1-1", //The QualityId 1 of productId 1 of ManuId 1 is the cheapest
        "2-1-1"  //The cheapest sibling
    ]
}

与此(请注意:authorization-code前的单斜线):

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

在进行了上述更正之后,只需尝试重做所有测试(登录,身份验证等)。
我有99%的把握可以解决您的问题。