Wie erhalte ich einen Digest-Wert für die Anforderung von einer von einem Anbieter gehosteten App?

Ich entwickle eine von SharePoint 2013 Provider gehostete App mit Javascript REST Api. Um Vorgänge zum Erstellen (POST) oder Aktualisieren (MERGE) von Sharepoint-Elementen auszuführen, muss der Header 'X-RequestDigest' mit der Anforderung festgelegt werden.

In von SharePoint gehosteten Apps konnte ich das verwendenhttp://contoso.sharepoint.com/SharePointHostedApp/_api/contextinfo Dienst zum Abrufen des Anforderungs-Digest-Werts; Ich habe jedoch Probleme, diesen Wert in einer von einem Anbieter gehosteten App zu ermitteln.

Der erste Unterschied der von Anbietern gehosteten App besteht darin, dass wir jetzt eine domänenübergreifende Anforderung stellen müssen, da wir nicht auf einer Sharepoint-Site, sondern auf einer anderen Domain ausgeführt werden, die auf einem anderen Server gehostet wird. Um es klar zu sagen: statt

$.ajax({
    url: appWebUrl + '/_api/contextinfo',
    method: "POST",
    headers: { "Accept": "application/json; odata=verbose" }
})

Ich ging davon aus, dass wir das verwenden müssenSP.RequestExecutor eine domänenübergreifende Anfrage ausführen. Wenn ich die Anfrage erstelle, sieht es wie folgt aus (ich habe die tatsächlichen URLs in eine gefälschte geändert, aber im Grunde sagen wir dem Proxy, dass er das Ziel hat und das Ziel erhält/_api/contextinfo Endpunkt):

https://contoso-6f921c6addc19f.sharepoint.com/ProviderHostedApp/_api/SP.AppContextSite(@target)/contextinfo?@target=%27https://contoso.sharepoint.com%27

Ich erhalte jedoch diesen Fehler:Cannot find resource for the request contextinfo. Dies bedeutet, dass der Endpunkt nicht vorhanden ist.

Ich habe darauf geachtet, die POST-Methode mit der richtigen zu verwendenapplication/json;odata=verbose Überschriften mit einem leeren Körper.

Wie erhalte ich den Anforderungs-Digest-Wert von der/_api/contextinfo Service für den Provider gehostete App?

Basierend auf dem, was ich recherchiert habe:

Wir können nicht verwenden$('#__REQUESTDIGEST').val(); da dies für eine von einem Provider gehostete App nicht verfügbar ist.Wir müssen einige domänenübergreifende Anfragen verwenden, da ich außerhalb von Sharepoint arbeite.Ich habe versucht, das Ziel der domänenübergreifenden Anforderung auf hostWebUrl und appWebUrl festzulegen, und beide geben den gleichen Fehler aus.

Es muss eine Möglichkeit geben, diesen Wert zu ermitteln, da wir uns sonst nur auf Leseoperationen bei Verwendung von JavaScript beschränken würden.Hat jemand dieses Problem mit Javascript gelöst?

Technisch könnte ich versuchen, die benötigten Dienste mithilfe des CSOM auf dem Server zu implementieren und sie mithilfe von WebAPI oder WCF verfügbar zu machen, aber es erscheint unvernünftig, dies implementieren zu müssen.

AKTUALISIEREN:

Ich habe versucht, einen WebAPI-Controller hinzuzufügen, der einen Dienst bereitstellt, der den Digest-Wert der Anforderung abruft. Dadurch wird tatsächlich ein Anforderungs-Digest-Wert abgerufen. Wenn ich jedoch versuche, dies in der Kopfzeile zukünftiger Aufrufe zu verwenden, erhalte ich die Fehlermeldung:"The security validation for this page is invalid and might be corrupted. Please use your web browser's Back button to try your operation again." Ich vermute, dass der Anforderungs-Digest-Wert einige Referenz-Header-Informationen enthält, die darauf hinweisen, dass er vom Server angefordert wurde. Die zukünftigen Anforderungen stammen jedoch aus dem Browser, und diese Nichtübereinstimmung ist möglicherweise ein akzeptabler Grund dafür, dass sie ungültig ist.

Einige weitere Hinweise zum Versuch, den webAPI-Controller hinzuzufügen. Ich habe meinen Code anhand dieses Beispiels erstellt:http://code.msdn.microsoft.com/SharePoint-2013-Perform-335d925b aber konvertierte es, um den neueren HttpClient zu verwenden. Ich habe die Page Load-Methode überladen, den contextTokenString in einer Variablen gespeichert, auf die der WebAPI-Controller zugreifen konnte, und sie dann beim Anfordern der contextinfo analysiert / verwendet.

Weiß jemand, ob dies eine korrekte Diagnose dieses Fehlers ist? Enthält der Anforderungs-Digest-Wert eine Kodierung, die verhindert, dass er abgerufen werden kann, wie ich es vorgeschlagen habe?

Ich habe auch eine verwandte Frage in den MSDN-Foren geöffnet, da ich unbedingt eine Antwort finden möchte:http://social.msdn.microsoft.com/Forums/sharepoint/en-US/f601fddd-3747-4152-b2d1-4e89f0a771c4/question-about-limitation-of-providerhosted-apps-is-it-possible-to- make-rest-calls-with-javascript? forum = sharepointdevelopmentprevious

Ich finde es sehr schwer zu glauben, dass dies eine Einschränkung der von Anbietern gehosteten Anwendungen sein könnte, aber angesichts aller Tests, die ich durchgeführt habe, bezweifle ich die Lebensfähigkeit von von Anbietern gehosteten Anwendungen, wenn Sie in Javascript schreiben möchten.

Bitte um Hilfe!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage