Itgenobr019 on use of headless OAuth on Exact Online

When running Invantive Data Hub using 20.1.517 with Implicit Grant Flow, an error occurs:

itgenobr019: A connection to the database ‘…’ could not be established as user ‘…’.
Could not log on to Exact Online using user name and password. Reason is unknown.

Instructions have been followed as given on Circumvent two-step verification and refresh tokens on Exact Online using Data Hub

The HTML found in trace contains text below.

How can I activate the Implicit Grant Flow with Data Hub?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">
	<head>
		<title>Exact Online</title>
		<meta name="save" content="history" />
		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
		<link id="ExactCSS" rel="stylesheet" type="text/css" href="/content/styles/ExactFuel/css?v=isGD4RXaR5afN0EFD4hMayt0-_XPeror31jlozhCafY1.css"></link>
		<link id="OAuthCSS" rel="stylesheet" type="text/css" href="/content/styles/OAuth/css?v=hy8uKhApY0O-NFhT_IQn6xCtWMBGbLTcpLJWM6TdkU81.css"></link>
	</head>
	<body>
		<form method="post" action="./auth?response_type=token&amp;client_id=57275dfd-...-2e6646e0bb45&amp;redirect_uri=https%3a%2f%2feolclientredirect.invantive.com&amp;state=423dbd4b-979b-4961-8d83-ad6ac3b2f96c" id="PublicOAuth2Form" class="OAuth2Form oauth"><div id="WaitMessage" class="WaitMessage" style="opacity:0.3;"><table><tr><td><div id="WaitMessageImg"><img alt="" src="/docs/images/icon-wait.gif" /></div><div>Even geduld a.u.b...</div></td></tr></table></div>
<div class="aspNetHidden">
<input type="hidden" name="CSRFToken" id="CSRFToken" value="Hg5Jx...DOv" />
<input type="hidden" name="sysFocus" id="sysFocus" value="" />
<input type="hidden" name="_Division_" id="_Division_" value="1" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="IOXQe4...==" />
</div>

<input type='hidden' name='SysNoBack' id='SysNoBack' class='saveHistory'/>
<script src="/content/scripts/base/js?v=9Zmm3m4caygFNxqj8FieFkX2Y5hVTrUWeGSD0LgyQAs1.js" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
/// <reference path="../../content/scripts/syscontrols/syselement.js" />
function SysDivision() {
	var div = new SysElement('_Division_');
	if (div.empty) {
		return 1;
	}
	else {
		return Number(div.Value());
	}
}function SysCSL() {return 1;}//]]>
</script>

<script src="/content/scripts/SysComponents/js?v=oP-t6fgm232YJE8t3-7uKt0YTzbdEulB7OSC6QkrFXQ1.js" type="text/javascript"></script>
<script src="/content/scripts/Qowaiv/js?v=heugIiCVwRHt2KMXu1coJut5K8NWmQQoV1dxK63tBcw1.js" type="text/javascript"></script>
<script src="/content/scripts/React/js?v=n4Ma5IZYv8Oot-ZKh_Z8_LBHZGsbRgmUsPxD7v_p2Gc1.js" type="text/javascript"></script>
<script src="/content/scripts/SysControls/js?v=hNdZQRtsD0JUJP240ojGRPjOZ6wd5OM3AUz-vtoG1c41.js" type="text/javascript"></script>
<script src="/content/scripts/DatePicker/js?v=bESb3vXLsqd_TmVp7OHwg7WL6bvovwqmFfC35jn7axg1.js" type="text/javascript"></script>
<script src="/content/scripts/SysGrid/js?v=uFXAtwd6d7vJXTuCowAw2luYSnAMXxiFAoXXbgDt9081.js" type="text/javascript"></script>
<script src="/content/scripts/SalesforceHelp/js?v=qUH9z0WNGyqpDKIOI2cYf5JjvgDvo2ip2Miv1ma3niY1.js" type="text/javascript"></script><script type="text/javascript">
//<![CDATA[

