Autoriser les utilisateurs de compléments hébergés par un fournisseur au moment de l’exécution avec OAuth

Fournir un accès autorisé aux ressources SharePoint en utilisant OAuth lors de l’exécution des compléments hébergés par le fournisseur.

S’applique à : SharePoint 2013 | Compléments SharePoint | SharePoint Online

Vos utilisateurs peuvent accéder aux compléments SharePoint en ouvrant un site SharePoint, en choisissant Contenu du site, puis en sélectionnant le complément. SharePoint redirige les utilisateurs vers le web distant où votre complément hébergé par le fournisseur s’exécute. Étant donné que les utilisateurs accèdent au complément à partir de SharePoint, les utilisateurs sont autorisés par SharePoint avant qu’ils puissent accéder au complément.

Par ailleurs, si vos utilisateurs accèdent directement à l’URL de votre complément hébergé par le fournisseur, ce complément doit les autoriser au moment de l’exécution à l’aide OAuth. Dans ce scénario, le complément hébergé par le fournisseur doit gérer l’autorisation, car votre utilisateur n’a pas été autorisé tout d’abord par SharePoint. L’exemple Core.DynamicPermissions vous montre comment dynamiquement demander des autorisations à partir d’un site Web à l’aide d’OAuth. Utiliser cette solution pour :

  • Autoriser les utilisateurs qui arrivent directement à votre complément hébergé par le fournisseur plutôt que d’accéder à votre complément à partir de SharePoint. Par exemple, vous ne souhaitez peut-être pas que vos utilisateurs utilisent l’interface utilisateur SharePoint. À la place, vos utilisateurs peuvent utiliser un complément hébergé par le fournisseur qui affiche les données pertinentes récupérées à partir de SharePoint.

  • Créer un complément hébergé par le fournisseur qui peut authentifier les utilisateurs avec OAuth et peut être vendu sur l’Office Store.

Avant de commencer

Pour commencer, téléchargez le complément exempleCore.DynamicPermissions à partir du projetpratiques et modèles Office 365 Developer sur GitHub.

Avant d’exécuter l’exemple de code :

  • Vérifiez que vous pouvez Gérer les autorisations sur le site. En savoir plus surComprendre les niveaux d’autorisation

  • Inscrire le complément sur un site SharePoint à l’aide d’ AppRegNew.aspx :

    1. Accédez à appregnew.aspx sur votre site SharePoint. Par exemple, si vous souhaitez utiliser votre complément sur le site contoso.sharepoint.com, accédez à http://contoso.sharepoint.com/_layouts/15/appregnew.aspx.

    2. Sélectionnez Générer pour générer une nouvelle ID client.

    3. Sélectionnez Générer pour générer un nouveau Secret client.

    4. Entrez un titre pour votre complément dans Titre.

    5. Dans Domaine complément, entrez l’URL de votre complément hébergé par le fournisseur. Par exemple, entrez localhost.

    6. Dans rediriger URI, entrez l’URL de votre complément hébergé par le fournisseur. SharePoint redirigera votre complément vers cet URL après autorisation et accordera l’autorisation d’accès. Par exemple, entrez https://localhost:44363/Home/Callback. Vous pouvez obtenir le nom de domaine et numéro de port à partir de la propriété URL SSL sur le projet Core.DynamicPermissionsWeb dans Visual Studio.

    7. Sélectionnez Créer.

  • Copiez l’ID Client et la clé secrète client dans l’élément appSettings dans Core.DynamicPermissionsWeb\web.config.

À l’aide du complément Core.DynamicPermissions

Lorsque vous exécutez l’exemple de code :

  1. Dans Se connecter à Office 365, entrez l’URL du site SharePoint sur lequel vous avez inscrit votre complément, puis sélectionnez Connecter. Par exemple, entrez https://contoso.sharepoint.com.

  2. Connectez-vous à votre site Office 365.

  3. Si vous êtes invité à accorder l’accès pour les autorisations que le complément demande, sélectionnez Approuver. Notez que vous êtes redirigé vers la page /_layouts/15/OAuthAuthorize.aspx.

    Notes

    Votre utilisateur doit disposer des autorisations Gérer pour accorder l’accès pour les autorisations du complément. Pour plus d’informations, reportez-vous à la rubrique Flux OAuth avec code d’autorisation pour les compléments SharePoint.

  4. Dans correctement connecté à Contoso, entrez le nom d’une nouvelle liste à créer, puis créer une liste.

  5. Vérifiez que les Listes dans Contoso, qui affichent toutes les listes qui appartiennent au site Contoso, montre votre nouvelle liste.

Lorsque vous choisissez Connecter sur Se connecter à Office 365, Connecter dans Controllers\HomeController.cs est appelé, qui ensuite appelle TokenRepository.Connect . L’URL entré par l’utilisateur sur Se connecter à Office 365 est transmis à TokenRepository.Connect en tant que hostUrl.

Notes

Le code dans cet article est fourni tel quel, sans garantie d’aucune sorte, expresse ou implicite, y compris mais sans s’y limiter, aucune garantie implicite d’adéquation à un usage particulier, à une qualité marchande ou une absence de contrefaçon.

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

TokenRepository.Connect appelle TokenHelper.GetAuthorizationUrl . TokenHelper.GetAuthorizationUrl renvoie l’URL de redirection à OAuthAuthorize.aspx à l’aide de hostUrl et les autorisations sur la ressource SharePoint souhaitées. OAuthAuthorize.aspx est utilisé pour autoriser les utilisateurs à l’aide de OAuth. Lorsqu’il est redirigé vers OAuthAuthorize.aspx, l’utilisateur doit se connecter à Office 365, puis consentir aux autorisations que le add-in demande, ou faire confiance au module. L’autorisation souhaitée sur la ressource SharePoint est Web.Manage . Après l’autorisation de l’utilisateur, l’exemple de code crée des listes sur le site SharePoint. Pour créer des listes sur un site SharePoint, les utilisateurs doivent disposer des autorisations Web.Manage.

Notes

TokenHelper.GetAuthorizationUrl renvoie un URL du formulaire https://contoso.sharepoint.com/_layouts/15/OAuthAuthorize.aspx?IsDlg=1&amp ;client_id=&scope=Web.Manage&response_type = code , où <ID client> est l’ID de client du complément Si votre complément est inscrit via le tableau de bord vendeur, un site Office 365 peut installer le complément. Si votre complément n’est pas inscrit via le tableau de bord vendeur, vous devez inscrire votre complément à l’aide de appregnew.aspx puis mettre à jour Core.DynamicPermissionsWeb\web.config. Pour plus d’informations, voirInscrire les compléments SharePoint 2013.

 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"));
            }
        }

Après autorisation, le complément est redirigé vers rappel dans Controllers\HomeController.cs, c'est-à-dire l’URL spécifié sur appregnew.aspx. TokenHelper transmet le code d’autorisation, code , en rappel . Pour accorder des token décrits plus loin dans cet article, le code d’autorisation, code doit être renvoyé vers rappel . Rappel appelle ensuite TokenRepository.Callback.

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

TokenRepository.Callback appelle TokenCache.UpdateCacheWithCode, qui utilise TokenHelper.GetAccessToken pour obtenir un jeton d’accès OAuth en fonction du code d’autorisation code.

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);
        }

Votre complément a désormais du jeton d’accès pour cet utilisateur et pouvez donc créer des listes sur le site SharePoint.

Voir aussi