Table of contents
TOC
Collapse the table of content
Expand the table of content
Última actualización: 20/06/2018

Integre las API de Office 365 en proyectos de .NET Visual Studio

Se aplica a: Office 365

Cuando haya agregado un servicio de Office 365 a su proyecto, deberá escribir código que autentique al usuario de la aplicación y acceda a sus datos de Office 365.

El proceso de autenticación es distinto según si está compilando una aplicación web, como una aplicación MVC, o una aplicación nativa, como una aplicación de la Tienda Windows. Seleccione uno de los enlaces siguientes para ver un ejemplo de compilación de una aplicación que usa las API de Office 365:

Nota Estos tutoriales utilizan la última versión de Office Developer Tools para Visual Studio. Si utiliza versiones anteriores de las herramientas, le recomendamos que actualice a la última versión para asegurarse de que el código de estos ejemplos funciona correctamente en su caso.

Integración de las API de Office 365 en un proyecto de MVC Visual Studio

En el ejemplo compilaremos una aplicación MVC de inquilino único que utiliza el inicio de sesión único de Azure AD para autenticar y leer la información de contacto del usuario desde Office 365. Usaremos el Proyecto MVC de inquilino único de Office 365 en GitHub como modelo.

La aplicación empleará una caché de token de Biblioteca de autenticación de Active Directory (ADAL) persistente que usa una base de datos para el almacenamiento en caché. ADAL le permite autenticar a los usuarios en Active Directory (AD), en este caso Azure AD, y a continuación obtener tokens de acceso para asegurar llamadas API.

Para compilar este ejemplo con éxito, deberá haber establecido los siguientes permisos para las API de Office 365.

  • Para las API Usuarios y grupos, establezca permisos para Habilitar inicio de sesión y leer los perfiles de usuario.

  • Para la API Contactos, establezca permisos para Leer los contactos de usuario.

Para abrir las herramientas de Office 365 y asegurarse de haber establecido los permisos anteriores, en el Explorador de soluciones, haga clic con el botón derecho en el proyecto y seleccione Agregar > Servicio conectado.

A partir de aquí, la compilación del ejemplo consta de tres pasos principales:

Configure su proyecto para la autenticación con Azure Active Directory

Dado que el ejemplo que estamos compilando solo requiere la autenticación de credenciales de Office 365, usaremos OWINKatana y Biblioteca de autenticación de Active Directory (ADAL).

Pero, en primer lugar, configuraremos el proyecto para utilizar la capa de sockets seguros (SSL).

Habilite SSL para su proyecto

Visual Studio no configura su proyecto para SSL de manera predeterminada. Si aún no ha habilitado SSL en su proyecto, le recomendamos que lo haga ahora, y a continuación actualice los servicios de Office 365 con la URL de redireccionamiento adecuada.

Para habilitar SSL:

  1. En el Explorador de soluciones, haga clic en el proyecto.
  2. En Propiedades, establezca SSL habilitado en Verdadero.

    Visual Studio especifica un valor para la URL de SSL.

A continuación, querremos actualizar la aplicación para que utilice el extremo HTTPS para la página principal:

  1. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto y seleccionePropiedades.
  2. Seleccione la pestañaWeb. En Servidores, establezca URL del proyecto en el extremo HTTPS que Visual Studio ha creado para el URL de SSL.

Por último, actualizaremos los servicios de Office 365:

  1. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto y seleccione Agregar > Servicio conectado. Si es necesario, inicie sesión.

    Visual Studio le indica que una o más URL de redireccionamiento en su proyecto no existen en su entrada de aplicación en Azure AD.

  2. Haga clic en para agregar la URL segura de redireccionamiento a la entrada de su aplicación en Azure AD.

  3. Haga clic en Aceptar para salir del Administrador de servicios.

Administrar paquetes NuGet necesarios para la autenticación

Deberá instalar los siguientes paquetes de Azure AD y OWIN Katana para la autenticación:

Estos paquetes también pueden instalar paquetes NuGet seleccionados como dependencias.

Para descargar e instalar los paquetes NuGet:

  1. En el Explorador de soluciones, haz clic con el botón derecho en el proyecto.
  2. Seleccione Administrar paquetes NuGet...
  3. En Administrar paquetes NuGet, haga clic en En línea.
  4. Utilice el cuadro de búsqueda para encontrar el paquete necesario.
  5. Seleccione el paquete y haga clic en Instalar.
  6. En Seleccionar proyectos, paga clic en Aceptar.
  7. Acepte las licencias según se indique.

