Navision Business Central Legitimationstype NavUserPassword

Hvis du kommer herhid, fordi du er i gang med at opsætte en ny webklient/webservise, og du får fejlmeddelelsen „Fehler beim Zugriff auf die Website Type: System:Fejl ved adgang til webstedet Hvis du får Type: System.UnauthorizedAccessException, så scroll venligst hurtigt længere ned, der er løsningen.

GIV AGT! Har du overhovedet brug for de klienttjenester, som kræver et certifikat? Måske har du kun brug for SOAP eller OData eller ManagementConsole til NavUserPassword, så slår du bare klienttjenesterne fra, og så behøver du ikke et certifikat og et CertificateThumbNail!

Business Central eller Navision-webklienten er blevet større siden 2018-versionen! Og den fortsætter med at vokse. Siden da har der næppe været nogen god grund til at bruge Windows-klienten. Siden Business Central 2019 (Nav Fall Release 2018) (BC15) er der derfor ikke længere en Windows-klient. Du skal blot åbne en browser, indtaste URL'en og begynde at arbejde med Navision eller Business Central med det samme. I øvrigt også på tværs af virksomhedsgrænser: Webklienten erstatter fuldstændigt fjernadgang som RDP-klient (Remote Desktop Protocol), Teamviewer, VNC og andre fjernadgangsteknologier!

Inden for et Windows-domæne er det stadig mest praktisk at logge ind via Windows, og det understøttes af Navision som standard. Bare Navision og Business Central som beskrevet her og så er du i gang. Især med webklienten! Hvis browseren beder om login-data: Indtast blot dine Windows-adgangsdata, så er du færdig.

Men hvad nu, hvis du vil bruge klienten eksternt, uden for en VPN, uden for et Windows-domæne? Så er der ingen Windows-adgangsdata at indtaste. Intet er nemmere end det: Skift Navision til legitimationstypen NavUserPassword, og... Intet virker længere!

Løsningen findes hurtigt i Event Viewer: Navision kræver nu et certifikat! Hændelsesviseren rapporterer fejlen:

Serverinstans: xxxx
Type: Microsoft.Dynamics.Nav.Types.NavConfigurationException
SuppressMessage: False
ContainsPersonalOrRestrictedInformation: False
DiagnosticsSuppress: False
MessageWithoutPrivateInformation: Certifikatet med fingeraftrykket blev ikke fundet i CurrentUser- eller LocalMachine-hukommelsen.
Microsoft.Dynamics.Nav.Types.CertificateHelper.FindCertificateFromThumbprint(String certificateThumbprint)


Microsoft vil her beskytte brugeren mod sig selv og autentificerer i denne konstellation kun via et certifikat. Uanset om du ønsker eller har brug for dette ekstra sikkerhedsniveau. Så smøg ærmerne op og kom i gang. Også meget nemt siden 2018 takket være nye Powershell-scripts. Heksenes dans med makecert.exe er ikke længere nødvendig!

Vær opmærksom! Det er vigtigt at være opmærksom! Den følgende certifikatgenerering skaber et såkaldt selvsigneret certifikat, ligesom makecert.exe gjorde tidligere. Det fungerer til den opgave, der er beskrevet her. Men det virker ikke, hvis du vil frigive Navision- eller Business Central-webservices, som er meget tæt på emnet, på internettet! I dette tilfælde har du absolut brug for et offentligt signeret certifikat, som du kan få fra forskellige udstedere og også fra LetsEncrypt.

Bemærk: Du kan også bruge et andet tilgængeligt certifikat, og i så fald skal du blot springe trinene for oprettelse af et nyt selvsigneret certifikat over. Ellers er det nemmest at udføre de følgende trin på Business Central- eller Navision-databaseserveren.

Bemærk! Den følgende del er forældet. Efterhånden (fra og med Windows 11 og Windows Server 2022) er der en ny indbygget cmdlet, det er IKKE længere nødvendigt at downloade noget som helst på forhånd et sted fra! Spring venligst længere ned til „Opret certifikat med nyt Windows“

Forberedelse: Du skal bruge Powershell-scriptet New-SelfSignedCertificateEx, som du her finde:

Download og udpak denne fil, f.eks. til c:\Temp. her vedhæftet, men jeg anbefaler selvfølgelig download direkte fra Microsoft.

  1. Start Powershell i administratortilstand
  2. skift til c:\temp (eller hvor du har gemt scriptet)
    (Tip: Du kan nøjes med at skrive de første bogstaver i de fleste kommandoer og derefter afslutte dem med TAB-tasten)
    Indstil udførelsespolitik RemoteSigned
    Bekræft forespørgslen med Y
  3. Import af moduler .\New-SelfSignedCertificateEx.ps1
  4. New-SelfSignedCertificateEx -Subject „CN=Navision-Service“ -IsCA $True -Exportable -StoreLocation LocalMachine -FriendlyName „NavUserAndPassword“ -NotAfter $([datetime]::now.AddYears(5))

Du kan selvfølgelig ændre pladsholderne for certifikatnavnet og adgangskoden, som du vil.
„Navision service“ henviser til servernavnet! I slutningen af denne vejledning finder du en mulighed for at ændre dette navn via konfigurationsfilerne. Anbefaling: Indtast den korrekte DnsIdentiy lige her! (computernavn ved installation af Business Central eller Navision).

Opret certifikat med nyt Windows

Scriptlet / Cmdlet hedder nu

$certname = „Navision-Api“ ## Erstat {certificateName} med navnet på din Nav-Service-instans
$cert = New-SelfSignedCertificate -Subject „CN=$Navision-Api“ -CertStoreLocation „Cert:\CurrentUser\My“ -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256

