Quiero que mi integración de Outlook 365 use tanto la API de complemento JS de Outlook como la API REST de Outlook.

Pero como lo veo, tiene un manejo separado de permisos / credenciales:

  • La API de complementos de Outlook tiene los siguientes permisos: Restringido, ReadItem, ReadWriteItem o ReadWriteMailbox
  • La API REST de Outlook tiene soporte completo de OAuth2 con ámbitos, p. el alcance offline_access que más me interesa.

Lo que quiero es utilizar el complemento de Outlook para proporcionar al usuario elementos de IU adicionales y utilizar la API REST de Outlook para mantener mis datos sincronizados con los datos de Outlook.

¿Es posible sin obligar al usuario a dar su consentimiento dos veces? En primer lugar, se da el consentimiento para el complemento al instalarlo y luego el consentimiento para nuestra aplicación que utiliza la API REST de Outlook para los trabajos de sincronización.

0
alek kowalczyk 3 ene. 2017 a las 17:48

4 respuestas

La mejor respuesta

Que yo sepa, no es posible ahora sin pedirle al usuario final que complete un segundo flujo de autenticación basado en OAUTH.

Tenga en cuenta que puede usar EWS (Servicios web de Exchange, que no es REST) sin un flujo de autenticación secundario, si necesita acceder a datos no proporcionados por Office.js

Eche un vistazo a getUserIdentityTokenAsync o makeEwsRequestAsync aquí.

1
Benoit Patra 3 ene. 2017 a las 16:21

Puede obtener el token de acceso de la API REST de Outlook desde su complemento JS de Outlook utilizando el
Método Office.context.mailbox.getCallbackTokenAsync como se muestra a continuación

Office.context.mailbox.getCallbackTokenAsync({isRest: true}, function(result){
  if (result.status === "succeeded") {
    var accessToken = result.value;

    // Use the access token.
    getCurrentItem(accessToken);
  } else {
    // Handle the error.
  }
});

Fuente: Obtener un token de acceso

0
Jay Harry 3 abr. 2020 a las 07:06

Puede usar Office.js y puede obtener un token de él y el token se usa para realizar llamadas ajax. Estoy dando ejemplo aquí

var _mailbox = Office.context.mailbox;
_mailbox.getCallbackTokenAsync({ isRest: true }, function (result) {
    if (result.status === Office.AsyncResultStatus.Succeeded) {
       var  accessToken = result.value;

         var userDetail;
     var url = Office.context.mailbox.restUrl+ "/v2.0/me";
   try {
    $.ajax({
        type: 'GET',
        url: url,
        contentType: "application/json",
        headers: { 'Authorization': 'Bearer ' + accessToken },
        async: false,
        success: function (data) {
            userDetail = data;
        },
        error: function (textStatus, errorThrown) {

            userDetail = null;//doesnt goes here
        }

    });
}
catch (error)
{
    userDetail = null;
    writeLog(error);
}
  }
  }

El código anterior proporciona detalles del usuario actual, incluidos el nombre, la dirección de correo electrónico y muchos más. Puede realizar varias otras operaciones, como crear carpeta, mover correo electrónico, eliminar correo electrónico y muchos más.

0
Shyam sundar shah 11 nov. 2017 a las 06:45

No necesita un segundo flujo de autenticación, puede usar Office.context.mailbox.getCallbackTokenAsync ({isRest: true}, function (result) ... para obtener el token de acceso, luego puede consumir la API REST de Calendar usando JQuery / Ajax por ejemplo.

0
user2133516 23 abr. 2017 a las 21:29