When using MailStore to archive Microsoft Office365 and using basic authentication one important step is to create a Service Principle account using the Microsoft Azure PowerShell interface.
By default, this Service Principle account id is only valid for 365 days from the point of creation.
Once it expires any further MailStore Directory Service user synchronisations will fail with an error relating to expired API tokens like this:.
“MailStore Server was unable to retrieve a list of users from Directory Services. Requesting Microsoft Graph API token failed: AADSTS7000215: Invalid client secret is provided.”
To resolve this, the existing Service Principle (typically named MailStoreSP) will need to be removed and a new one created.
Steps:
- Open a PowerShell Session.
- Connect to the Office 365 Azure AD tenant using the command:
Connect-MsolService -AzureEnvironment AzureCloud
A login dialog opens. Enter admin credentials of your Microsoft Office365 plan. - To get a list of all service principals that are created as the name MailStoreSP use the command:
Get-MsolServicePrincipal -SearchString MailStoreSP
Note you may have given this account a different name if you did not follow the existing setup guide, check MailStore Directory Services configuration for the exact account name
This should return every Service Principle created with that name like this example:
ExtensionData : System.Runtime.Serialization.ExtensionDataObject
AccountEnabled : True
Addresses : {}
AppPrincipalId : 72c95713-a7e2-4170-9f91-ad9fe457ac1a
DisplayName : MailStoreSP
ObjectId : 39857919-9c7e-4e7e-9870-7ed650036d4b
ServicePrincipalNames : {72c95713-a7e2-4170-9f91-ad9fe457ac1a, MailStoreSP}
TrustedForDelegation : False - It is the ObjectId value that we need to remove the existing account and this is done by running the following command:
Remove-MsolServicePrincipal -ObjectId 39857919-9c7e-4e7e-9870-7ed650036d4b
Replace with the correct ObjectId for your account - Finally to create a new account with a 10 year expiry use these two commands:
$principal = New-MsolServicePrincipal -DisplayName ‘MailStoreSP’ -ServicePrincipalNames @(“MailStoreSP”) -Type Password -Value ‘use_a_password_of_your_choice_here’ -StartDate (Get-Date) -EndDate (Get-Date).AddYears(10)
Replace use_a_password_of_your_choice_here with the correct password
Add-MsolRoleMember -RoleName “Directory Readers” -RoleMemberType ServicePrincipal -RoleMemberObjectId $principal.ObjectId