Du finder nu dette certifikat via (Start-menu ->) certmgr.msc Certifikater Aktuel bruger/Personlige certifikater/Certifikater

Flyt nu dette certifikat til certifikatmappen „Betroede rodcertifikatudstedere/Certifikater“:


Luk ikke skallen efter opkaldet, du har stadig brug for tommelfingeraftrykket.
Denne kommando opretter et nyt certifikat i certifikatlageret:

Visning af et nyt certifikat i certifikatlageret for Navision/Business Central-legitimationsoplysningerne NavUserAndPassword
Visning af et nyt certifikat i certifikatlageret for Navision/Business Central-legitimationsoplysningerne NavUserAndPassword

Åbn en mmc for certifikaterne (mmc.exe, File/Add SnapIn, Certificate, Computer Account/Local Computer).
Vælg det nyoprettede certifikat, højreklik, Alle opgaver, Administrer private nøgler

Tilføj servicekontoen for Navision-serviceserveren (ofte Administrator eller Netværk/Netværkstjenester)

Kopier også certifikatet til mappen Trusted root certificates/certificates (højre museknap/copy, target folder -> paste).

Du kan nu lukke certifikatadministrationen.

Kopier nu thumbprintet fra konsollen. Det er mere pålideligt end at kopiere fra certifikatadministrationen.

Tilføj nu dette „fingeraftryk“ (bogstaveligt talt: thumbprint) til Navision-tjenestens konfiguration under Certificate Tumbprint:

Konfiguration af Navision/Business Central-tjenesten med et certifikatminiatureaftryk for legitimationstypen NavUserPassword

Computernavnet er gemt i certifikatet („Navision service“). Hvis dette afviger, kan du alternativt ændre det i :

Fejl i identitetskontrol for en udgående besked. Den forventede DNS-identitet for fjernslutpunktet var „nav-server„, men det eksterne slutpunkt har DNS-kravet „Navision-service“ er angivet. Hvis dette er et legitimt fjernslutpunkt, kan du løse problemet ved eksplicit at angive DNS-identiteten „Navision Service“ som Identity-egenskaben i EndpointAddress, når du opretter en kanalproxy.

Dette kan findes i web.config (op til Nav 2017) eller NavSettings.JSON i mappen C:\inetpub\wwwroot\Instance-Name, f.eks. C:\inetpub\wwwroot\BC140 eller ClientUserSettings.config ændret til f.eks. C:\Users\AppData\Roaming\Microsoft\Microsoft Dynamics NAV\100:

"//DnsIdentity": "DNS- eller emnenavnet fra servercertifikatet.",
                       "DnsIdentity": "NAV-server",

Skift posten i Dns Identity fra „NAV server“ (i dette eksempel) til „Navision service“: Anbefaling: Opret certifikatet direkte med den matchende DNS-post!

Fejl ved adgang til webstedet  Type: System.UnauthorizedAccessException

Fejl ved adgang til webstedet 
Type: System.UnauthorizedAccessException
Stakspor:
   ved System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   ved System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   ved System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)

Får du denne fejlmeddelelse, og har du egentlig til hensigt at installere en 2. webservice-instans?
Scenarie: Du har allerede en webtjeneste, f.eks. fordi du driver et lavinebeacon (eller: LVS). Derved bruges webservicen til at køre Navision/BC365 på tablets. Hvis du nu ønsker at køre en 2. virksomhed med en egen Navision_service og måske også en egen database, opretter du en 2. webinstans til dette, f.eks. med commandlet'et

New-NAVWebServerInstance newWebService -Server Localhost -ServerInstance NewNavServiceName -Company MyNewCompany

Som resultat finder du en ny mappe i din www-root-mappe:

Fejlfinding for fejlmeddelelsen "Fejl ved adgang til websted Type: System.UnauthorizedAccessException"

Du skal afhængigt af Navision-versionen stadig ændre konfigurationen. I Navision 2018/BC14 skal dette gøres i disse to filer her:

I tidligere Navision-versioner blev dette muligvis gjort i disse filer:

Forskellige webservice-konfigurationsfiler, hvori de forskellige Navision- og BC365-versioner blev konfigureret (port, servicenavn, instansnavn osv.)

Åbn blot disse filer en efter en, indtil du finder posterne for serverinstans og port, f.eks. noget i denne retning:

Konfiguration af en ny webservice til BC365/Navision med angivelse af port og service

eller det her:

Konfiguration af en ny webservice under BC365/Navision med clientServicesCredentialType navUserPassword

Her finder du så også igen indstillingen til „ClientServicesCredentialType“: „NavUserPassword“, som du måske er blevet lokket ind på min side med.
Det ændrer du dog som regel nemmere via konsollen.

Så, det var det... hvis... hvis bare Windows ville samarbejde!

Problemmappen til fejlmeddelelsen

Fejl ved adgang til webstedet  Type: System.UnauthorizedAccessException
Stakspor:
   ved System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   ved System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   ved System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)

er denne her:

C:\inetpub\wwwroot\NewWebService\wwwroot\Resources\Udtrukne ressourcer.

Her vil Navision/BC365-klienten gemme filer, og det må den ikke.
Tip: Hvis du er kommet hertil, har du allerede ledt længe. Gør det nemt for dig selv:
Giv tilladelse til hele mappen NyWebservice for brugeren IIS_IUSRS „Fuld kontrol“. Bemærk! Naturligvis kun til intern brug! Hvis denne webtjeneste kan nås via internettet, er dette et sikkerhedsproblem. Men hvis du konfigurerer sådan et system, bør du hellere ikke søge efter løsninger på internettet til det, men have den faglige viden om, hvad du egentlig har gang i... eller bede nogen om hjælp, der kan finde ud af det.