OnPrem Exchange ile Teams Takvim Entegrasyonu

Merhaba, bu yazımda can sıkıcı olan, teams’in onprem exchange ile kullanımında takvim kısmının kullanılamıyor olmasını ele alacağım.
Öncelikle ihtiyacımız olan;
Onprem exchange 2016 ve üzeri,
Azure subscriptions;
Global Admin rolüne sahip bir hesap.
İlk olarak yapmamız gereken Azure modüllerini yüklemek. Bu adımların hepsini gereksinimi sağlayan bir exchange server üzerinde gerçekleştiriyoruz.
Sonra ki adımımızda mggraph servisine bağlantı sağlıyoruz. Bu adımda dikkat edilmesi gereken husus bağlanacağınız hesabın global admin rolüne sahip olması gerekmekte.
Global admin yetkili hesabımız ile giriş yapıyoruz.
Akabinde “Install-Module ExchangeOnlineManagement” modülünü yüklüyoruz.
Elimizde bulunması gereken 3 adet script dosyası olacak. Bunları başlıkları ile beraber aşağıya bırakıyorum;
ExportAuthCert.ps1
$thumbprint = (Get-AuthConfig).CurrentCertificateThumbprint
if((Test-Path $env:SYSTEMDRIVE\OAuthConfig) -eq $false)
{
New-Item -Path $env:SYSTEMDRIVE\OAuthConfig -Type Directory
}
Set-Location -Path $env:SYSTEMDRIVE\OAuthConfig
$oAuthCert = (dir Cert:\LocalMachine\My) | Where-Object {$_.Thumbprint -match $thumbprint}
$certType = [System.Security.Cryptography.X509Certificates.X509ContentType]::Cert
$certBytes = $oAuthCert.Export($certType)
$CertFile = “$env:SYSTEMDRIVE\OAuthConfig\OAuthCert.cer”
[System.IO.File]::WriteAllBytes($CertFile, $certBytes)
RegisterEndpoint.ps1
$ServiceName = “00000002-0000-0ff1-ce00-000000000000”;
$x = Get-MgServicePrincipal -Filter “AppId eq ‘$ServiceName'”
$x.ServicePrincipalNames += “https://tolgakaya.tr/”
$x.ServicePrincipalNames += “https://autodiscover.tolgakaya.tr/”
Update-MgServicePrincipal -ServicePrincipalId $x.Id -ServicePrincipalNames $x.ServicePrincipalNames
UploadAuthCert.ps1
Connect-MgGraph -Scopes Application.ReadWrite.All
$CertFile = “$env:SYSTEMDRIVE\OAuthConfig\OAuthCert.cer”
$objFSO = New-Object -ComObject Scripting.FileSystemObject
$CertFile = $objFSO.GetAbsolutePathName($CertFile)
$cer = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($CertFile)
$binCert = $cer.GetRawCertData()
$credValue = [System.Convert]::ToBase64String($binCert)
$ServiceName = “00000002-0000-0ff1-ce00-000000000000”
Write-Host “[+] Trying to query the service principals for service: $ServiceName” -ForegroundColor Cyan
$p = Get-MgServicePrincipal -Filter “AppId eq ‘$ServiceName'”
Write-Host “[+] Trying to query the keyCredentials for service: $ServiceName” -ForegroundColor Cyan
$servicePrincipalKeyInformation = Get-MgServicePrincipal -Filter “AppId eq ‘$ServiceName'” -Select “keyCredentials”
$keyCredentialsLength = $servicePrincipalKeyInformation.KeyCredentials.Length
if ($keyCredentialsLength -gt 0) {
Write-Host “[+] $keyCredentialsLength existing key(s) found – we keep them if they have not expired” -ForegroundColor Cyan
$newCertAlreadyExists = $false
$servicePrincipalObj = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphServicePrincipal
$keyCredentialsArray = @()
foreach ($cred in $servicePrincipalKeyInformation.KeyCredentials) {
$thumbprint = [System.Convert]::ToBase64String($cred.CustomKeyIdentifier)
Write-Host “[+] Processing existing key: $($cred.DisplayName) thumbprint: $thumbprint” -ForegroundColor Cyan
if ($newCertAlreadyExists -ne $true) {
$newCertAlreadyExists = ($cer.Thumbprint).Equals($thumbprint, [System.StringComparison]::OrdinalIgnoreCase)
}
if ($cred.EndDateTime -lt (Get-Date)) {
Write-Host “[+] This key has expired on $($cred.EndDateTime) and will not be retained” -ForegroundColor Yellow
continue
}
$keyCredential = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphKeyCredential
$keyCredential.Type = “AsymmetricX509Cert”
$keyCredential.Usage = “Verify”
$keyCredential.Key = $cred.Key
$keyCredentialsArray += $keyCredential
}
if ($newCertAlreadyExists -eq $false) {
Write-Host “[+] New key: $($cer.Subject) thumbprint: $($cer.Thumbprint) will be added” -ForegroundColor Cyan
$keyCredential = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphKeyCredential
$keyCredential.Type = “AsymmetricX509Cert”
$keyCredential.Usage = “Verify”
$keyCredential.Key = [System.Text.Encoding]::ASCII.GetBytes($credValue)
$keyCredentialsArray += $keyCredential
$servicePrincipalObj.KeyCredentials = $keyCredentialsArray
Update-MgServicePrincipal -ServicePrincipalId $p.Id -BodyParameter $servicePrincipalObj
} else {
Write-Host “[+] New key: $($cer.Subject) thumbprint: $($cer.Thumbprint) already exists and will not be uploaded again” -ForegroundColor Yellow
}
} else {
$params = @{
type = “AsymmetricX509Cert”
usage = “Verify”
key = [System.Text.Encoding]::ASCII.GetBytes($credValue)
}
Write-Host “[+] This is the first key which will be added to this service principal” -ForegroundColor Cyan
Update-MgServicePrincipal -ServicePrincipalId $p.Id -KeyCredentials $params
}
Sonrasında Exchange Management Shell kısmında sırasıyla aşağıda ki komutları çalıştırıyoruz. Komutları kendinize göre revize etmeniz gerekmekte;
Daha önce kaydettiğimiz ps1 dosyasını import ediyoruz.
Aşağıda ki gibi bir sertifika çıkarıyor.
Şimdi tekrar powershell’e geçip aşağıda ki komutu çalıştırıyoruz.
Daha öncesinde edindiğimiz “RegisterEndpoint.ps1” dosyasını kendimize göre düzenliyoruz ve sonrasında powershell üzerinde ps1 dosyasını çalıştırıyoruz.
Daha sonrasında Exchange Management Shell’e geçip şu komutu çalıştırıyoruz ;
New-IntraOrganizationConnector -Name ExchangeHybridOnPremisesToOnline -DiscoveryEndpoint https://outlook.office365.com/autodiscover/autodiscover.svc -TargetAddressDomains “tolgakayatr.mail.onmicrosoft.com”
Akabinde Powershell’e tekrar geçip şu komutu çalıştırıyoruz ;
New-IntraOrganizationConnector -Name ExchangeHybridOnlineToOnPremises -DiscoveryEndpoint “https://mail.trt.net.tr/autodiscover/autodiscover.svc” -TargetAddressDomains “tolgakaya.tr”
Operasyon bu kadar arkadaşlar. Bu işlemleri yaptıktan sonra onprem exchange kullanırken teams uygulamasında takvim bölümünü aktif olarak kullanabileceksiniz.
3 Yorum