SharePoint Add-In Modell einrichten / App Store

Microsoft hat mit SharePoint 2013 das neue App Modell bzw., Add-In Modell eingeführt (Mit SharePoint 2013 heißt es App Modell, ab 2016 ist alles ein Add-In). Es ist ja kein Geheimnis, dass es in SharePoint immer Anpassungen gibt. Es gibt viele Anbieter auf dem Markt, die ihre Lösungen dafür anbieten. Das App Modell bietet eine neue API für Softwareentwickler. Aber was für eine API gab es davor?

  • Full Trust Solutions aka .wsp Dateien
  • Sandboxed Solution (abgekündigt)

Warum die neue API und was bietet Sie für Vorteile? Was ändert sich für Softwareentwickler, was für Administratoren und welche Schritte sind notwendig, um die Voraussetzungen zu erfüllen? Diese Fragen werde ich in diesem Artikel beantworten.

Architektur

Es gibt zwei unterschiedliche Add-In Modelle:

  • Provider Hosted App: Apps werden durch einen Provider zur Verfügung gestellt, z.B. ich füge eine App direkt aus dem SharePoint Store hinzu

clip_image001

  • SharePoint Hosted App: Die App wird selbst auf einem eigenen Server gehostet, z.B. im einfachsten Fall reicht es die App im Unternehmens App Store hinzuzufügen. Es kann auch nötig sein, weitere Komponenten wie IIS einzurichten – abhängig von der App.

clip_image002

Im Vergleich aus Entwickler-Sicht

Das folgende Bild App Patterns zeigt was ist wo unterstützt wird. Weitere Details gibt es auch auf MSDN https://msdn.microsoft.com/en-us/library/office/fp179930.aspx#sectionSection2 : clip_image003 Die größte Änderung der API ist, dass die Applikationen nicht mehr im Kontext von SharePoint laufen, das soll Stabilität und Migrationen erleichtern. Außerdem ist die API Cloud kompatibel.

Prozess im Hintergrund

clip_image004

  1. App mit Lizenzprüfung entwickeln
  2. App über Seller Dashboard in den Marketplace einstellen
  3. App zum Kauf im SharePoint Store verfügbar
  1. Benutzer / Manager kauft App im SharePoint Store
    Bei on-premises Umgebungen, wird die Lizenzinformation in die lokale App Dienstanwendung kopiert
  2. Apps können den SharePoint Store umgehen, z.B. für selbst gehostete Entwicklungen
  3. Benutzer / Manager weist Benutzer zu (wird für Benutzerabhängige Lizenzen benötigt) und verwendet die Apps die entweder Provider Hosted oder SharePoint hosted sind
  4. Benutzer startet App
    App prüft Lizenz unter Verwendung der App Dienstanwendung
    App wendet Lizenz an

clip_image005

  1. Benutzer fordert App an
  2. Anforderung wir an Dienstanwendung weitergeleitet
  3. Lizenz und Berechtigungen werden in aus der Datenbank geholt
  4. App Freigabe im Unternehmens-App-Store

Bei vielen Apps kann man das auch sehen. Beim Klick auf eine App wird man entsprechend weitergeleitet. Als Beispiel können wir uns hier die Cloud ansehen, achten Sie dabei genau auf die URL: image Damit wird deutlich, dass die App tatsächlich nicht im SharePoint läuft, sondern außerhalb und ich lediglich weitergeleitet werde. On-Premises ist die Funktionsweise die Gleiche, jedoch müssen wir die Infrastruktur erst noch vorbereiten, das zeige ich in den nächsten Schritten.

App Domain

Beim Klick auf eine App werden wir ja entsprechend weitergeleitet. Damit dies funktioniert, benötigen wir eine eigene Domain, in der die Apps laufen. Der Prefix wird dabei dynamisch generiert, d.h. wir werden hier auch mit einer Wildcard arbeiten. Microsoft empfiehlt dringend eine separate Domain zu verwenden, um das Risiko von Cross-Site-Scripting Angriffe zu minimieren. Beispiel:

  • Ihre interne Domain (typischerweise Active Directory) heißt contoso.com (Netbios Name spielt keine Rolle, es geht rein um den DNS Namen).
  • Der SharePoint on-premises ist unter dem DNS Namen SP-WFE01.contoso.com zu erreichen.
  • Erstellen Sie eine eigene Domain wie contosoApps.com (idealerweise offiziell registriert)
  • Eine App wird später dynamisch eine URL im Format generieren https://Apps-12345678ABCDEF.ContosoApps.com/

Konfiguration

Einrichtung DNS

Auf dem DNS Server muss die neue Domain als eigene Zone eingerichtet werden, z.B. Name der Zone = Name der Domain “contosoapps.com” In dieser Zone erstellen wir einen CNAME Record “*” mit dem Ziel des SharePoint Servers, hier SP-WFE01.contoso.com (Achtung in Verbindung mit Kerberos, der mag CNAME nicht).
clip_image007

Wildcard Zertifikat

Damit wir später auch eine verschlüsselte Verbindung zwischen der App und SharePoint aufbauen können, benötigen wir für die Apps ein Wildcard SSL-Zertifikat. Ein Wildcard SSL-Zertifikat kann man ausstellen, indem man als CN (Common Name) *.contosoapp.com angibt, der * wird als Wildcard verwendet. Idealerweise ist der Zugriff zu SharePoint auch per SSL gesichert, damit vermeidet man auch SSL Bridging Warnungen vom Browser.

Service Instanz starten

