Permalink

off

Migration von ‚Forms Services‘ zu einer ‚claims based WebApp‘ in SharePoint 2013

InfoPath2013

Nach der Migration unserer Intranet Plattform auf SharePoint 2013 und der Umstellung auf claims based Authentifizierung hatten wir Probleme mit den Forms Services. Formulare, die Webservices abfragen (Speziell Userprofile.asmx), funktionierten nicht mehr.

Hier also die erfolgreiche Konfiguration Forms Services Web Service

Forms_Services_Web_Service_Konfiguration_1

Von Stefan Gohr: Weil bei SharePoint 2013 die Authentifizierung auf „Claims Based“ umgestellt wurde, funktioniert die Authentifizierung der Forms Services bei der Anmeldung an Webservices nicht mehr im Default. Das Problem wird gelöst, indem im Secure Store von SharePoint 2013 Credentials hinterlegt werden, mit denen sich die Forms Services an den Webservices anmelden sollen. Dazu wird im Secure Store eine neue Target Application für die Formulare angelegt. Diese speichert die Zugangsdaten des Service Accounts, der für die Anmeldung an den Webservices benutzt werden soll.

Forms_Services_Web_Service_Konfiguration_2

In der Secure Store Application wird hinterlegt, welche Benutzergruppe diese administrieren und welche Benutzergruppe diese verwenden darf. Da im unserem Intranet grundsätzlich alle Benutzer Formulare ausfüllen dürfen, wird die AD Gruppe „Domain Users“ für Members verwendet.

Forms_Services_Web_Service_Konfiguration_3

Nachdem die Target Application für die Forms Services erstellt wurde, können die Accountdaten eingetragen werden.

Forms_Services_Web_Service_Konfiguration_4

In diesem Fall wurde der Application Pool Account verwendet.

Forms_Services_Web_Service_Konfiguration_5

Die Target Application besteht nun unter dem Namen „FormsServicesWebserviceAccess“. Dieser Name kann nun als ID in den UDCX Dateien verwendet werden. Der Forms Server weiss dann, dass er die Accountdaten aus dem Secure Store zur Anmeldung für die Datenverbindung, die durch das UDCX File definiert wird, verwenden soll.

<?xml version=“1.0″ encoding=“UTF-8″?>
<?MicrosoftWindowsSharePointServices ContentTypeID=“0x010100B4CBD48E029A4ad8B62CB0E41868F2B0″?>
<udc:DataSource MajorVersion=“2″ MinorVersion=“0″ xmlns:udc=“http://schemas.microsoft.com/office/infopath/2006/udc“>
<udc:Name>GetUserProfileByName</udc:Name>
<udc:Description>Format: UDC V2; Connection Type: WebService; Purpose: ReadOnly; Generated by Microsoft InfoPath 2010 on 2012-09-28 at 14:08:03 by CORPROOT\tzhgost1.</udc:Description>
<udc:Type MajorVersion=“2″ MinorVersion=“0″ Type=“WebService“>
<udc:SubType MajorVersion=“0″ MinorVersion=“0″ Type=““/>
</udc:Type>
<udc:ConnectionInfo Purpose=“ReadOnly“ AltDataSource=““>
<udc:WsdlUrl>http://intranet-domain.com/de/formulare/_vti_bin/userprofileservice.asmx?WSDL</udc:WsdlUrl>
<udc:SelectCommand>
<udc:ListId/>
<udc:WebUrl/>
<udc:ConnectionString/>
<udc:ServiceUrl UseFormsServiceProxy=“false“>http://intranet-domain.com/de/formulare/_vti_bin/userprofileservice.asmx</udc:ServiceUrl>
<udc:SoapAction>http://microsoft.com/webservices/SharePointPortalServer/UserProfileService/GetUserProfileByName</udc:SoapAction>
<udc:Query/>
</udc:SelectCommand>
<udc:UpdateCommand>
<udc:ServiceUrl UseFormsServiceProxy=“false“/>
<udc:SoapAction/>
<udc:Submit/>
<udc:FileName>Specify a filename or formula</udc:FileName>
<udc:FolderName AllowOverwrite=““/>
</udc:UpdateCommand>
<udc:Authentication><udc:SSO AppId=’FormsServicesWebserviceAccess‘ CredentialType=’NTLM‘ /></udc:Authentication>
</udc:ConnectionInfo>
</udc:DataSource>

Forms_Services_Web_Service_Konfiguration_6

In vielen Formularen wird der Webservice Userprofileservice.asmx verwendet, um Informationen über den aktuell angemeldeten Benutzer abzurufen. Bei der Classic Authentication kann man diesen einfach ohne Parameter aufrufen, um Informationen über den aktuellen Benutzer zu erhalten. Da wir nun einen Serviceaccount zur Anmeldung verwenden, funktioniert das so nicht mehr. Es würden immer die Profildaten des Serviceaccounts zurückgeliefert werden. Die Formulare müssen angepasst werden, so dass bei Aufruf des Userprofileservice.asmx der aktuelle Formularbenutzer als Parameter an den Webservice übergeben werden kann. Dazu wird im Formular die UserName() Funktion beim Starten des Formulars verwendet. Über „teilzeichenfolge-nach“ wird alles links vom Pipe Zeichen (der Claims spezifische ID Teil) aus dem Benutzername wieder herausgefiltert. Der Rest des Accountname kann anschliessend als Domainaccount für den Aufruf des Userprofile.asmx verwendet werden.

Forms_Services_Web_Service_Konfiguration_7

AccountName steht als Übergabeparameter für die GetUserProfilebyName Webmethode zur Verfügung. Entsprechend des Screenshots müssen alle Formulare angepasst werden.

Forms_Services_Web_Service_Konfiguration_8

Die Zuweisung an den AccountName der Datenverbindung muss erfolgen, bevor die Webservicemethode aus dem Userprofileservice.asmx aufgerufen wird.

Forms_Services_Web_Service_Konfiguration_9

Nach den Anpassungen am Startverhalten muss das Formular neu gespeichert und veröffentlicht werden.

Forms_Services_Web_Service_Konfiguration_10

Voila! Die Forms Services reden auch wieder unter SharePoint 2013 bei aktivierter Claims Based Authentifizierung mit dem Userprofileservice.asmx.

Dieser Artikel wie auch die Konfiguration wurde von meinem Kollegen Stefan Gohr verfasst! Allen Dank für diesen Lösungsweg geht an ihn!

Autor: Christoph Müller

Christoph Müller ist Consultant, Blogger und Podcaster rund ums Thema SharePoint, Digital Transformation, Cloud, Mobile und Netzpolitik.

Kommentare sind geschlossen.