SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




CurrentUser mit Claims-based Authentication in WebService aus InfoPath

Geprüfte Antwort Dieser Beitrag hat 1 Antworten

Ohne Rang
9 Beiträge
MicAmend erstellt 28 Sept. 2011 11:13
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Zusammen,

zunächst eine kurze Zusammenfassung meines Problems, bevor ihr den ganzen Rest lesen müßt.

Ich schicke über ein InfoPath Formular Daten an WebService. In diesem WebService möchte ich ermitteln, welcher user die Daten geschickt hat.

Was da genau geht und was nicht geht it unten beschrieben. Vieleicht weiß ja jemand Rat.

Danke schon mal!

Ciao Michael

 

Problembeschreibung:

Eine SharePoint 2010 Application läuft unter Claims Based Authentication auf Windows Server 2008 R2.

Die Application stellt einen WebService bereit.

 

Die Verbindung zu diesem WebService wird jeweils (Consolen-Programm und InfoPath CodeBehind) wie folgt aufgebaut:

BasicHttpBinding binding = new BasicHttpBinding();

binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;

binding.Security.Transport.ClientCredentialType = credentialType;

EndpointAddress endpoint = new EndpointAddress("http://servername/sites/sitecollectionname/_vti_bin/RezDbWebService.svc");

RezDbWebServiceClient proxy = new RezDbWebServiceClient(binding, endpoint);

proxy.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

proxy.ClientCredentials.Windows.ClientCredential = new NetworkCredential();

 

Wird der WebService aus einer Testanwendung (Consolen-Programm) angesprochen ist alles OK, d.h. wir können den User, welcher die Anwendung ausführt im Code des WebService ermitteln:

 

Dies geschieht mit dem Befehl

System.Threading.Thread.CurrentPrincipal.Identity.Name

oder auch

ServiceSecurityContext.Current.PrimaryIdentity

{0#.x|firma\kennung}

    [Microsoft.IdentityModel.Claims.ClaimsIdentity]: {0#.w|firma\kennung}

    AuthenticationType: "Federation"

    IsAuthenticated: true

    Name: "0#.x|firma\kennung"

beides funktioniert.

 

Wird der Webservice aus dem Codebehind unser InfoPath-Formulare angesprochen, wird uns bei der Ermittlung des Users immer der iusr zurückgegeben.

Dieser ist in  "Anonymous Authentication Credentials" als "Specific user:" gesetzt.

Beispiel:

ServiceSecurityContext.Current.PrimaryIdentity

{0#.x|nt authority\iusr}

    [Microsoft.IdentityModel.Claims.ClaimsIdentity]: {0#.x|nt authority\iusr}

    AuthenticationType: "Federation"

    IsAuthenticated: true

    Name: "0#.x|nt authority\\iusr"

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 28 Sept. 2011 12:43
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das nennt sich "Double Hop Problem" (s. Google) und liegt daran, daß der Benutzer vom Browser an den Server übertragen werden muß und von dort dann weiter an den nächsten Server mit dem Webservice (auch wenn das bei Euch tatsächlich derselbe ist).

Viele Grüße
Andi
af @ evocom de
Blog