Actualice el archivo web.config para habilitar la autenticación

Cuando agregó los servicios de Office 365 a su proyecto, Visual Studio agregó las siguientes propiedades al registro de su aplicación en Azure AD, y al archivo web.config en su solución:

<add key="ida:ClientId" value="app-azure-ad-client-id" />
<add key="ida:ClientSecret" value="app-azure-ad-password" />
<add key="ida:TenantId" value="azure-tenant-where-app-is-registered" />
<add key="ida:AADInstance" value="https://login.microsoftonline.com/" 

Cree una base de datos para administrar tokens de autenticación de ADAL

A continuación, agregaremos una base de datos al proyecto, para que actúe como nuestra caché de tokens ADAL.

Para obtener más información sobre la caché de tokens ADAL, consulte La nueva caché de token en ADAL v2.

Para agregar la base de datos que actuará como la caché de tokens ADAL:

  1. En el Explorador de soluciones, haga clic con el botón derecho en la carpeta Páginas y seleccione Agregar > Nuevo elemento...
  2. Asegúrese de que Datos está seleccionado, y a continuación seleccione Base de datos de SQL Server. Dé un nombre a la base de datos ADALTokenCacheDb y haga clic en Agregar.

Asegúrese de que la conexión de la base de datos se haya agregado al proyecto web.config:

  1. En el Explorador de soluciones, haga doble clic en web.config.
  2. Asegúrese de que se haya agregado la siguiente sección al archivo web.config, después de la sección appSettings. Si no está allí, agréguela:
<connectionStrings>
    <add name="DefaultConnection"
     connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\ADALTokenCacheDb.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
  1. Guarde el archivo.

Copie los archivos necesarios para la autenticación

A continuación, importaremos algunos archivos del proyecto GitHub Proyecto MVC de inquilino único de Office 365. Explicaremos para qué se utiliza cada archivo conforme avancemos.

Para copiar archivos del proyecto GitHub:

  1. En un explorador, vaya hasta el archivo que desea copiar. (Los archivos se enumeran a continuación).
  2. Haga clic con el botón derecho en el botón Sin formato y seleccione Guardar destino como...
  3. Guarde el archivo en su equipo.
  4. En Visual Studio, en el Explorador de soluciones, debajo del nodo del proyecto, haga clic con el botón derecho en la carpeta especificada tal como se describe a continuación y seleccione Agregar > Elemento existente...
  5. Seleccione el archivo de la ubicación donde lo guardó en el equipo.

Copie los archivos siguientes en la carpeta Modelos en el proyecto. Estas clases demuestran cómo se puede construir y usar una caché de token de ADAL persistente para almacenar tokens.

Cree una carpeta nueva, Utilidades.

  1. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto y seleccione Agregar > Nueva carpeta.
  2. Nombre la carpeta Utilidades.

Copie en ella el siguiente archivo. Esta clase auxiliar contiene variables de miembro que leen los valores del archivo web.config de su proyecto que necesitará para crear el objeto de autenticación de ADAL durante el inicio.

Finalmente, copie el archivo _LoginPartial.cshtml en la carpeta Vistas > Compartida de su proyecto.

Autentique con Azure Active Directory

Ahora que tenemos el proyecto configurado para la autenticación, podemos agregar la funcionalidad que maneja la autenticación con Azure AD.

Configure el inicio de sesión único de Azure AD

A continuación, necesitaremos agregar al proyecto una clase de inicio de OWIN, para manejar realmente la autenticación. Para agregar la clase de inicio de OWIN:

  1. En el Explorador de soluciones, haga clic con el botón derecho en el nombre del proyecto y seleccione Agregar > Nuevo elemento...
  2. En Agregar nuevo elemento, debajo de Web, seleccione General y a continuación Clase de inicio de OWIN.
  3. Para Nombre, especifique Inicio.
  4. Haga clic en Agregar.

Se agrega una nueva clase de inicio a su proyecto.

A continuación, agregaremos el código que maneja la autenticación:

  1. Reemplace las referencias de espacio de nombres en el archivo con lo siguiente:
    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    using Microsoft.Owin.Security;
    using Microsoft.Owin.Security.Cookies;
    using Microsoft.Owin.Security.OpenIdConnect;
    using O365_WebApp_SingleTenant.Models;
    using O365_WebApp_SingleTenant.Utils;
    using Owin;
    using System;
    using System.IdentityModel.Claims;
    using System.Threading.Tasks;
    using System.Web;
    using Microsoft.Owin;
  1. Agregue el siguiente método, ConfigureAuth, a la clase de Inicio.
    public void ConfigureAuth(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

        app.UseCookieAuthentication(new CookieAuthenticationOptions());

        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = SettingsHelper.ClientId,
                Authority = SettingsHelper.Authority,

                Notifications = new OpenIdConnectAuthenticationNotifications()
                {                       
                    // If there is a code in the OpenID Connect response, redeem it for an access token and refresh token, and store those away.
                    AuthorizationCodeReceived = (context) =>
                    {
                        var code = context.Code;
                        ClientCredential credential = new ClientCredential(SettingsHelper.ClientId, SettingsHelper.AppKey);
                        String signInUserId = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;

                        AuthenticationContext authContext = new AuthenticationContext(SettingsHelper.Authority, new ADALTokenCache(signInUserId));
                        AuthenticationResult result = authContext.AcquireTokenByAuthorizationCode(code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)), credential, SettingsHelper.AADGraphResourceId);

                        return Task.FromResult(0);
                    },
                    RedirectToIdentityProvider = (context) =>
                    {
                        // This ensures that the address used for sign in and sign out is picked up dynamically from the request
                        // this allows you to deploy your app (to Azure Web Sites, for example)without having to change settings
                        // Remember that the base URL of the address used here must be provisioned in Azure AD beforehand.
                        string appBaseUrl = context.Request.Scheme + "://" + context.Request.Host + context.Request.PathBase;
                        context.ProtocolMessage.RedirectUri = appBaseUrl + "/";
                        context.ProtocolMessage.PostLogoutRedirectUri = appBaseUrl;

                        return Task.FromResult(0);
                    },
                    AuthenticationFailed = (context) =>
                    {
                        // Suppress the exception if you don't want to see the error
                        context.HandleResponse();
                        return Task.FromResult(0);
                    }
                }

            });
    }
  1. Agregue código al método Startup.Configuration que llama al método ConfigureAuth.
    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);
    }

Agregue un controlador para iniciar sesión y cerrar sesión en Office 365

Agregue un controlador de cuenta para gestionar el inicio y el cierre de sesión:

  1. En el Explorador de soluciones, haga clic con el botón derecho en la carpeta Controladores y seleccione Agregar > Controlador...
  2. Seleccione Controlador de MVC 5 - Vacío y haga clic en Agregar.
  3. Para el nombre del controlador, especifique AccountController y haga clic en Agregar.
  4. Reemplace las referencias de espacio de nombres en el archivo de controlador con lo siguiente:
    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    using Microsoft.Owin.Security;
    using Microsoft.Owin.Security.Cookies;
    using Microsoft.Owin.Security.OpenIdConnect;
    using O365_WebApp_SingleTenant.Utils;
    using System.Security.Claims;
    using System.Web;
    using System.Web.Mvc;
  1. Eliminar el método Index().
  2. Agregue los siguientes métodos a la clase AccountController para gestionar el inicio y el cierre de sesión.
    public void SignIn()
    {
        if (!Request.IsAuthenticated)
        {
            HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" }, OpenIdConnectAuthenticationDefaults.AuthenticationType);
        }
    }
    public void SignOut()
    {
        string callbackUrl = Url.Action("SignOutCallback", "Account", routeValues: null, protocol: Request.Url.Scheme);

        HttpContext.GetOwinContext().Authentication.SignOut(
            new AuthenticationProperties { RedirectUri = callbackUrl },
            OpenIdConnectAuthenticationDefaults.AuthenticationType, CookieAuthenticationDefaults.AuthenticationType);
    }

    public ActionResult SignOutCallback()
    {
        if (Request.IsAuthenticated)
        {
            // Redirect to home page if the user is authenticated.
            return RedirectToAction("Index", "Home");
        }

        return View();
    }

Acceda a las API de Office 365

Ahora estamos listos para agregar el código que accederá a los datos de Office 365 del usuario.

Crear el modelo para la vista de información de contactos

