Freigeben über


Autorisieren der Benutzer von vom Anbieter gehosteter Add-Ins zur Laufzeit mithilfe von OAuth

Stellen Sie autorisierten Zugriff auf SharePoint-Ressourcen unter Verwendung von vom Anbieter gehosteten Add-Ins zur Laufzeit mithilfe von OAuth bereit.

Gilt für: SharePoint 2013 | SharePoint-Add-Ins | SharePoint Online

Ihre Benutzer können auf SharePoint-Add-Ins zugreifen, indem sie eine SharePoint-Website öffnen, Websiteinhalte und dann das Add-In auswählen. SharePoint leitet Benutzer an das Remoteweb weiter, in dem Ihre vom Anbieter gehosteten Add-Ins ausgeführt werden. Da Benutzer von SharePoint aus auf das Add-In zugreifen, werden Benutzer von SharePoint autorisiert, bevor sie auf das Add-In zugreifen können.

Wenn Benutzer die URL Ihrer vom Anbieter gehosteten Add-Ins direkt aufrufen, muss das Add-In sie zur Laufzeit mithilfe von OAuth autorisieren. In diesem Szenario muss das vom Anbieter gehostete Add-In die Autorisierung verarbeiten, da der Benutzer zunächst nicht von SharePoint autorisiert wurde. Im Core.DynamicPermissions-Beispiel wird gezeigt, wie Sie mithilfe von OAuth dynamisch Berechtigungen von einer Website anfordern. Verwenden Sie diese Lösung für Folgendes:

  • Autorisieren von Benutzern, die direkt zu Ihren vom Anbieter gehosteten Add-Ins navigieren, anstatt von SharePoint aus auf das Add-In zuzugreifen. Vielleicht möchten Sie nicht, dass Ihre Benutzer die SharePoint-Benutzeroberfläche verwenden. Vielleicht verwenden Ihre Benutzer ein vom Anbieter gehostetes Add-In, das relevante Daten anzeigt, die von SharePoint abgerufen werden.

  • Erstellen Sie ein vom Anbieter gehostetes Add-In, das Benutzer mit OAuth authentifizieren kann und das über den Office Store verkauft werden kann.

Bevor Sie beginnen

Laden Sie zunächst das Beispiel-Add-In Core.DynamicPermissions aus dem Projekt Office 365 Developer patterns and practices (Entwicklermuster und -methoden) auf GitHub herunter.

Bevor Sie das Codebeispiel ausführen:

  • Stellen Sie sicher, dass Sie über die Berechtigungen "Verwalten" für die Website verfügen. Weitere Informationen finden Sie unter Grundlegendes zu Berechtigungsstufen.

  • Registrieren Sie das Add-In auf einer SharePoint-Website mithilfe von AppRegNew.aspx:

    1. Navigieren Sie auf Ihrer SharePoint-Website zu „appregnew.aspx“. Wenn Sie das Add-In beispielsweise auf der Website „contoso.sharepoint.com“ verwenden möchten, navigieren Sie zu http://contoso.sharepoint.com/_layouts/15/appregnew.aspx.

    2. Wählen Sie Generieren aus, um eine neue Client-ID zu generieren.

    3. Wählen Sie Generieren aus, um einen neuen geheimen Clientschlüssel zu generieren.

    4. Geben Sie unter Titel einen Titel für Ihr Add-In ein.

    5. Geben Sie unter Add-In-Domäne die URL Ihres vom Anbieter gehosteten Add-Ins ein. Geben Sie beispielsweise „localhost“ ein.

    6. Geben Sie unter Umleitungs-URI die URL Ihres vom Anbieter gehosteten Add-Ins ein. SharePoint leitet das Add-In zu dieser URL um, nachdem Genehmigung und Zustimmung erteilt wurden. Geben Sie z. B. https://localhost:44363/Home/Callback. Sie können den Domänennamen und die Portnummer aus der SSL-URL-Eigenschaft des Projekts Core.DynamicPermissionsWeb in Visual Studio abrufen.

    7. Wählen Sie Erstellen.

  • Kopieren Sie die Client-ID und den geheimen Clientschlüssel in das appSettings-Element in Core.DynamicPermissionsWeb\web.config.

Verwenden des Core.DynamicPermissions-Add-Ins

Wenn Sie das Codebeispiel ausführen:

  1. Geben Sie unter Verbindung mit Office 365 herstellen die URL der SharePoint-Website ein, auf der Sie Ihr Add-In registriert haben, und wählen Sie dann Verbinden aus. Geben Sie beispielsweise https://contoso.sharepoint.com ein.

  2. Melden Sie sich bei Ihrer Office 365-Website an.

  3. Wenn Sie aufgefordert werden, den vom Add-In angeforderten Berechtigungen zustimmung zu erteilen, wählen Sie Vertrauen aus. Beachten Sie, dass Sie zur Seite „/_layouts/15/OAuthAuthorize.aspx“ umgeleitet werden.

    Hinweis

    Ihr Benutzer muss über Berechtigungen zum Verwalten verfügen, um die Zustimmung zu den Berechtigungen zu erteilen, die das Add-In anfordert. Weitere Informationen finden Sie unter Autorisierungscode-OAuth-Fluss für SharePoint-Add-Ins.

  4. Geben Sie unter Erfolgreich mit Contoso verbunden den Namen einer neuen Liste ein, die erstellt werden soll, und wählen Sie dann Liste erstellen aus.

  5. Vergewissern Sie sich, dass Listen in Contoso, in denen alle Listen angezeigt werden, die zur Contoso-Website gehören, Ihre neue Liste anzeigt.

