PLEASE NOTE: If you are upgrading from a release prior to 71.250.3101 to release 71.250.3101 or newer, you will need to follow the steps below to upgrade.
If you would prefer to have a Technical Support Engineer while doing the upgrade, please submit a ticket at our help portal, https://support.integrify.com, and we can schedule an upgrade call.
- Download and install Node.js v20
- Download and install the .NET 4.8 Runtime
- Reboot the Integrify application server
- Download and install the latest Integrify release from the Integrify Release Page
- After installation is complete, update the application through the Integrify OnPremise Manager
- Reboot the Integrify application server
- After the server is back up...
- Manually run the Nov 2024 database schema update,
C:\Program Files (x86)\Integrify\OnPremise Manager\templates\dbscripts\mssql\update\7.0.24.1106-U.sql, starting from line 20 against the Consumers database - Once that's been run, open the Integrify OnPremise Manager, choose the Update Database option and run each available script one-at-a-time
- Copy the runtime section out of
C:\integrify\app\service\web.config.templateand updateC:\integrify\app\service\web.configwith the copied runtime section - Set the targetFramework value at the top of
C:\integrify\app\service\web.configto 4.8 for the compilation and httpRuntime parameters - Copy the mongo_connection key out of
C:\integrify\app\settings\settings.config.templateand paste it intoC:\integrify\app\settings\settings.config - Update
C:\integrify\app\webserver\mongo-config.jswith new mongo connection fromC:\integrify\app\webserver\mongo-config.sample.js - Open File Explorer and browse to
C:\integrify\app\scheduler\node_modulesand delete the winser directory - Open an administrative Powershell or Command Prompt and cd to
C:\integrify\app\scheduler\node_modulesand runnpm install
- Manually run the Nov 2024 database schema update,
*** IF YOU'RE LOGGING IN WITH SSO ***
-
Open File Explorer and make a backup copy of
C:\integrify\app\webserver\app\_custom\integrify-saml-auth-master\route.js -
Update
C:\integrify\app\webserver\app\_custom\integrify-saml-auth-master\route.jsto be the following.../** * Created by trusky on 9/16/15. */ var samls = require("./samls"); var bodyParser = require('body-parser') var morgan = require('morgan'); var fs = require ("fs") var path = require("path") var express = require('express'); var app = express(); var integrifyAuth = require("./integrify-auth") var url = require("url") var cookieParser = require("cookie-parser") var R = require("ramda") var querystring = require("querystring") app.use(morgan('dev')); var logger; try { logger = require('integrify-require')('integrify-logger'); logger.info("using integrify logger", "integrify-saml") } catch(e) { console.log(e); console.log("using console for logging") logger = console; } app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); console.log("samls loaded: " + samls.passport._strategies) app.use(samls.passport.initialize()); app.get('/:appkey/metadata', function (req, res) { var strategy = samls.passport._strategies['saml-' + req.params.appkey]; var metaData = strategy.generateServiceProviderMetadata() res.type('text/xml') res.send(metaData); }); app.get("/:appkey/", function(req,res){ var exp = 600 * 1000; var integrifyUrl = req.query.r || req.query.redirect; res.cookie('integrifyUrl', integrifyUrl, {maxAge: exp}); //res.redirect("/samlauth/" + req.params.appkey + "/login") const redirectUrl = "/samlauth/" + req.params.appkey + "/login"; res.send(`<script>window.location.href = "${redirectUrl}";</script>`); }) app.get('/:appkey/login', function(req, res, next) { samls.passport.authenticate('saml-' + req.params.appkey, function(err, user, info) { if (err) { return next(err); } if (!user) { return res.status(500).send(err); } //req.logIn(user, function(err) { // if (err) { return next(err); } //return res.redirect('/' + req.params.appkey); //}); })(req, res, next); }); app.get('/:appkey/logout', function(req, res) { res.clearCookie('iapi_token'); var config = samls.config[req.params.appkey]; const samlStrategy = samls.passport._strategies["saml-" + req.params.appkey]; req.user = {nameIDFormat: config.samlStrategy.identifierFormat, nameID: req.cookies.NameID}; samlStrategy.logout(req, function(err, redirectUrl) { if (err) { return next(err); } if (!redirectUrl) { return res.status(500).send(err); } res.clearCookie('NameID'); res.redirect(redirectUrl) }); }); app.post('/:appkey/login/callback', function(req, res, next) { samls.passport.authenticate('saml-' + req.params.appkey, function(err, user, info) { var config = samls.config[req.params.appkey]; if (err) { logger.error("Error extracting user from saml assertion:", err, 'integrify-saml') return next(err); } if (!user) { logger.error("Empty user from saml assertion:", 'integrify-saml') return res.status(500).send(err) } logger.info("user extracted from saml assertion:", user, 'integrify-saml') integrifyAuth.loginSaml(user, config.integrify, function (err, tok) { if (err) { return res.status(500).send(err); } var exp = 600 * 1000; var destinationUrl = req.cookies.integrifyUrl; res.clearCookie('integrifyUrl', {maxAge: exp}); if (destinationUrl) { var redirectrUrlObj = url.parse(destinationUrl); delete redirectrUrlObj.search; if (!redirectrUrlObj.query) redirectrUrlObj.query = {}; //querystring token only works in v6 if (config.integrify.useQueryStringSToken){ redirectrUrlObj.query.token_type = "bearer"; redirectrUrlObj.query.token = tok.token; } else { var accessToken = {}; accessToken.oauth_token = tok.token.replace(/-/g, ""); accessToken.oauth_token_secret = '00000'; res.cookie('iapi_token', 'access&'+ querystring.stringify(accessToken), { secure: config.integrify.use_secure_cookie, httpOnly: config.use_http_only_cookie }); res.cookie('NameID', user[config.integrify.fieldMap["UserName"]], { secure: config.integrify.use_secure_cookie, httpOnly: config.use_http_only_cookie }); } var redirectUrl = url.format(redirectrUrlObj); //return res.redirect(redirectUrl); res.writeHead(302, { Location: redirectUrl }); res.end(); } else { return res.status(500).send("Your login took too long to process"); } }); })(req, res, next); }); app.get('/:appkey/status', function (req, res) { var config = samls.config[req.params.appkey]; var msg = "SAMl Module Not Configured for " + req.params.appkey; if (config){ msg = 'SAML Module Loaded form ' + req.params.appkey; } res.send(msg); }); var SamlAuth = function(){ this.router = app; } module.exports = new SamlAuth();
*** IF YOU'RE LOGGING IN WITH WINDOWS AUTH ***
-
Open File Explorer and make a backup copy of
C:\integrify\app\auth\bin\Microsoft.Web.Infrastructure.dll - Copy
C:\integrify\app\service\bin\Microsoft.Web.Infrastructure.dlltoC:\integrify\app\auth\bin\Microsoft.Web.Infrastructure.dll - Open File Explorer and make a backup copy of
C:\integrify\app\auth\web.config -
Update
C:\integrify\app\auth\web.configto the following...<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings file="../settings/settings.config" /> <!-- For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367. The following attributes can be set on the <httpRuntime> tag. <system.Web> <httpRuntime targetFramework="4.8" /> </system.Web> --> <system.web> <httpRuntime targetFramework="4.8" /> <compilation debug="false" targetFramework="4.8" /> <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" /> </system.web> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="DnsClient" publicKeyToken="4574bb5573c51424" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-1.8.0.0" newVersion="1.8.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Google.Protobuf" publicKeyToken="a7d26565bac4d604" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-3.28.2.0" newVersion="3.28.2.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.IO.Pipelines" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.1.4.0" newVersion="4.1.4.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Rebex.Mail" publicKeyToken="1c4638788972655d" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-1.0.4086.0" newVersion="1.0.4086.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Web.Infrastructure" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Threading.Channels" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="ZstdSharp" publicKeyToken="8d151af33a4ad5cf" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-0.8.1.0" newVersion="0.8.1.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Scripting" publicKeyToken="7f709c5b713576e1" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-1.3.4.0" newVersion="1.3.4.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Dynamic" publicKeyToken="7f709c5b713576e1" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-1.3.4.0" newVersion="1.3.4.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-8.0.0.1" newVersion="8.0.0.1" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="SharpCompress" publicKeyToken="afb0a02973931d96" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-0.38.0.0" newVersion="0.38.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-8.0.0.1" newVersion="8.0.0.1" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Snappier" publicKeyToken="a1b25124e6e13a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-1.1.6.0" newVersion="1.1.6.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.IdentityModel.Abstractions" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-6.22.0.0" newVersion="6.22.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Identity.Client" publicKeyToken="0a613f4dd989e8ae" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.64.1.0" newVersion="4.64.1.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="MongoDB.Bson" publicKeyToken="94992a530f44e321" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.29.0.0" newVersion="2.29.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="MongoDB.Driver" publicKeyToken="94992a530f44e321" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.29.0.0" newVersion="2.29.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="MongoDB.Driver.Core" publicKeyToken="94992a530f44e321" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.29.0.0" newVersion="2.29.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="AWSSDK.Core" publicKeyToken="885c28607f98e604" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-3.7.0.0" newVersion="3.3.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="AWSSDK.SecurityToken" publicKeyToken="885c28607f98e604" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-3.7.0.0" newVersion="3.3.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-8.0.0.1" newVersion="8.0.0.1" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Configuration.ConfigurationManager" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Diagnostics.PerformanceCounter" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="StackExchange.Redis" publicKeyToken="c219ff1ca8c2ce46" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.8.0.0" newVersion="2.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Pipelines.Sockets.Unofficial" publicKeyToken="42ea0a778e13fbe2" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="1.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Identity.Client" publicKeyToken="0a613f4dd989e8ae" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.64.1.0" newVersion="4.64.1.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="BouncyCastle.Cryptography" publicKeyToken="072edcf4a5328938" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.4.0.0" newVersion="2.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="K4os.Compression.LZ4" publicKeyToken="2186fa9121ef231d" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-1.3.8.0" newVersion="1.3.8.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="K4os.Compression.LZ4.Streams" publicKeyToken="2186fa9121ef231d" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-1.3.8.0" newVersion="1.3.8.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="K4os.Hash.xxHash" publicKeyToken="32cd54395057cec3" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-1.0.8.0" newVersion="1.0.8.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="ICSharpCode.SharpZipLib" publicKeyToken="1b03e6acf1164f73" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-1.4.2.13" newVersion="1.4.2.13" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="IronPython" publicKeyToken="7f709c5b713576e1" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.7.12.0" newVersion="2.7.12.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="IronPython.Modules" publicKeyToken="7f709c5b713576e1" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.7.12.0" newVersion="2.7.12.0" /> </dependentAssembly> </assemblyBinding> </runtime> <system.webServer> <security> <authentication> <windowsAuthentication enabled="true"> <providers> <clear /> <add value="NTLM" /> </providers> </windowsAuthentication> <anonymousAuthentication enabled="false" /> </authentication> </security> </system.webServer> </configuration>
Comments
0 comments
Article is closed for comments.