Primero, necesitamos crear la clase en la que basaremos la vista de Contactos:

  1. En el Explorador de soluciones, haga clic con el botón derecho en la carpeta Modelos y seleccione Agregar > Clase...
  2. Seleccione Clase, especifique Mi contacto como nombre y haga clic en Agregar.
  3. En la clase, agregue la siguiente línea de código.
    public class MyContact
    {
        public string Name { get; set; }
    }
  1. Guarde el archivo.

Agregue un controlador para la información de contacto

A continuación, agregue un controlador para la información de contacto de los usuarios:

  1. En el Explorador de soluciones, haga clic con el botón derecho en la carpeta Controladores y seleccione Agregar > Controlador...
  2. Seleccione Controlador de MVC 5 - Vacío y haga clic en Agregar.
  3. Para el nombre del controlador, especifique ContactsControllery haga clic en Agregar.

    Visual Studio agrega un nuevo controlador vacío al proyecto.

  4. Reemplace las referencias de espacio de nombres en el archivo de controlador con lo siguiente:

     using Microsoft.IdentityModel.Clients.ActiveDirectory;
     using Microsoft.Office365.Discovery;
     using Microsoft.Office365.OutlookServices;
     using O365_WebApp_SingleTenant.Models;
     using O365_WebApp_SingleTenant.Utils;
     using System.Collections.Generic;
     using System.Security.Claims;
     using System.Threading.Tasks;
     using System.Web.Mvc;
    
Asegúrese de agregar una referencia de espacio de nombres para el espacio de nombres de Modelos de su proyecto:


        using [projectname].Models;
  1. Agregue el atributo [Authorize] a la clase ContactsController.

El atributo [Authorize] requiere que el usuario se autentique para que pueda acceder a este controlador.

    [Authorize]
    public class ContactsController : Controller
  1. Cambie el método Index () para que sea asíncrono.
    public async Task<ActionResult> Index()
  1. Agregue el código siguiente al método Index ().

Este código crea el contexto de autenticación, utilizando el Id. de usuario de Office 365 que ha iniciado sesión y la autoridad para su arrendamiento de Office 365.

        List<MyContact> myContacts = new List<MyContact>();

        var signInUserId = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
        var userObjectId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;

        AuthenticationContext authContext = new AuthenticationContext(SettingsHelper.Authority, new ADALTokenCache(signInUserId));
  1. Agregue un bloque try-catch directamente debajo del código anterior en el método Index ().
        try
        {

        }
        catch (AdalException exception)
        {
            //handle token acquisition failure
            if (exception.ErrorCode == AdalError.FailedToAcquireTokenSilently)
            {
                authContext.TokenCache.Clear();

                //handle token acquisition failure
            }
        }

        return View(myContacts);
  1. En el bloque try del código anterior, agregue el código siguiente al método Index ().

Este código intenta adquirir un token de acceso al Servicio de detección, y pasa el Id. de cliente de la aplicación y la contraseña de la aplicación, así como las credenciales del usuario. Debido a que el token de autenticación de usuario se ha almacenado en caché, el controlador puede adquirir el token de acceso necesario silenciosamente, sin tener que solicitar nuevamente al usuario sus credenciales.

Con el token de acceso, la aplicación puede crear un objeto de cliente del Servicio de detección y utilizar el objeto de cliente de detección para determinar el extremo del recurso para las API de Contactos del servicio de Office 365.

            DiscoveryClient discClient = new DiscoveryClient(SettingsHelper.DiscoveryServiceEndpointUri,
                async () =>
                {
                    var authResult = await authContext.AcquireTokenSilentAsync(SettingsHelper.DiscoveryServiceResourceId, new ClientCredential(SettingsHelper.ClientId, SettingsHelper.AppKey), new UserIdentifier(userObjectId, UserIdentifierType.UniqueId));

                    return authResult.AccessToken;
                });

            var dcr = await discClient.DiscoverCapabilityAsync("Contacts");
  1. Finalmente, directamente debajo del código anterior en el bloque try, agregue el código siguiente al método Index ().

Este código se pone en contacto con el extremo del recurso para las API de Contactos del servicio de Office 365, y pasa de nuevo silenciosamente las credenciales del usuario y de la aplicación para adquirir un token de acceso al servicio de Outlook.

Una vez que se recibe el token de acceso, el código puede inicializar un objeto de cliente de Outlook. A continuación, el código utiliza la propiedad Me del objeto de cliente de Outlook para recuperar información de contactos para este usuario.