Wenn Sie Verbinden unter Verbinden mit Office 365 auswählen, wird Verbinden in Controllers\HomeController.cs aufgerufen, was dann TokenRepository.Connect aufruft. Die vom Benutzer eingegebene URL unter Mit Office 365 verbinden wird an TokenRepository.Connect als hostUrl übergeben.

Hinweis

Der Code in diesem Artikel wird wie besehen und ohne jegliche Garantie zur Verfügung gestellt, gleich ob ausdrücklich oder konkludent, einschließlich jedweder stillschweigenden Gewährleistung der Eignung für einen bestimmten Zweck, Marktgängigkeit oder Nichtverletzung von Rechten.

 public ActionResult Connect(string hostUrl)
        {
            TokenRepository repository = new TokenRepository(Request, Response);
            repository.Connect(hostUrl);
            return View();            
        }

TokenRepository.Connect ruft TokenHelper.GetAuthorizationUrl auf. TokenHelper.GetAuthorizationUrl gibt den Umleitungs-URL zu OAuthAuthorize.aspx mithilfe von hostUrl und die gewünschten Berechtigungen in der SharePoint-Ressource zurück. OAuthAuthorize.aspx wird zum Autor der Benutzer mit OAuth verwendet. Bei der Umleitung zu OAuthAuthorize.aspx muss sich der Benutzer bei Office 365 anmelden und dann den vom Add-In angeforderten Berechtigungen zustimmen oder dem Add-In vertrauen. Die gewünschte Berechtigungen in der SharePoint-Ressource ist Web.Manage. Nach der Benutzerautorisierung erstellt das Codebeispiel Listen auf der SharePoint-Website. Zum Erstellen von Listen auf einer SharePoint-Website müssen Benutzer über Web.Manage-Berechtigungen verfügen.

Hinweis

TokenHelper.GetAuthorizationUrl gibt eine URL im Format https://contoso.sharepoint.com/_layouts/15/OAuthAuthorize.aspx?IsDlg=1&client_id=<Client-ID>&scope=Web.Manage&response_type=code zurück, wobei <Client-ID die Client-ID> des Add-Ins ist. Wenn Ihr Add-in über das Verkäuferdashboard registriert ist, können alle Office 365-Websites das Add-In installieren. Wenn das Add-In nicht über das Verkäuferdashboard registriert ist, müssen Sie das Add-In mithilfe von appregnew.aspx registrieren und dann Core.DynamicPermissionsWeb\web.config aktualisieren. Weitere Informationen hierzu finden Sie unter Registrieren von SharePoint 2013-Add-Ins.

 public void Connect(string hostUrl)
        {
            if (!IsConnectedToO365)
            {
                HttpCookie spHostUrlCookie = new HttpCookie("SPHostUrl");
                spHostUrlCookie.Value = hostUrl;
                spHostUrlCookie.Expires = DateTime.Now.AddYears(5);
                _response.Cookies.Add(spHostUrlCookie);
                _response.Redirect(TokenHelper.GetAuthorizationUrl(hostUrl, "Web.Manage"));
            }
        }

Nach der Autorisierung wird das Add-In zu Rückruf in Controllers\HomeController.cs umgeleitet. Dies ist der Umleitungs-URI, der in der Datei "appregnew.aspx" angegeben ist. TokenHelper übergibt den Autorisierungscode, Code, an Callback . Um dem weiter unten in diesem Artikel beschriebenen Zugriffstoken den Autorisierungscode zu gewähren, muss Code an callback zurückgegeben werden. Callback ruft dann TokenRepository.Callback auf.

 public ActionResult Callback(string code)
        {
            TokenRepository repository = new TokenRepository(Request, Response);
            repository.Callback(code);
            return RedirectToAction("Index");
        }

TokenRepository.Callback ruft TokenCache.UpdateCacheWithCode auf, das TokenHelper.GetAccessToken verwendet, um ein OAuth-Zugriffstoken basierend auf dem Autorisierungscode, Code, abzurufen.

public void Callback(string code)
        {
            HttpCookie spHostUrlCookie = _request.Cookies["SPHostUrl"];
            if (null != spHostUrlCookie)
            {
                Uri sharePointSiteUrl = new Uri(spHostUrlCookie.Value);
                TokenCache.UpdateCacheWithCode(_request, _response, sharePointSiteUrl);
            }
        }
 public static void UpdateCacheWithCode(HttpRequestBase request, HttpResponseBase response, Uri targetUri)
        {
            string refreshToken = TokenHelper.GetAccessToken(request.QueryString["code"], "00000003-0000-0ff1-ce00-000000000000", targetUri.Authority, TokenHelper.GetRealmFromTargetUrl(targetUri), new Uri(request.Url.GetLeftPart(UriPartial.Path))).RefreshToken;
            SetRefreshTokenCookie(response.Cookies, refreshToken);
            SetRefreshTokenCookie(request.Cookies, refreshToken);
        }

Ihr Add-In verfügt nun über das Zugriffstoken für diesen Benutzer und kann mit dem Erstellen von Listen auf der SharePoint-Website fortfahren.

Siehe auch