我有一个使用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
答案 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%的把握可以解决您的问题。