Por último, el controlador lee la lista de contactos de usuario y devuelve una vista que enumera sus nombres para mostrar.

            OutlookServicesClient exClient = new OutlookServicesClient(dcr.ServiceEndpointUri,
                async () =>
                {
                    var authResult = await authContext.AcquireTokenSilentAsync(dcr.ServiceResourceId, new ClientCredential(SettingsHelper.ClientId, SettingsHelper.AppKey), new UserIdentifier(userObjectId, UserIdentifierType.UniqueId));

                    return authResult.AccessToken;
                });

            var contactsResult = await exClient.Me.Contacts.ExecuteAsync();

            do
            {
                var contacts = contactsResult.CurrentPage;
                foreach (var contact in contacts)
                {
                    myContacts.Add(new MyContact { Name = contact.DisplayName });
                }

                contactsResult = await contactsResult.GetNextPageAsync();

            } while (contactsResult != null);

Ahora, el método Index () completado debería tener el aspecto siguiente:

    public async Task<ActionResult> Index()
    {
        List<MyContact> myContacts = new List<MyContact>();

        var signInUserId = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
        var userObjectId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;

        AuthenticationContext authContext = new AuthenticationContext(SettingsHelper.Authority, new ADALTokenCache(signInUserId));

        try
        {
            DiscoveryClient discClient = new DiscoveryClient(SettingsHelper.DiscoveryServiceEndpointUri,
                async () =>
                {
                    var authResult = await authContext.AcquireTokenSilentAsync(SettingsHelper.DiscoveryServiceResourceId, new ClientCredential(SettingsHelper.ClientId, SettingsHelper.AppKey), new UserIdentifier(userObjectId, UserIdentifierType.UniqueId));

                    return authResult.AccessToken;
                });

            var dcr = await discClient.DiscoverCapabilityAsync("Contacts");                

            OutlookServicesClient exClient = new OutlookServicesClient(dcr.ServiceEndpointUri,
                async () =>
                {
                    var authResult = await authContext.AcquireTokenSilentAsync(dcr.ServiceResourceId, new ClientCredential(SettingsHelper.ClientId, SettingsHelper.AppKey), new UserIdentifier(userObjectId, UserIdentifierType.UniqueId));

                    return authResult.AccessToken;
                });

            var contactsResult = await exClient.Me.Contacts.ExecuteAsync();

            do
            {
                var contacts = contactsResult.CurrentPage;
                foreach (var contact in contacts)
                {
                    myContacts.Add(new MyContact { Name = contact.DisplayName });
                }

                contactsResult = await contactsResult.GetNextPageAsync();

            } while (contactsResult != null);
        }
        catch (AdalException exception)
        {
            //handle token acquisition failure
            if (exception.ErrorCode == AdalError.FailedToAcquireTokenSilently)
            {
                authContext.TokenCache.Clear();

                //handle token acquisition failure
            }
        }

        return View(myContacts);
    }

Crear la vista para los datos de Contactos

A continuación, podemos crear la vista para la información de contacto del usuario. Lo haremos basando la vista en la clase MyContact que creamos anteriormente.

  1. En el Exploradorador de soluciones, haga clic con el botón derecho en la carpeta Contactos y seleccione Agregar > Ver.
  2. En el cuadro de diálogo Agregar vista, defina la nueva vista:
    • Para Nombre de la vista, especifique Índice.
    • Para Plantilla, seleccione Lista.
    • Para Clase de modelo, seleccione MyContact.
    • Haga clic en Agregar.
  1. En el Explorador de soluciones, en la carpeta Compartido, haga doble clic en el archivo _Layout.cshtml.

  2. Agregue un enlace de acción para la página MyContacts e inserte la clase parcial para el inicio de sesión del usuario. Actualice el código HTML de la barra de navegación a partir de lo que se ha generado automáticamente:

         <div class="navbar-collapse collapse">
             <ul class="nav navbar-nav">
                 <li>@Html.ActionLink("Home", "Index", "Home")</li>
                 <li>@Html.ActionLink("About", "About", "Home")</li>
                 <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
             </ul>
         </div>
    