In SharePoint 2013 muss man das noch manuell starten, 2016 erledigt das automatisch. In der Central Admin – “Manage Services on Server” oder per PowerShell müssen die folgenden Instanzen gestartet werden:

  • App Management Service
  • SP Subscription Settings Service
001
Get-SPServiceInstance | where{$_.GetType().Name -eq “AppManagementServiceInstance” -or $_.GetType().Name -eq “SPSubscriptionSettingsServiceInstance”} | Start-SPServiceInstance

Anschließend sollte der Status auf “Started” stehen: clip_image008

Service Application erstellen

Als nächstes erstellen wir die Dienstanwendungen, damit diese in der Farm angeboten werden können, auch das geht per Central Admin – “Manage Service Applications” oder per Powershell:

App Management Service

001
002
003
004
$account = Get-SPManagedAccount FarmAccount 
$appPoolAppSvc = New-SPServiceApplicationPool -Name AppServiceAppPool -Account $account 
$appAppSvc = New-SPAppManagementServiceApplication -ApplicationPool $appPoolAppSvc -Name AppServiceApp -DatabaseName P_SP_AppMngmt 
$proxyAppSvc = New-SPAppManagementServiceApplicationProxy -ServiceApplication $appAppSvc

SP Subscription Settings Service

001
002
003
$AppPool = New-SPServiceApplicationPool -Name SettingsServiceAppPool -Account $account 
$App = New-SPSubscriptionSettingsServiceApplication -ApplicationPool $appPool -Name SettingsServiceApp -DatabaseName SettingsServiceDB 
$proxy = New-SPSubscriptionSettingsServiceApplicationProxy -ServiceApplication $App

clip_image009
Ein vorbereitetes PowerShell Skript finden Sie hier. Es startet die Service Instanzen, legt die Service Applications an und konfiguriert die App Domain. Einfach in Zeile #23 den Namen des Service Accounts anpassen (Den muss es bereits vorher geben). http://download.hobmaier.net/Downloads/Install-AppMngmt.ps1 Bzw. hier:

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
<#
=====================================
This PowerShell Script help you setting up App Management Service in SharePoint.
It will start the service instances and create Serivce Applications.

Version 1.1
25.01.2016
Dennis Hobmaier
——————–
History
1.1, 25.01.2016
More variables to change service accounts and database names
Comments added

1.0, 28.11.2015
Intial Version
=====================================
#>

# Please adjust the account which exist in your environment.
# If you prefer to run into a separate account use the next line New-SPManagedAccount
# New-SPManagedAccount -Credential (Get-Credential)
$SPServiceAccount= ‘CONTOSOsp_apps’  #INPUT required
$SPAppMngmtDBName = ‘T_SP_AppMngmt’
$SPSubscriptionDBName = ‘T_SP_SettingsService’
$SPAppDomain = ‘contosoapps.com’
$SPAppPrefix = ‘app’

#Needs to run on SharePoint Server
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

#Start the service instance on the current server (min 1 per farm)
Get-SPServiceInstance | where{$_.GetType().Name -eq “AppManagementServiceInstance” -or $_.GetType().Name -eq “SPSubscriptionSettingsServiceInstance”} | Start-SPServiceInstance

#You may check all available accounts running Get-SPManagedAccount
$account = Get-SPManagedAccount $SPServiceAccount -ErrorAction Stop

$appPoolAppSvc = New-SPServiceApplicationPool -Name AppServiceAppPool -Account $account
$appAppSvc = New-SPAppManagementServiceApplication -ApplicationPool $appPoolAppSvc -Name AppServiceApp -DatabaseName $SPAppMngmtDBName
$proxyAppSvc = New-SPAppManagementServiceApplicationProxy -ServiceApplication  $appAppSvc

$AppPool = New-SPServiceApplicationPool -Name SettingsServiceAppPool -Account $account
$App = New-SPSubscriptionSettingsServiceApplication -ApplicationPool $appPool -Name SettingsServiceApp -DatabaseName $SPSubscriptionDBName
$proxy = New-SPSubscriptionSettingsServiceApplicationProxy -ServiceApplication $App

# Configure App Settings
Set-SPAppDomain $SPAppDomain
Set-SPAppSiteSubscriptionName -Name $SPAppPrefix -Confirm:$false

App Settings

Anschließend öffnen wir die SharePoint Central Admin clip_image010

App Domain aus Schritt 1 konfigurieren

Falls nicht schon per Skript oben ausgeführt:

001
002
Set-SPAppDomain “contosoapp.com” 
Set-SPAppSiteSubscriptionName -Name “app” -Confirm:$false

App Catalog erstellen (pro Web Application)

  • Manage App Catalog
  • Webanwendung auswählen – OK

clip_image011

  • Es handelt sich um eine normale Websitesammlung, die eine bestimmte Vorlage verwendet. Achten Sie darauf, dass später nur App-Store Administratoren Zugriff darauf benötigen.

App hochladen (je nach App)

Grundsätzlich befolgen Sie der Anleitung des Herstellers. Wenn Sie dazu aufgefordert werden, deine .app Datei hochzuladen, öffnen Sie den zuvor erstellten App Store – “Apps for SharePoint” und laden dort diese Datei hoch.
clip_image012

App installieren (je nach App)

Anschließend steht Ihren Benutzern die App zur Verfügung. Als Administrator fügen Sie die App der Ziel Websitesammlung hinzu. Übrigens sollen Sie mindestens Service Pack 1 für SharePoint 2013 verwenden. In dem App Model hat sich zwischen RTM und SP1 einiges getan.

Referenz