function SysUserName() { return 'Exact Webguest account'; }function SysDateFormat(expr) {
var sdate = expr.getDate();
if ( sdate.toString(10).length == 1 ) sdate = '0' + sdate;
var smonth = expr.getMonth() + 1;
if ( smonth.toString(10).length == 1 ) smonth = '0' + smonth;
var syear = expr.getFullYear();
return(sdate + '-' + smonth + '-' + syear);
}
var sysFormatNegative=1;var sysFormatSep=',';var sysFormatDecSep='.';var sysFormatDateSep='-';var sysFormatDate='1';var sysDateMask='99-99-9999';var sysDateFormatString='dd-mm-yyyy';var sysLanguageCode='NL';var sysHelpUrl='https://support.exactonline.com/community/s/knowledge-base';var sysSeed=Qowaiv.Guid.parse('b4ed4a71-dc38-4160-bd7c-0790e52843a4');
//]]>
</script>

<div class="aspNetHidden">

	<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="F7A6CF1B" />
	<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
	<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
	<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="NIspWFx...==" />
</div>
			<input type="hidden" name="Attempts" id="Attempts" value="0" class="saveHistory" />
			<input type="hidden" name="Action" id="Action" value="0" class="saveHistory" />
			<div class="enhanced-navigation">
				<div class="enhanced-navigation__top">
					<span class="oauth__header">
						Inloggen
					</span>
					
				</div>
				<div class="enhanced-navigation__bottom">
					<div id="EnhancedLogo" class="enhanced-logo">
						<div class="enhanced-logo__logo">
							<div class="oauth__header-logo" />
						</div>
					</div>
				</div>
			</div>
			<div class="oauth__content">
				<br />
				
				<div id="LoginForm" class="login-form" onkeypress="javascript:return WebForm_FireDefaultButton(event, &#39;LoginButton&#39;)">
	
					<div class="ex-margin-bottom--16 oauth__input">
						<input type="text" data-displayableval="true" data-onclearvalue="$('#UserNameField').val('');" name="UserNameField" id="UserNameField" placeholder="Gebruikersnaam" size="20" title="Geef een gebruikersnaam." onkeydown="return true;SysInputKeyDown(event, true);" onblur="SysInputOnBlur(this);" onfocus="SysInputOnFocus(this);" class="saveHistory" />

					</div>
					<div class="ex-margin-bottom--16 oauth__input">
						<input type="password" name="PasswordField" id="PasswordField" placeholder="Wachtwoord" onkeydown="return true;SysInputKeyDown(event, true);" autocomplete="new-password" onblur="SysInputOnBlur(this);" onfocus="SysInputOnFocus(this);" class="saveHistory" />
					</div>
					<div class="ex-margin-bottom--16 oauth__input">
						
					</div>
					<div class="ex-margin-bottom--16">
						
						<input type="submit" name="LoginButton" value="Inloggen" onclick="return PreventMultiSubmit();" id="LoginButton" class="ex-btn ex-btn--primary ex-btn--large ex-btn--full LoginButton" />
						<input type="hidden" name="hf2StepLoginStep" id="hf2StepLoginStep" value="0" class="saveHistory" />
					</div>
					<div class="space"></div>
				
</div>
			</div>
			<style>
   ...
			</style>
			<script type="text/javascript">
...
			</script>
		
<script type="text/javascript">
...
</script>

<script src="/WebResource.axd?d=pynGkm...20qE1&amp;t=637461017481343508" type="text/javascript"></script>


<script type="text/javascript">
...
</script>
<script type="text/javascript">
...
</script>
<script type="text/javascript">
...
</script><script type="text/javascript">
...
</script><script type="text/javascript">
...
</script><a onfocus="SysFocusFirst()" href="#"></a></form>
	</body>
</html>

Releases vanaf 20.1.526 laten de daadwerkelijke tekst van de foutmelding beter zien. Die luidt in dit geval:

Error itgenobr111: A connection to the database ‘L120\invoicing3’ could not be established as user ‘’.
De ingevoerde verificatiecode is onjuist of verlopen. Probeer het nog een keer. U kunt het nog 8 keer proberen. Daarna wordt uw account tijdelijk (5 minuten) geblokkeerd.

Blijkbaar is niet de juiste secret key voor TOTP gebruikt.

Andere mogelijke meldingen zijn:

Error itgenobr112: A connection to the database ‘L120\invoicing3’ could not be established as user ‘’.
Het inloggen is mislukt. Controleer uw gebruikersnaam en wachtwoord. Let op: uw gebruikersnaam en e-mailadres kunnen hetzelfde zijn. Na 5 mislukte pogingen wordt uw gebruikersaccount voor ten minste 5 minuten geblokkeerd.

Andere foutcodes zijn itgenobr108 en itgenobr109.