Haga lo siguiente para agregar un enlace de acción para la página MyContacts e inyectar la clase parcial para el inicio de sesión del usuario:

        <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                <li>@Html.ActionLink("Home", "Index", "Home")</li>
                <li>@Html.ActionLink("About", "About", "Home")</li>
                <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
                <li>@Html.ActionLink("My Contacts", "Index", "Contacts")</li>
            </ul>
            @Html.Partial("_LoginPartial")
        </div>

Depure su aplicación

Ahora está listo para ejecutar la solución. Presione F5 para depurar su aplicación web.

Si se trata de un nuevo entorno de desarrollo, Visual Studio puede solicitarle que configure el certificado SSL de IIS. Haga clic en dos veces para continuar.

  1. Visual Studio iniciará la aplicación web en el explorador que seleccionó en Visual Studio.

  2. Haga clic en Iniciar sesión, en la esquina superior derecha de la página, e inicie sesión en el inquilino de Office 365 donde registró su aplicación web.

    Como solo se permite a los usuarios de su organización iniciar sesión en una aplicación de inquilino único, no se requiere consentimiento. Si su aplicación fuera multiempresa, Azure AD mostraría una página de consentimiento que enumeraría los permisos que la aplicación hubiera solicitado, por lo que podría dar su consentimiento para otorgarle esos permisos a la aplicación.

  3. Una vez que haya iniciado sesión, debería ver su dirección de correo electrónico y Cerrar sesión en la barra de navegación en la parte superior de la página principal.

  4. Haga clic en Mis contactos

    La página Mis contactos recuperará y mostrará los nombres de los contactos de Exchange de su inquilino.

Ahora tiene un proyecto de aplicación web que puede personalizar e integrar las API de Office 365.

Siguiente pasos

Integración de las API de Office 365 en un proyecto de Windows Visual Studio

Para obtener un ejemplo de cómo integrar las API de Office 365 en una aplicación de cliente nativo, como una Tienda Windows o una aplicación de teléfono, puede consultar el Proyecto de aplicación Windows Office 365 en GitHub. El proyecto recupera una lista de los archivos del usuario.

La clase AuthenticationHelper.cs contiene el código para autenticar y adquirir tokens de Azure AD para recursos de Office 365. En el ejemplo, adquirimos un token para el recurso Mis archivos.

Esto ocurre en el método GetAccessToken: para adquirir tokens, primero consultamos el Servicio de detección de Office 365 para descubrir las funcionalidades de la aplicación. A medida que configuremos la aplicación para solicitar permisos de Mis archivos, el Servicio de detección de Office 365 devolverá la información de funcionalidad de Mis archivos, como el Id. de recurso y el URI del extremo. Con estos, adquirimos un token de acceso para el recurso Mis archivos.

Almacenamiento del último Id. de inquilino

Dado que las aplicaciones de los dispositivos son, de forma predeterminada, aplicaciones multiempresa, la aplicación inicialmente no sabe qué usuario de qué inquilino está iniciando sesión en la aplicación hasta que el usuario inicia sesión con éxito y otorga el consentimiento de la aplicación.

Tenga en cuenta que las aplicaciones multiempresa permiten a los usuarios externos de Office 365 iniciar sesión y usar la aplicación. Si la aplicación se publica en la Tienda Windows, los usuarios pueden descargar la aplicación, iniciar sesión en sus cuentas empresariales de Office 365 y usar la aplicación. Azure AD registrará la aplicación Windows en nombre del usuario en la cuenta empresarial correspondiente del usuario que ha iniciado sesión.

Una vez que el usuario da su consentimiento, la aplicación puede obtener el Id. de inquilino de los usuarios que hayan iniciado sesión, que almacena en la configuración de la aplicación. La aplicación puede usar este Id. de inquilino para inicializar el contexto de autenticación la próxima vez que el usuario abra la aplicación o realice una solicitud. Esto elimina la necesidad de que el usuario dé su consentimiento cada vez que se realice una solicitud; solo debe dar su consentimiento una vez, cuando accede por primera vez a la aplicación. Esto es así hasta que el token de acceso caduca.

Siguiente pasos

Después de acceder a las API de Office 365, puede trabajar con los recursos de usuario disponibles mediante las API. Para obtener más información y fragmentos de código que muestran cómo realizar tareas comunes utilizando las bibliotecas clientes proporcionadas por Visual Studio, consulte:

Recursos adicionales

Ejemplos de código

Desarrollo en Visual Studio

Referencia

© 2018 Microsoft