Compartir a través de


Autorizar usuarios de complementos proporcionados por el servidor en tiempo de ejecución usando OAuth

Proporcione acceso autorizado a los recursos de SharePoint mediante OAuth en complementos hospedados por el proveedor en tiempo de ejecución.

Se aplica a: SharePoint 2013 | Complementos de SharePoint | SharePoint Online

Los usuarios pueden acceder a los complementos de SharePoint abriendo un sitio de SharePoint, eligiendo Contenido del sitio y, a continuación, eligiendo el complemento. SharePoint redirige a los usuarios a la web remota donde se ejecuta el complemento hospedado por el proveedor. Puesto que los usuarios acceden al complemento desde SharePoint, los usuarios están autorizados por SharePoint antes de que puedan acceder al complemento.

Como alternativa, si los usuarios van directamente a la dirección URL de su complemento hospedado por el proveedor, dicho complemento debe autorizarles en el tiempo de ejecución usando OAuth. En este escenario, el complemento hospedado por el proveedor debe controlar la autorización porque el usuario no fue autorizado por SharePoint antes. El ejemplo Core.DynamicPermissions muestra cómo solicitar permisos dinámicamente desde un sitio web mediante OAuth. Use esta solución para:

  • Autorizar a los usuarios a ir directamente a su complemento hospedado por el proveedor en lugar de acceder a través de SharePoint. Por ejemplo, puede que no quiera que los usuarios utilicen l interfaz de usuario de SharePoint. En su lugar, los usuarios pueden usar un complemento hospedado por el proveedor que muestre los datos relevantes recuperados de SharePoint.

  • Crear un complemento hospedado por el proveedor que pueda autenticar a usuarios con OAuth y se pueda vender a través de la Tienda Office.

Antes de empezar

Para empezar, descargue el complemento de ejemplo Core.DynamicPermissions del proyecto Office 365 Patrones y prácticas para desarrolladores en GitHub.

Antes de ejecutar el código de ejemplo:

  • Asegúrese de que tiene permisos de administración en el sitio. Obtenga más información en Información sobre los niveles de permisos.

  • Registre el complemento en un sitio de SharePoint mediante AppRegNew.aspx:

    1. Vaya a appregnew.aspx en el sitio de SharePoint. Por ejemplo, si desea usar el complemento en el sitio contoso.sharepoint.com, vaya a http://contoso.sharepoint.com/_layouts/15/appregnew.aspx.

    2. Elija Generar para generar un nuevo identificador de cliente.

    3. Elija Generar para generar un nuevo secreto de cliente.

    4. Escriba un título para el complemento en Título.

    5. En Dominio de complemento, escriba la dirección URL del complemento hospedado por el proveedor. Por ejemplo, escriba localhost.

    6. En URI de redirección, escriba la dirección URL del complemento hospedado por el proveedor. SharePoint redirigirá el complemento a esta dirección URL después de que se concedan la autorización y los permisos. Por ejemplo, escriba https://localhost:44363/Home/Callback. Puede obtener el nombre de dominio y el número de puerto de la propiedad DIRECCIÓN URL SSL en el proyecto Core.DynamicPermissionsWeb de Visual Studio.

    7. Elija Crear.

  • Copie el identificador de cliente y el secreto de cliente en el elemento appSettings de Core.DynamicPermissionsWeb\web.config.

Usar el complemento de Core.DynamicPermissions

Al ejecutar el código de ejemplo:

  1. En Conectarse a Office 365, escriba la dirección URL del sitio de SharePoint en el que registró el complemento y, a continuación, elija Conectar. Por ejemplo, escriba https://contoso.sharepoint.com.

  2. Inicie sesión en la cuenta de Office 365.

  3. Si se le pide que conceda consentimiento a los permisos que está solicitando el complemento, elija Confiar en él. Observe que se le redirige a la página /_layouts/15/OAuthAuthorize.aspx.

    Nota:

    El usuario debe tener permisos de administración para conceder consentimiento a los permisos que solicita el complemento. Puede obtener más información en Flujo de código de autenticación de OAuth para complementos de SharePoint.

  4. En Conectarse correctamente a Contoso, escriba el nombre de una nueva lista para crear y, a continuación, elija Crear lista.

  5. Compruebe que Listas en Contoso, que muestra todas las listas que pertenecen al sitio de Contoso, muestra la nueva lista.

Al elegir Conectar en Conectar a Office 365, se llama a Connect in Controllers\HomeController.cs, que luego llama a TokenRepository.Connect . La dirección URL escrita por el usuario en Conectarse a Office 365 se pasará a TokenRepository.Connect como hostUrl.

Nota:

El código de este artículo se proporciona tal cual, sin garantía de ningún tipo, expresa o implícita, incluidas las garantías implícitas de aptitud para un propósito particular, comerciabilidad o ausencia de infracción.

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

TokenRepository.Connect llama a TokenHelper.GetAuthorizationUrl . TokenHelper.GetAuthorizationUrl devuelve la dirección URL de redirección OAuthAuthorize.aspx utilizando la hostUrl y los permisos que desee en los recursos de SharePoint. OAuthAuthorize.aspx se usa para autorizar a los usuarios con OAuth. Cuando se le redirige a OAuthAuthorize.aspx, el usuario debe iniciar sesión en Office 365 y, a continuación, dar su consentimiento a los permisos que solicita el complemento o confiar en el complemento. El permisos preferido en los recursos de SharePoint es Web.Manage . Después de la autorización del usuario, el código de ejemplo crea listas en el sitio de SharePoint. Para crear listas en un sitio de SharePoint, los usuarios deben tener permisos Web.Manage.

Nota:

TokenHelper.GetAuthorizationUrl devuelve una dirección URL del formulario https://contoso.sharepoint.com/_layouts/15/OAuthAuthorize.aspx?IsDlg=1&client_id=<Id.> de cliente&scope=Web.Manage&response_type=code, donde <Id> . de cliente es el identificador de cliente del complemento. Si el complemento está registrado mediante el panel de vendedor, un sitio de Office 365 puede instalar el complemento. Si el complemento no está registrado mediante el panel de vendedor, debe registrar el complemento con appregnew.aspx y después actualizar Core.DynamicPermissionsWeb\web.config. Para obtener más información, consulte Registrar complementos de 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"));
            }
        }

Después de la autorización, el complemento se redirige a Devolución de llamada en Controllers\HomeController.cs, que es el URI de redirección especificado en appregnew.aspx. TokenHelper pasa el código de autorización, code , a Callback . Para conceder el token de acceso que se describe más adelante en este artículo, el código de autorización code , debe devolverse a Callback . Callback entonces llama a TokenRepository.Callback.

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

TokenRepository.Callback llama a TokenCache.UpdateCacheWithCode, que usa TokenHelper.GetAccessToken para obtener un token de acceso de OAuth con el código de autorización 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);
        }

El complemento ahora tiene el token de acceso para este usuario y puede empezar a crear las listas en el sitio de SharePoint.

Vea también