Konfiguracja ProviderHosted App On-Premises

Przygotowanie środowiska developerskiego pod tworzenie aplikacji w modelu ProviderHosted App pod SharePoint 2013 lub 2016 nie jest tak proste i oczywiste jak by mogło się wydawać.
Poniżej postaram się przedstawić najprostszy sposób, który w żadnym wypadku nie może być użyty na środowisku produkcyjnym ze względu na obniżenie poziomu bezpieczeństwa.

Instrukcja jest przygotowana na podstawie środowiska (ale na innych konfiguracjach różnice są tylko kosmetyczne):
Windows Server 2012 R2
SQL Server 2012 R2
SharePoint 2013
Visual Studio 2017

Wszystkie powyższe zaktualizowane do najnowszych wersji. Komponenty zainstalowane metodą „next, next , next” bez żadnej dodatkowej konfiguracji.

Krok 1 – Certyfikat

Tworzymy certyfikat na potrzeby powiązania aplikacji z witryną SharePoint w trybie Hight Trust.

1. Otwieramy IIS manager
2. Zaznaczamy główny węzeł serwera
3. Otwieramy Server Certificates

Klikamy Create Self-Signed Certificate…

Wpisujemy nazwę certyfikatu np. „HighTrust”

Certificate store zostawiamy na „Personal”

Na liście zobaczymy nasz nowo dodany certyfikat.

Eksport do CER i PFX

Z listy certyfikatów w IIS otwieramy nasz certyfikat dwuklikiem.

Z zakładki Details wybieramy Copy to File…

Przechodzimy przez wizard exportu zostawiając wszystkie wartości domyślne, jako ścieżkę zapisu wybieramy np. folder C:\HighTrust\

Następnie podobną procedurę wykonujemy w celu uzyskania pliku PFX

Tym razem zaznaczamy Yes, export the private key

Na ekranie Export File Format zostawiamy wartości domyślne.

W Security zaznaczamy Password i wprowadzamy hasło które później użyjemy w web.config

 

Krok 2 – Witryna

Tworzymy kolekcję witryn opartą o szablon „Developer Site”

lub uruchamiamy feature SideLoading dla już istniejącej kolekcji witryn.

Enable-SPFeature e374875e-06b6-11e0-b0fa-57f5dfd72085 –url http://srv.dev.local/sites/iscg

Krok 3 – Usługi

Dostosowujemy zmienne i uruchamiamy poniższy skrypt w celu:

  • ustawienia app domain i app prefix
  • uruchomienia usług  SharePoint Administration i SharePoint Timer Service
  • uruchomienia App Management Service Application i Subscription Settings Service Application
  • zdefiniowania App Site Subscription Name
  • utworzenia i skonfigurrowania nowego Trusted Security Token Issuer w trybie TrustBroker
  • „rozluznienia” zabiezpieczeń OAuth do obsługi bez SSL
add-pssnapin microsoft.sharepoint.powershell
$TargetSiteUrl = "http://srv.dev.local/" #adres witryny z włączonym SideLoading
$CertPath = "C:\HighTrust\HighTrust.cer" #podaj poprawną ścieżkę do Twojego pliku CER 
Set-SPAppDomain "apps.local" #dostosuj tą wartość
$account = Get-SPManagedAccount "dev\spfarm" #użyj swojego konta zarządzanego
$issuerId = "447f40c6-99df-4d37-9739-5370102489f7" #możesz zmienić tą wartość na dowolny poprawny guid zapisany lowercase
$sPAppSiteSubscriptionName = "app"  #możesz zmienić tą wartość na dowolną

net start SPAdminV4
net start SPTimerV4
Get-SPServiceInstance | where{$_.GetType().Name -eq "AppManagementServiceInstance" -or $_.GetType().Name -eq "SPSubscriptionSettingsServiceInstance"} | Start-SPServiceInstance
Get-SPServiceInstance | where{$_.GetType().Name -eq "AppManagementServiceInstance" -or $_.GetType().Name -eq "SPSubscriptionSettingsServiceInstance"}
$appPoolSubSvc = New-SPServiceApplicationPool -Name SettingsServiceAppPool -Account $account
$appPoolAppSvc = New-SPServiceApplicationPool -Name AppServiceAppPool -Account $account
$appSubSvc = New-SPSubscriptionSettingsServiceApplication –ApplicationPool $appPoolSubSvc –Name SettingsServiceApp –DatabaseName SettingsServiceDB
$proxySubSvc = New-SPSubscriptionSettingsServiceApplicationProxy –ServiceApplication $appSubSvc
$appAppSvc = New-SPAppManagementServiceApplication -ApplicationPool $appPoolAppSvc -Name AppServiceApp -DatabaseName AppServiceDB
$proxyAppSvc = New-SPAppManagementServiceApplicationProxy -ServiceApplication $appAppSvc
Set-SPAppSiteSubscriptionName -Name $sPAppSiteSubscriptionName -Confirm:$false
$spweb = Get-SPWeb $TargetSiteUrl
$realm = Get-SPAuthenticationRealm -ServiceContext $spweb.Site
$fullAppIdentifier = $issuerId + '@' + $realm
$certificate = Get-PfxCertificate $CertPath
New-SPTrustedSecurityTokenIssuer -Name $issuerId -Certificate $certificate -RegisteredIssuerName $fullAppIdentifier –IsTrustBroker
$serviceConfig = Get-SPSecurityTokenServiceConfig
$serviceConfig.AllowOAuthOverHttp = $true
$serviceConfig.Update()

Krok 4 – Visual Studio

Tworzymy nowy projekt z szablonu SharePoint Add-in

Wpisujemy adres naszej witryny i wybieramy Provider-hosted

Wizard automatyczni powinien rozpoznać wersję SharePoint

Wybieramy nasza ulubiona technologie

Wybieramy Use a certificate

Uzupełniamy ścieżkę do pliku PFX, wpisujemy hasło do pliku PFX oraz podajemy Issuer ID użyty w skrypcie z poprzedniego kroku.

Śmiało wciskamy F5 i cieszymy się działającą aplikacją w modelu ProviderHosted.