当前位置: 首页 > 知识库问答 >
问题:

将带有OIDC的express server部署到Azure应用程序服务时出现端口错误

宇文峰
2023-03-14

我正在尝试将服务器部署到azure应用程序服务。服务器代码可以在下面找到。

我从日志流中得到的错误是:

2020-11-18T23:36:06.088Z错误-容器[容器名称]未响应端口8080上的HTTP ping,站点启动失败。有关调试,请参阅容器日志。

我把端口设置为8080,我知道配置正在恢复,因为我可以在日志中看到“服务器监听端口8080”。我已经尝试改变WEBSITES_PORT80和8080,因为我看到其他职位,但我认为我的问题是不同的。

这个网站在我使用OIDC库添加授权之前工作。

该应用程序在本地使用下面的服务器代码工作。

const https = require('https')

const express = require('express')
const path = require('path')
const app = express()
const fs = require('fs')

const key = fs.readFileSync('./key.pem')
const cert = fs.readFileSync('./cert.pem')

require('dotenv').config()
app.use(express.json())
app.use(express.urlencoded({
  extended: true
}))
app.use(express.static('express'))
var cors = require('cors')
const OktaJwtVerifier = require('@okta/jwt-verifier')
const session = require('express-session')
const {
  ExpressOIDC
} = require('@okta/oidc-middleware')

var getUserInfo = require('./getUserInfo')

// session support is required to use ExpressOIDC
app.use(
  session({
    secret: 'this should be secure',
    resave: true,
    saveUninitialized: false,
    cookie: {
      httpOnly: false,
      secure: true,
    },
  })
)

const oidc = new ExpressOIDC({
  issuer: process.env.ISSUER || 'https://[custom auth server domain].gov/oauth2/default',
  client_id: process.env.CLIENT_ID || 'xxxxxxxxxxxxxxxxx',
  client_secret: process.env.CLIENT_SECRET || 'xxxxxxxxxxxxxxxxxx',
  redirect_uri: process.env.REDIRECT_URI ||
    'https://localhost:3000/authorization-code/callback',
  appBaseUrl: process.env.APP_BASE_URL || 'https://localhost:3000',
  scope: 'openid profile',
})

// ExpressOIDC attaches handlers for the /login and /authorization-code/callback routes
app.use(oidc.router)

app.use(cors())
app.options('*', cors())
app.get('/userinfo', (req, res) => {
  let domain = 'dev'

  if (req.isAuthenticated()) {
    getUserInfo.userRequest(res, req.userContext, domain)
  }
})

app.get('/authStatus', (req, res) => {
  if (req.isAuthenticated()) {
    res.send(req.userContext.userinfo)
  }
})

app.post('/forces-logout', oidc.forceLogoutAndRevoke(), (req, res) => {
  // Nothing here will execute, after the redirects the user will end up wherever the `routes.logoutCallback.path` specifies (default `/`)
})

var linkObj = {not relevant links used hrefs on html based on env}

// default URL for website
app.get('/', function(req, res) {
  res.sendFile(path.join(__dirname + '/express/index.html'))
  //__dirname : It will resolve to your project folder.
})

// FAQ Path
app.get('/help', function(req, res) {
  res.sendFile(path.join(__dirname + '/express/help.html'))
  //__dirname : It will resolve to your project folder.
})

app.get('/links', (req, res) => {
  res.json(linkObj)
})

app.post('/forces-logout', oidc.forceLogoutAndRevoke(), (req, res) => {
  // Nothing here will execute, after the redirects the user will end up wherever the `routes.logoutCallback.path` specifies (default `/`)
})

// default URL for website
app.get('*', function(req, res) {
  res.sendFile(path.join(__dirname + '/express/index.html'))
  //__dirname : It will resolve to your project folder.
})

const port = normalizePort(process.env.PORT || '3000')
if (process.env.PORT) {
  const server = https.createServer(app)
  server.listen(port)
} else {
  const server = https.createServer({
    key: key,
    cert: cert
  }, app)
  server.listen(port)
}

console.debug('Server listening on port ' + port)

function normalizePort(val) {
  var port = parseInt(val, 10)

  if (isNaN(port)) {
    // named pipe
    return val
  }

  if (port >= 0) {
    // port number
    return port
  }

  return false
}

共有1个答案

巴帅
2023-03-14

我相信这句话可能会给你带来问题:

const port = normalizePort(process.env.PORT || '3000')

我会尝试将其更改为:

const port = normalizePort(process.env.PORT || '8080')

您还需要更改这些行以获得公共URL,而不是localhost

  redirect_uri: process.env.REDIRECT_URI ||
    'https://localhost:3000/authorization-code/callback',
  appBaseUrl: process.env.APP_BASE_URL || 'https://localhost:3000',

更改这些后,您需要将Okta上的应用程序更新为生产重定向URI。

 类似资料:
  • 我正在尝试使用Azure DevOps发布管道将java应用程序部署到tomcat服务器。我在tomcat服务器选项卡中填写了war文件路径、服务器URL信息、用户名和密码,如下所示: 但部署失败,我得到以下错误: 我使用的路径或任何其他信息是否错误?谁能帮我一下吗,谢谢。

  • 我的python应用程序作为本地docker容器运行良好,但当尝试在heroku上部署时,我得到以下错误: 错误R10(启动超时)- 我的dockerfile文件: 我认为这可能与应用程序对于dyno=1来说有点太大有关,我必须付费才能增加dyno?但是我不确定.. 提前感谢!!

  • 最近,我试图做一个测试部署的Blazor服务器应用程序在本地托管的库伯内特斯实例运行在docker桌面。 我设法在容器中正确启动了应用程序,应用了迁移等,日志告诉我应用程序正在运行并等待。 使用Docker桌面中的< code > Reset Kubernetes k luster 重置Kubernetes后采取的步骤: > 修改<code>hosts</code>文件以包含<code>127.0

  • 我正在尝试将我的应用程序部署到Heroku,但似乎存在一些问题。每次我尝试: 我的heroku日志告诉我,我的应用程序崩溃了,我错过了“调试器”宝石。我在Heroku上找到了这条线索和这一页。当我尝试安装“byebug”gem时,bundle告诉我它不会安装在Ruby 1.9.3上,当我按照Heroku的建议将“debugger”gem放在gem文件的开发组中时,我仍然会收到相同的错误。 我也更新

  • 我有一个vuejs应用程序,它是用vue cli设置的,我正在尝试将我的应用程序部署到Heroku。 这是我的服务器: 我从gitignore中删除dist, 我在package.json中添加了一个类似“start”的起始点:“node server.js” 以下是我在控制台看到的内容: 加载资源失败:服务器响应,状态为503(服务不可用)/Favicon.ico:1 以下是heroku日志:

  • 在Heroku上部署Node.js应用程序时,我遇到以下错误。 2017-04-18T18:40:10.158442+00:00APP[Web1]:npm错误!请在任何支持请求中包含以下文件: 2017-04-18T18:40:10.158544+00:00APP[Web1]:npm错误!/app/npm-debug.log 2017-04-18T18:40:10.237236+00:00 Her