Als je webservices met OAUTH2 wilt gebruiken (bijvoorbeeld omdat Microsoft de andere opties niet meer aanraadt) kun je het volgende doen:

In Azure AD maak je een nieuwe appregistratie aan.  Dat kun je door zoals beschreven in https://www.poelgeest.org/joomla/index.php/tips-a-trucs/127-bc20-gebruik-azure-ad-openid-om-te-authenticeren.html

Daarna ga je naar je app registration:

  • Klik op authentication
  • Klik op Add a platform
  • zet bij Mobile and desktop applications het vinkje bij https://login.microsoftonline.com/common/oauth2/nativeclient aan
  • Klik op save
  • Ga naar Certificates & Secrets en klik op + New Client Secret
  • Kopieer de Value die je krijgt: deze krijg je hierna niet meer te zien
  • Ga naar API permission
  • Klik op +Add a Permission, en voeg de volgende API/Permission Names toe:
    • Dynamics 365 Business Central
      • Admincenter.ReadWrite.All (Application)
      • API.ReadWrite.All (Application)
      • App_access (Application)
      • Automation.ReadWrite.All (Application)
      • Financials.ReadWrite.All (Delegated)
      • User_impersonation (Delegated)
    • Microsoft Graph
      • User.Read (Delegated)
    • Klik op Grant admin consent for <tenant>

 

Op de server moet ook een instelling worden gewijzigd. Bij Valid Audiences moet naast de bestaande audience (wat als het goed is je applicationID is) ook de audience https://api.businesscentral.dynamics.com worden toegevoegd

  • Set-navserverconfiguration -serverinstance <serverinstance> -keyname “ValidAudiences” -keyValue “<huidige waarde>;https://api.businesscentral.dynamics.com”

Daarna kun je als gebruiker al OAUTH2 gebruiken om aan te melden op de API/Webservices.

Wil je Service2Service gebruiken, dan moet je nog het volgende doen:

  • Log in in Business Central
  • Ga naar Azure Active Directory Applications
  • Klik op + New
  • Voer als Client ID je Application ID in
  • Geef als description een duidelijke beschrijving in.
  • Geef de juiste rollen die nodig zijn (D365 ADMINISTRATOR en D365 BUS FULL ACCESS)
  • Klik op Grant Consent. Je moet nu inloggen in Azure en toestemming geven
  • Zet de State op Enabled

Er wordt dan een gebruiker aangemaakt met dezelfde naam als de beschrijving.

Nu kun je ook via S2S verbinding maken. Het tokenrequest moet de volgende keys bevatten:

Key grant_type, value client_credentials
Key client_secret, value <de Value die je hebt gemaakt bij Certificates & Secrets
Key client_id, value application ID
Key scope, value https://api.businesscentral.dynamics.com/.default

Je post dit naar https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/token, waarmee je een token ontvangt. Dit token kun je dan weer gebruiken om een get-request te doen op de OdataURL van de Business Central omgeving.

 

Voorbeeld Powershell maken S2S verbinding (duidelijk geleend van https://www.kauffmann.nl/2021/07/13/service-to-service-authentication-in-business-central-18-3-how-to-test-rest-client-powershell/)

#########################
# PowerShell example
#########################
$clientid     = "af34389a-6ce1-4e9c-8bbc-2ec8ccaf9439"
$clientsecret = "iMM8Q~FyG*************************b"
$scope        = "https://api.businesscentral.dynamics.com/.default"
$tenant       = "cad05b8d-b9c1-4c1c-9d58-302cc6e577d7"
#$environment  = "sandbox"
$baseurl      = "https://240midtier.logicvision.net:7148/VO_1CF_VollenhovenOlie_240"
# Get access token
$body = @{grant_type="client_credentials";scope=$scope;client_id=$ClientID;client_secret=$ClientSecret}
$oauth = Invoke-RestMethod -Method Post -Uri $("https://login.microsoftonline.com/$tenant/oauth2/v2.0/token") -Body $body

write-host "oauth:"
write-host $oauth.access_token

$Answer=Invoke-RestMethod -Method get -uri $("$baseurl/odatav4") -headers @{Authorization='Bearer ' + $oauth.access_token}
write-host $Dit e-mailadres wordt beveiligd tegen spambots. JavaScript dient ingeschakeld te zijn om het te bekijken.'