Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
1596 lines (1231 sloc) 62.3 KB
title description services author manager ms.service ms.topic ms.date ms.author ms.openlocfilehash ms.sourcegitcommit ms.translationtype ms.contentlocale ms.lasthandoff ms.locfileid
Enlaces de Microsoft Graph para Azure Functions
Descubra cómo utilizar desencadenadores y enlaces de almacenamiento de Microsoft Graph en Azure Functions.
functions
craigshoemaker
gwallace
azure-functions
conceptual
12/20/2017
cshoe
1db929e3ec4b400113d04cb7dd1cd4b8d2e86a9a
42748f80351b336b7a5b6335786096da49febf6a
HT
es-ES
10/09/2019
72176591

Enlaces de Microsoft Graph para Azure Functions

En este artículo se explica cómo configurar y trabajar con desencadenadores de Microsoft Graph y enlaces de Azure Functions. Toda esta información le prepará para usar Azure Functions para trabajar con datos, información y eventos de Microsoft Graph.

La extensión de Microsoft Graph proporciona los siguientes enlaces:

[!INCLUDE intro]

[!Note] Los enlaces de Microsoft Graph se encuentran actualmente en versión preliminar para Azure Functions, versión 2.x. No se admiten en la versión de Functions 1.x.

Paquetes

El enlace de entrada del token de autenticación se proporciona en el paquete NuGet Microsoft.Azure.WebJobs.Extensions.AuthTokens. El resto de los enlaces de Microsoft Graph se proporcionan en el paquete Microsoft.Azure.WebJobs.Extensions.MicrosoftGraph. El código fuente para los paquetes está en el repositorio de GitHub azure-functions-microsoftgraph-extension.

[!INCLUDE functions-package-v2]

Configuración de las extensiones

Los enlaces de Microsoft Graph están disponibles a través de las extensiones de enlace. Las extensiones de enlace son componentes opcionales del tiempo de ejecución de Azure Functions. En esta sección se muestra cómo configurar las extensiones del token de autenticación y Microsoft Graph.

Habilitar la versión preliminar de Functions 2.0

Las extensiones de enlace solo están disponibles para la versión preliminar de Azure Functions 2.0.

Para obtener información acerca de cómo establecer una aplicación de función para usar la versión preliminar 2.0 del runtime de Functions, consulte Selección de destino de las versiones del runtime de Functions.

Instalación de la extensión

Para instalar una extensión desde Azure Portal, navegue a una plantilla o a un enlace que haga referencia a ella. Cree una nueva función y, en la pantalla de selección de plantillas, elija el escenario de "Microsoft Graph". Seleccione una de las plantillas de este escenario. Como alternativa, puede navegar a la pestaña "Integrar" de una función existente y seleccionar uno de los enlaces que se tratan en este artículo.

En ambos casos, aparecerá una advertencia que especifica la extensión que se va a instalar. Haga clic en Instalar para obtener la extensión. Cada extensión solo puede instalarse una vez por cada aplicación de la función.

[!Note] El proceso de instalación en el portal puede tardar hasta 10 minutos en un plan de consumo.

Si utiliza Visual Studio, puede obtener las extensiones mediante la instalación de los paquetes NuGet enumerados anteriormente en este artículo.

Configuración de autenticación o autorización

Los enlaces que se describen en este artículo requieren una identidad para usarlos. Esto permite que Microsoft Graph aplique permisos y audite interacciones. La identidad puede ser el acceso de un usuario a la aplicación o la propia aplicación. Para configurar esta identidad, configure Autenticación o autorización de App Service con Azure Active Directory. También deberá solicitar los permisos del recurso que requieren sus funciones.

[!Note] La extensión de Microsoft Graph solo admite la autenticación de Azure AD. Los usuarios deben iniciar sesión con una cuenta profesional o educativa.

Si usa Azure Portal, verá una advertencia debajo del mensaje para instalar la extensión. La advertencia le pedirá configurar la autenticación o autorización de App Service y solicitar cualquier permiso que requieran la plantilla o el enlace. Haga clic en Configurar Azure AD ahora o Agregar permisos ahora según corresponda.

Token de autenticación

Este enlace de entrada del token de autenticación obtiene un token de Azure AD para un recurso determinado y lo proporciona al código como una cadena. El recurso puede ser cualquiera para el que la aplicación tenga permisos.

Esta sección contiene las siguientes subsecciones:

Token de autenticación: ejemplo

Vea el ejemplo específico del lenguaje:

Token de autenticación: ejemplo de script de C#

En el ejemplo siguiente se obtiene información sobre el perfil de usuario.

El archivo function.json define un desencadenador HTTP con un enlace de entrada de token:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "token",
      "direction": "in",
      "name": "graphToken",
      "resource": "https://graph.microsoft.com",
      "identity": "userFromRequest"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

El código de script de C# usa el token para realizar una llamada HTTP a Microsoft Graph y devuelve el resultado:

using System.Net; 
using System.Net.Http; 
using System.Net.Http.Headers;
using Microsoft.Extensions.Logging; 

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, string graphToken, ILogger log)
{
    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", graphToken);
    return await client.GetAsync("https://graph.microsoft.com/v1.0/me/");
}

Token de autenticación: ejemplo de JavaScript

En el ejemplo siguiente se obtiene información sobre el perfil de usuario.

El archivo function.json define un desencadenador HTTP con un enlace de entrada de token:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "token",
      "direction": "in",
      "name": "graphToken",
      "resource": "https://graph.microsoft.com",
      "identity": "userFromRequest"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

El código de JavaScript usa el token parea realizar una llamada HTTP a Microsoft Graph y devuelve el resultado.

const rp = require('request-promise');

module.exports = function (context, req) {
    let token = "Bearer " + context.bindings.graphToken;

    let options = {
        uri: 'https://graph.microsoft.com/v1.0/me/',
        headers: {
            'Authorization': token
        }
    };
    
    rp(options)
        .then(function(profile) {
            context.res = {
                body: profile
            };
            context.done();
        })
        .catch(function(err) {
            context.res = {
                status: 500,
                body: err
            };
            context.done();
        });
};

Token de autenticación: atributos

En las bibliotecas de clases de C#, use el atributo Token.

Token de autenticación: configuración

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo Token.

Propiedad de function.json Propiedad de atributo DESCRIPCIÓN
name (Requerido): nombre de la variable que se usa en el código de función para el token de autenticación. Consulte Uso de un enlace de entrada del token de autenticación desde el código.
type Requerida: se debe establecer en token.
direction Requerida: se debe establecer en in.
identity Identidad (Requerido): identidad que se usará para realizar la acción. Puede ser uno de los siguientes valores:
  • userFromRequest: solo es válido con el desencadenador HTTP. Usa la identidad del usuario que realiza la llamada.
  • userFromId: usa la identidad de un usuario que inició sesión previamente con el identificador especificado. Consulte la propiedad userId.
  • userFromToken: usa la identidad representada por el token especificado. Consulte la propiedad userToken.
  • clientCredentials: usa la identidad de la aplicación de función.
userId UserId Necesario si y solo si identity está establecido en userFromId. Identificador de una entidad de seguridad de usuario asociado a un usuario que inició sesión previamente.
userToken UserToken Necesario si y solo si identity está establecido en userFromToken. Token válido para la aplicación de función.
Recurso resource Requerido: dirección URL de recursos de Azure AD para la que se solicita el token.

Token de autenticación: uso

El enlace mismo no requiere ningún permiso de Azure AD, pero, según cómo se use el token, puede que necesite solicitar permisos adicionales. Compruebe los requisitos del recurso al que pretenda obtener acceso con el token.

El token se presenta siempre al código como una cadena.

[!Note] Al desarrollar localmente con las opciones userFromId, userFromToken o userFromRequest, se puede obtener manualmente el token necesario y especificarse en el encabezado de solicitud X-MS-TOKEN-AAD-ID-TOKEN desde una aplicación cliente que realiza la llamada.

Entrada de Excel

El enlace de entrada de la tabla de Excel lee el contenido de una tabla almacenada en OneDrive.

Esta sección contiene las siguientes subsecciones:

Entrada de Excel: ejemplo

Vea el ejemplo específico del lenguaje:

Entrada de Excel: ejemplo de script de C#

El archivo function.json siguiente define un desencadenador HTTP con un enlace de entrada de Excel:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "excel",
      "direction": "in",
      "name": "excelTableData",
      "path": "{query.workbook}",
      "identity": "UserFromRequest",
      "tableName": "{query.table}"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

El código de script de C# siguiente lee el contenido de la tabla especificada y lo devuelve al usuario:

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Microsoft.Extensions.Logging;

public static IActionResult Run(HttpRequest req, string[][] excelTableData, ILogger log)
{
    return new OkObjectResult(excelTableData);
}

Entrada de Excel: ejemplo de JavaScript

El archivo function.json siguiente define un desencadenador HTTP con un enlace de entrada de Excel:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "excel",
      "direction": "in",
      "name": "excelTableData",
      "path": "{query.workbook}",
      "identity": "UserFromRequest",
      "tableName": "{query.table}"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

El código de script de JavaScript siguiente lee el contenido de la tabla especificada y lo devuelve al usuario.

module.exports = function (context, req) {
    context.res = {
        body: context.bindings.excelTableData
    };
    context.done();
};

Entrada de Excel: atributos

En las bibliotecas de clases de C#, use el atributo Excel.

Entrada de Excel: configuración

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo Excel.

Propiedad de function.json Propiedad de atributo DESCRIPCIÓN
name (Requerido): nombre de la variable que se usa en el código de función para la tabla de Excel. Consulte Uso de un enlace de entrada de la tabla de Excel desde el código.
type Requerida: se debe establecer en excel.
direction Requerida: se debe establecer en in.
identity Identidad (Requerido): identidad que se usará para realizar la acción. Puede ser uno de los siguientes valores:
  • userFromRequest: solo es válido con el desencadenador HTTP. Usa la identidad del usuario que realiza la llamada.
  • userFromId: usa la identidad de un usuario que inició sesión previamente con el identificador especificado. Consulte la propiedad userId.
  • userFromToken: usa la identidad representada por el token especificado. Consulte la propiedad userToken.
  • clientCredentials: usa la identidad de la aplicación de función.
userId UserId Necesario si y solo si identity está establecido en userFromId. Identificador de una entidad de seguridad de usuario asociado a un usuario que inició sesión previamente.
userToken UserToken Necesario si y solo si identity está establecido en userFromToken. Token válido para la aplicación de función.
path Path (Requerido): ruta de acceso de OneDrive al libro de Excel.
worksheetName WorksheetName Hoja de cálculo en la que se encuentra la tabla.
tableName TableName El nombre de la tabla. Si no se especifica, se usará el contenido de la hoja de cálculo.

Entrada de Excel: uso

Este enlace requiere los siguientes permisos de Azure AD:

Resource Permiso
Microsoft Graph Leer los archivos de usuario

El enlace expone los siguientes tipos de funciones. NET:

  • string[][]
  • Microsoft.Graph.WorkbookTable
  • Tipos de objeto personalizado (con el enlace de modelos estructurales)

Salida de Excel

Este enlace de salida de Excel modifica el contenido de una tabla de Excel almacenada en OneDrive.

Esta sección contiene las siguientes subsecciones:

Salida de Excel: ejemplo

Vea el ejemplo específico del lenguaje:

Salida de Excel: ejemplo de script de C#

En el ejemplo siguiente se agregan filas a una tabla de Excel.

El archivo function.json define un desencadenador HTTP con un enlace de salida de Excel:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "newExcelRow",
      "type": "excel",
      "direction": "out",
      "identity": "userFromRequest",
      "updateType": "append",
      "path": "{query.workbook}",
      "tableName": "{query.table}"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

El código de script de C# agrega una nueva fila a la tabla (se supone que solo tiene una columna) basándose en la entrada desde la cadena de consulta:

using System.Net;
using System.Text;
using Microsoft.Extensions.Logging;

public static async Task Run(HttpRequest req, IAsyncCollector<object> newExcelRow, ILogger log)
{
    string input = req.Query
        .FirstOrDefault(q => string.Compare(q.Key, "text", true) == 0)
        .Value;
    await newExcelRow.AddAsync(new {
        Text = input
        // Add other properties for additional columns here
    });
    return;
}

Salida de Excel: ejemplo de JavaScript

En el ejemplo siguiente se agregan filas a una tabla de Excel.

El archivo function.json define un desencadenador HTTP con un enlace de salida de Excel:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "newExcelRow",
      "type": "excel",
      "direction": "out",
      "identity": "userFromRequest",
      "updateType": "append",
      "path": "{query.workbook}",
      "tableName": "{query.table}"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

El código de JavaScript siguiente agrega una nueva fila a la tabla (se supone que solo tiene una columna) basándose en la entrada desde la cadena de consulta.

module.exports = function (context, req) {
    context.bindings.newExcelRow = {
        text: req.query.text
        // Add other properties for additional columns here
    }
    context.done();
};

Salida de Excel: atributos

En las bibliotecas de clases de C#, use el atributo Excel.

Salida de Excel: configuración

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo Excel.

Propiedad de function.json Propiedad de atributo DESCRIPCIÓN
name (Requerido): nombre de la variable que se usa en el código de función para el token de autenticación. Consulte Uso de un enlace de salida de la tabla de Excel desde el código.
type Requerida: se debe establecer en excel.
direction Requerida: se debe establecer en out.
identity Identidad (Requerido): identidad que se usará para realizar la acción. Puede ser uno de los siguientes valores:
  • userFromRequest: solo es válido con el desencadenador HTTP. Usa la identidad del usuario que realiza la llamada.
  • userFromId: usa la identidad de un usuario que inició sesión previamente con el identificador especificado. Consulte la propiedad userId.
  • userFromToken: usa la identidad representada por el token especificado. Consulte la propiedad userToken.
  • clientCredentials: usa la identidad de la aplicación de función.
UserId userId Necesario si y solo si identity está establecido en userFromId. Identificador de una entidad de seguridad de usuario asociado a un usuario que inició sesión previamente.
userToken UserToken Necesario si y solo si identity está establecido en userFromToken. Token válido para la aplicación de función.
path Path (Requerido): ruta de acceso de OneDrive al libro de Excel.
worksheetName WorksheetName Hoja de cálculo en la que se encuentra la tabla.
tableName TableName El nombre de la tabla. Si no se especifica, se usará el contenido de la hoja de cálculo.
updateType UpdateType (Requerido): tipo de cambio para realizar en la tabla. Puede ser uno de los siguientes valores:
  • update: reemplaza el contenido de la tabla en OneDrive.
  • append: agrega la carga al final de la tabla de OneDrive mediante la creación de nuevas filas.

Salida de Excel: uso

Este enlace requiere los siguientes permisos de Azure AD:

Resource Permiso
Microsoft Graph Tener acceso completo a los archivos del usuario

El enlace expone los siguientes tipos de funciones. NET:

  • string[][]
  • Newtonsoft.Json.Linq.JObject
  • Microsoft.Graph.WorkbookTable
  • Tipos de objeto personalizado (con el enlace de modelos estructurales)

Entrada de archivo

El enlace de entrada de archivo de OneDrive lee el contenido de un archivo almacenado en OneDrive.

Esta sección contiene las siguientes subsecciones:

Entrada de archivo: ejemplo

Vea el ejemplo específico del lenguaje:

Entrada de archivo: ejemplo de script de C#

El ejemplo siguiente lee un archivo que se almacena en OneDrive.

El archivo function.json define un desencadenador HTTP con un enlace de entrada de archivo de OneDrive:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "myOneDriveFile",
      "type": "onedrive",
      "direction": "in",
      "path": "{query.filename}",
      "identity": "userFromRequest"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

El código de script de C# lee el archivo especificado en la cadena de consulta y registra su longitud:

using System.Net;
using Microsoft.Extensions.Logging;

public static void Run(HttpRequestMessage req, Stream myOneDriveFile, ILogger log)
{
    log.LogInformation(myOneDriveFile.Length.ToString());
}

Entrada de archivo: ejemplo de JavaScript

El ejemplo siguiente lee un archivo que se almacena en OneDrive.

El archivo function.json define un desencadenador HTTP con un enlace de entrada de archivo de OneDrive:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "myOneDriveFile",
      "type": "onedrive",
      "direction": "in",
      "path": "{query.filename}",
      "identity": "userFromRequest"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

El código de JavaScript siguiente lee el archivo especificado en la cadena de consulta y devuelve su longitud.

module.exports = function (context, req) {
    context.res = {
        body: context.bindings.myOneDriveFile.length
    };
    context.done();
};

Entrada de archivo: atributos

En las bibliotecas de clases de C#, use el atributo OneDrive.

Entrada de archivo: configuración

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo OneDrive.

Propiedad de function.json Propiedad de atributo DESCRIPCIÓN
name (Requerido): nombre de la variable que se usa en el código de función para el archivo. Consulte Configuración de un enlace de entrada del archivo de OneDrive.
type Requerida: se debe establecer en onedrive.
direction Requerida: se debe establecer en in.
identity Identidad (Requerido): identidad que se usará para realizar la acción. Puede ser uno de los siguientes valores:
  • userFromRequest: solo es válido con el desencadenador HTTP. Usa la identidad del usuario que realiza la llamada.
  • userFromId: usa la identidad de un usuario que inició sesión previamente con el identificador especificado. Consulte la propiedad userId.
  • userFromToken: usa la identidad representada por el token especificado. Consulte la propiedad userToken.
  • clientCredentials: usa la identidad de la aplicación de función.
userId UserId Necesario si y solo si identity está establecido en userFromId. Identificador de una entidad de seguridad de usuario asociado a un usuario que inició sesión previamente.
userToken UserToken Necesario si y solo si identity está establecido en userFromToken. Token válido para la aplicación de función.
path Path (Requerido): ruta de acceso de OneDrive al archivo.

Entrada de archivo: uso

Este enlace requiere los siguientes permisos de Azure AD:

Resource Permiso
Microsoft Graph Leer los archivos de usuario

El enlace expone los siguientes tipos de funciones. NET:

  • byte[]
  • Stream
  • string
  • Microsoft.Graph.DriveItem

Salida de archivo

El enlace de salida de archivo de OneDrive modifica el contenido de un archivo almacenado en OneDrive.

Esta sección contiene las siguientes subsecciones:

Salida de archivo: ejemplo

Vea el ejemplo específico del lenguaje:

Salida de archivo: ejemplo de script de C#

El ejemplo siguiente escribe en un archivo que se almacena en OneDrive.

El archivo function.json define un desencadenador HTTP con un enlace de salida de OneDrive:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "myOneDriveFile",
      "type": "onedrive",
      "direction": "out",
      "path": "FunctionsTest.txt",
      "identity": "userFromRequest"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

El código de script de C# obtiene texto de la cadena de consulta y lo escribe en un archivo de texto (FunctionsText.txt tal como se define en el ejemplo anterior) en la raíz de OneDrive del llamador:

using System.Net;
using System.Text;
using Microsoft.Extensions.Logging;

public static async Task Run(HttpRequest req, ILogger log, Stream myOneDriveFile)
{
    string data = req.Query
        .FirstOrDefault(q => string.Compare(q.Key, "text", true) == 0)
        .Value;
    await myOneDriveFile.WriteAsync(Encoding.UTF8.GetBytes(data), 0, data.Length);
    myOneDriveFile.Close();
    return;
}

Salida de archivo: ejemplo de JavaScript

El ejemplo siguiente escribe en un archivo que se almacena en OneDrive.

El archivo function.json define un desencadenador HTTP con un enlace de salida de OneDrive:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "myOneDriveFile",
      "type": "onedrive",
      "direction": "out",
      "path": "FunctionsTest.txt",
      "identity": "userFromRequest"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

El código de JavaScript obtiene texto de la cadena de consulta y lo escribe en un archivo de texto (FunctionsTest.txt tal como se define en la configuración anterior) en la raíz de OneDrive del llamador.

module.exports = function (context, req) {
    context.bindings.myOneDriveFile = req.query.text;
    context.done();
};

Salida de archivo: atributos

En las bibliotecas de clases de C#, use el atributo OneDrive.

Salida de archivo: configuración

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo OneDrive.

Propiedad de function.json Propiedad de atributo DESCRIPCIÓN
name (Requerido): nombre de la variable que se usa en el código de función del archivo. Consulte Uso de un enlace de salida del archivo de OneDrive desde código.
type Requerida: se debe establecer en onedrive.
direction Requerida: se debe establecer en out.
identity Identidad (Requerido): identidad que se usará para realizar la acción. Puede ser uno de los siguientes valores:
  • userFromRequest: solo es válido con el desencadenador HTTP. Usa la identidad del usuario que realiza la llamada.
  • userFromId: usa la identidad de un usuario que inició sesión previamente con el identificador especificado. Consulte la propiedad userId.
  • userFromToken: usa la identidad representada por el token especificado. Consulte la propiedad userToken.
  • clientCredentials: usa la identidad de la aplicación de función.
UserId userId Necesario si y solo si identity está establecido en userFromId. Identificador de una entidad de seguridad de usuario asociado a un usuario que inició sesión previamente.
userToken UserToken Necesario si y solo si identity está establecido en userFromToken. Token válido para la aplicación de función.
path Path (Requerido): ruta de acceso de OneDrive al archivo.

Salida de archivo: uso

Este enlace requiere los siguientes permisos de Azure AD:

Resource Permiso
Microsoft Graph Tener acceso completo a los archivos del usuario

El enlace expone los siguientes tipos de funciones. NET:

  • byte[]
  • Stream
  • string
  • Microsoft.Graph.DriveItem

Salida de Outlook

El enlace de salida de mensajes de Outlook envía un mensaje de correo electrónico a través de Outlook.

Esta sección contiene las siguientes subsecciones:

Salida de Outlook: ejemplo

Vea el ejemplo específico del lenguaje:

Salida de Outlook: ejemplo de script de C#

El ejemplo siguiente envía un correo electrónico a través de Outlook.

El archivo function.json define un desencadenador HTTP con un enlace de salida de mensajes de Outlook:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "message",
      "type": "outlook",
      "direction": "out",
      "identity": "userFromRequest"
    }
  ],
  "disabled": false
}

El código de script de C# envía un correo desde el llamador a un destinatario especificado en la cadena de consulta:

using System.Net;
using Microsoft.Extensions.Logging;

public static void Run(HttpRequest req, out Message message, ILogger log)
{ 
    string emailAddress = req.Query["to"];
    message = new Message(){
        subject = "Greetings",
        body = "Sent from Azure Functions",
        recipient = new Recipient() {
            address = emailAddress
        }
    };
}

public class Message {
    public String subject {get; set;}
    public String body {get; set;}
    public Recipient recipient {get; set;}
}

public class Recipient {
    public String address {get; set;}
    public String name {get; set;}
}

Salida de Outlook: ejemplo de JavaScript

El ejemplo siguiente envía un correo electrónico a través de Outlook.

El archivo function.json define un desencadenador HTTP con un enlace de salida de mensajes de Outlook:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "message",
      "type": "outlook",
      "direction": "out",
      "identity": "userFromRequest"
    }
  ],
  "disabled": false
}

El código de script de JavaScript envía un correo desde el llamador a un destinatario especificado en la cadena de consulta:

module.exports = function (context, req) {
    context.bindings.message = {
        subject: "Greetings",
        body: "Sent from Azure Functions with JavaScript",
        recipient: {
            address: req.query.to 
        } 
    };
    context.done();
};

Salida de Outlook: atributos

En las bibliotecas de clases de C#, use el atributo Outlook.

Salida de Outlook: configuración

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo Outlook.

Propiedad de function.json Propiedad de atributo DESCRIPCIÓN
name (Requerido): nombre de la variable que se usa en el código de función del mensaje de correo. Consulte Configuración de un enlace de salida del archivo de OneDrive.
type Requerida: se debe establecer en outlook.
direction Requerida: se debe establecer en out.
identity Identidad (Requerido): identidad que se usará para realizar la acción. Puede ser uno de los siguientes valores:
  • userFromRequest: solo es válido con el desencadenador HTTP. Usa la identidad del usuario que realiza la llamada.
  • userFromId: usa la identidad de un usuario que inició sesión previamente con el identificador especificado. Consulte la propiedad userId.
  • userFromToken: usa la identidad representada por el token especificado. Consulte la propiedad userToken.
  • clientCredentials: usa la identidad de la aplicación de función.
userId UserId Necesario si y solo si identity está establecido en userFromId. Identificador de una entidad de seguridad de usuario asociado a un usuario que inició sesión previamente.
userToken UserToken Necesario si y solo si identity está establecido en userFromToken. Token válido para la aplicación de función.

Salida de Outlook: uso

Este enlace requiere los siguientes permisos de Azure AD:

Resource Permiso
Microsoft Graph Enviar correo como usuario

El enlace expone los siguientes tipos de funciones. NET:

  • Microsoft.Graph.Message
  • Newtonsoft.Json.Linq.JObject
  • string
  • Tipos de objeto personalizado (con el enlace de modelos estructurales)

webhooks

Los webhooks le permiten reaccionar antes los eventos de Microsoft Graph. Para admitir webhooks, las funciones son necesarias para crear suscripciones de weebhook, actualizarlas y reaccionar ante ellas. Una solución de webhook completa requiere una combinación de los enlaces siguientes:

Los enlaces en sí mismos no requieren ningún permiso de Azure AD, pero es necesario solicitar permisos relevantes para el tipo de recurso ante el que va a reaccionar. Para obtener una lista de los permisos necesarios para cada tipo de recurso, consulte permisos de suscripción.

Para más información sobre los webhooks, consulte Trabajar con Intune en Microsoft Graph.

Desencadenador de webhook

El desencadenador de webhook de Microsoft Graph permite que una función reaccione ante un webhook entrante desde Microsoft Graph. Cada instancia de este desencadenador puede reaccionar a un tipo de recurso de Microsoft Graph.

Esta sección contiene las siguientes subsecciones:

Desencadenador de webhook: ejemplo

Vea el ejemplo específico del lenguaje:

Desencadenador de webhook: ejemplo de script de C#

En el ejemplo siguiente se controlan los webhooks para los mensajes de Outlook entrantes. Para usar un desencadenador de webhook, debe crear una suscripción y puede actualizar la suscripción para evitar que expire.

El archivo function.json define un desencadenador de webhook:

{
  "bindings": [
    {
      "name": "msg",
      "type": "GraphWebhookTrigger",
      "direction": "in",
      "resourceType": "#Microsoft.Graph.Message"
    }
  ],
  "disabled": false
}

El código de script de C# reacciona ante los mensajes de correo entrantes y registra el cuerpo de los enviados por el destinatario que contienen "Azure Functions" en el asunto:

#r "Microsoft.Graph"
using Microsoft.Graph;
using System.Net;
using Microsoft.Extensions.Logging;

public static async Task Run(Message msg, ILogger log)  
{
    log.LogInformation("Microsoft Graph webhook trigger function processed a request.");

    // Testable by sending oneself an email with the subject "Azure Functions" and some text body
    if (msg.Subject.Contains("Azure Functions") && msg.From.Equals(msg.Sender)) {
        log.LogInformation($"Processed email: {msg.BodyPreview}");
    }
}

Desencadenador de webhook: ejemplo de JavaScript

En el ejemplo siguiente se controlan los webhooks para los mensajes de Outlook entrantes. Para usar un desencadenador de webhook, debe crear una suscripción y puede actualizar la suscripción para evitar que expire.

El archivo function.json define un desencadenador de webhook:

{
  "bindings": [
    {
      "name": "msg",
      "type": "GraphWebhookTrigger",
      "direction": "in",
      "resourceType": "#Microsoft.Graph.Message"
    }
  ],
  "disabled": false
}

El código de JavaScript reacciona ante los mensajes de correo entrantes y registra el cuerpo de los enviados por el destinatario que contienen "Azure Functions" en el asunto:

module.exports = function (context) {
    context.log("Microsoft Graph webhook trigger function processed a request.");
    const msg = context.bindings.msg
    // Testable by sending oneself an email with the subject "Azure Functions" and some text body
    if((msg.subject.indexOf("Azure Functions") > -1) && (msg.from === msg.sender) ) {
      context.log(`Processed email: ${msg.bodyPreview}`);
    }
    context.done();
};

Desencadenador de webhook: atributos

En las bibliotecas de clases de C#, use el atributo GraphWebhookTrigger.

Desencadenador de webhook: configuración

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo GraphWebhookTrigger.

Propiedad de function.json Propiedad de atributo DESCRIPCIÓN
name (Requerido): nombre de la variable que se usa en el código de función del mensaje de correo. Consulte Configuración de un enlace de salida del archivo de OneDrive.
type Requerida: se debe establecer en graphWebhook.
direction Requerida: se debe establecer en trigger.
resourceType ResourceType (Requerido): recurso de Graph por el que esta función debería responder a webhooks. Puede ser uno de los siguientes valores:
  • #Microsoft.Graph.Message: cambios realizados en los mensajes de Outlook.
  • #Microsoft.Graph.DriveItem: cambios realizados en elementos raíz de OneDrive.
  • #Microsoft.Graph.Contact : cambios realizados en los contactos personales de Outlook.
  • #Microsoft.Graph.Event: cambios realizados en los elementos de calendario de Outlook.

[!Note] Una aplicación de función solo puede tener una función registrada en un determinado valor resourceType.

Desencadenador de webhook: uso

El enlace expone los siguientes tipos de funciones. NET:

  • Tipos de SDK de Microsoft Graph relacionados con el tipo de recurso, como Microsoft.Graph.Message o Microsoft.Graph.DriveItem.
  • Tipos de objeto personalizado (con el enlace de modelos estructurales)

Entrada de webhook

El enlace de entrada de webhook de Microsoft Graph le permite recuperar la lista de suscripciones que administra esta aplicación de función. El enlace lee desde el almacenamiento de la aplicación de función, por lo que no refleja el resto de suscripciones que se crean desde fuera de la aplicación.

Esta sección contiene las siguientes subsecciones:

Entrada de webhook: ejemplo

Vea el ejemplo específico del lenguaje:

Entrada de webhook: ejemplo de script de C#

El ejemplo siguiente obtiene todas las suscripciones del usuario que realiza la llamada y las elimina.

El archivo function.json define un desencadenador HTTP con un enlace de entrada de suscripción y un enlace de salida de suscripción que usa la acción de eliminación:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in",
      "filter": "userFromRequest"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "subscriptionsToDelete",
      "direction": "out",
      "action": "delete",
      "identity": "userFromRequest"
    },
    {
      "type": "http",
      "name": "res",
      "direction": "out"
    }
  ],
  "disabled": false
}

El código de script de C# obtiene las suscripciones y las elimina:

using System.Net;
using Microsoft.Extensions.Logging;

public static async Task Run(HttpRequest req, string[] existingSubscriptions, IAsyncCollector<string> subscriptionsToDelete, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");
    foreach (var subscription in existingSubscriptions)
    {
        log.LogInformation($"Deleting subscription {subscription}");
        await subscriptionsToDelete.AddAsync(subscription);
    }
}

Entrada de webhook: ejemplo de JavaScript

El ejemplo siguiente obtiene todas las suscripciones del usuario que realiza la llamada y las elimina.

El archivo function.json define un desencadenador HTTP con un enlace de entrada de suscripción y un enlace de salida de suscripción que usa la acción de eliminación:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in",
      "filter": "userFromRequest"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "subscriptionsToDelete",
      "direction": "out",
      "action": "delete",
      "identity": "userFromRequest"
    },
    {
      "type": "http",
      "name": "res",
      "direction": "out"
    }
  ],
  "disabled": false
}

El código de JavaScript obtiene las suscripciones y las elimina:

module.exports = function (context, req) {
    const existing = context.bindings.existingSubscriptions;
    var toDelete = [];
    for (var i = 0; i < existing.length; i++) {
        context.log(`Deleting subscription ${existing[i]}`);
        todelete.push(existing[i]);
    }
    context.bindings.subscriptionsToDelete = toDelete;
    context.done();
};

Entrada de webhook: atributos

En las bibliotecas de clases de C#, use el atributo GraphWebhookSubscription.

Entrada de webhook: configuración

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo GraphWebhookSubscription.

Propiedad de function.json Propiedad de atributo DESCRIPCIÓN
name (Requerido): nombre de la variable que se usa en el código de función del mensaje de correo. Consulte Configuración de un enlace de salida del archivo de OneDrive.
type Requerida: se debe establecer en graphWebhookSubscription.
direction Requerida: se debe establecer en in.
filter Filter Si se establece en userFromRequest, el enlace solo recuperará las suscripciones propiedad del usuario que realiza la llamada (válido únicamente con desencadenador HTTP).

Entrada de webhook: uso

El enlace expone los siguientes tipos de funciones. NET:

  • string[]
  • Matrices de tipos de objeto personalizado
  • Newtonsoft.Json.Linq.JObject[]
  • Microsoft.Graph.Subscription[]

Salida de webhook

El enlace de salida de suscripción de webhook le permite crear, eliminar y actualizar las suscripciones de webhook en Microsoft Graph.

Esta sección contiene las siguientes subsecciones:

Salida de webhook: ejemplo

Vea el ejemplo específico del lenguaje:

Salida de webhook: ejemplo de script de C#

El ejemplo siguiente crea una suscripción. Puede actualizar la suscripción para evitar que expire.

El archivo function.json define un desencadenador HTTP con un enlace de salida de suscripción y que usa una acción de creación:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "clientState",
      "direction": "out",
      "action": "create",
      "subscriptionResource": "me/mailFolders('Inbox')/messages",
      "changeTypes": [
        "created"
      ],
      "identity": "userFromRequest"
    },
    {
      "type": "http",
      "name": "$return",
      "direction": "out"
    }
  ],
  "disabled": false
}

El código de script de C# siguiente registra un webhook que enviará una notificación a esta aplicación de función cuando el usuario que realiza la llamada reciba un mensaje de Outlook:

using System;
using System.Net;
using Microsoft.Extensions.Logging;

public static HttpResponseMessage run(HttpRequestMessage req, out string clientState, ILogger log)
{
  log.LogInformation("C# HTTP trigger function processed a request.");
    clientState = Guid.NewGuid().ToString();
    return new HttpResponseMessage(HttpStatusCode.OK);
}

Salida de webhook: ejemplo de JavaScript

El ejemplo siguiente crea una suscripción. Puede actualizar la suscripción para evitar que expire.

El archivo function.json define un desencadenador HTTP con un enlace de salida de suscripción y que usa una acción de creación:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "clientState",
      "direction": "out",
      "action": "create",
      "subscriptionResource": "me/mailFolders('Inbox')/messages",
      "changeTypes": [
        "created"
      ],
      "identity": "userFromRequest"
    },
    {
      "type": "http",
      "name": "$return",
      "direction": "out"
    }
  ],
  "disabled": false
}

El código de JavaScript registra un webhook que enviará una notificación a esta aplicación de función cuando el usuario que realiza la llamada reciba un mensaje de Outlook:

const uuidv4 = require('uuid/v4');

module.exports = function (context, req) {
    context.bindings.clientState = uuidv4();
    context.done();
};

Salida de webhook: atributos

En las bibliotecas de clases de C#, use el atributo GraphWebhookSubscription.

Salida de webhook: configuración

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo GraphWebhookSubscription.

Propiedad de function.json Propiedad de atributo DESCRIPCIÓN
name (Requerido): nombre de la variable que se usa en el código de función del mensaje de correo. Consulte Configuración de un enlace de salida del archivo de OneDrive.
type Requerida: se debe establecer en graphWebhookSubscription.
direction Requerida: se debe establecer en out.
identity Identidad (Requerido): identidad que se usará para realizar la acción. Puede ser uno de los siguientes valores:
  • userFromRequest: solo es válido con el desencadenador HTTP. Usa la identidad del usuario que realiza la llamada.
  • userFromId: usa la identidad de un usuario que inició sesión previamente con el identificador especificado. Consulte la propiedad userId.
  • userFromToken: usa la identidad representada por el token especificado. Consulte la propiedad userToken.
  • clientCredentials: usa la identidad de la aplicación de función.
userId UserId Necesario si y solo si identity está establecido en userFromId. Identificador de una entidad de seguridad de usuario asociado a un usuario que inició sesión previamente.
userToken UserToken Necesario si y solo si identity está establecido en userFromToken. Token válido para la aplicación de función.
action Acción (Requerido): especifica la acción que debe realizar el enlace. Puede ser uno de los siguientes valores:
  • create: registra una suscripción nueva.
  • delete: elimina una determinada suscripción.
  • refresh: actualiza una determinada suscripción para impedir que expire.
subscriptionResource SubscriptionResource Necesario si y solo si action está establecido en create. Especifica el recurso de Microsoft Graph que se va a supervisar para los cambios. Consulte Trabajar con Intune en Microsoft Graph.
changeType ChangeType Necesario si y solo si action está establecido en create. Indica el tipo de cambio en el recurso suscrito que generará una notificación. Los valores admitidos son: created, updated y deleted. Pueden combinarse varios valores mediante una lista separada por comas.

Salida de webhook: uso

El enlace expone los siguientes tipos de funciones. NET:

  • string
  • Microsoft.Graph.Subscription

Actualización de suscripción de webhook

Existen dos enfoques para la actualización de las suscripciones:

  • Use la identidad de la aplicación para tratar todas las suscripciones. Esto requerirá el consentimiento de un administrador de Azure Active Directory. Esto puede usarse por todos los idiomas admitidos por Azure Functions.
  • Use la identidad asociada con cada suscripción enlazando manualmente cada identificador de usuario. Será necesario código personalizado para realizar el enlace. Solo pueden usarlo funciones. NET.

En esta sección se incluye un ejemplo de cada uno de estos enfoques:

Actualización de suscripción de webhook: ejemplo de identidad de aplicación

Vea el ejemplo específico del lenguaje:

Actualización de identidad de aplicación: ejemplo de script de C#

En el ejemplo siguiente se usa la identidad de aplicación para actualizar una suscripción.

El archivo function.json define un desencadenador de temporizador con un enlace de entrada de suscripción y un enlace de salida de suscripción:

{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 * * */2 * *"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "subscriptionsToRefresh",
      "direction": "out",
      "action": "refresh",
      "identity": "clientCredentials"
    }
  ],
  "disabled": false
}

El código de script de C# actualiza las suscripciones:

using System;
using Microsoft.Extensions.Logging;

public static void Run(TimerInfo myTimer, string[] existingSubscriptions, ICollector<string> subscriptionsToRefresh, ILogger log)
{
    // This template uses application permissions and requires consent from an Azure Active Directory admin.
    // See https://go.microsoft.com/fwlink/?linkid=858780
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    foreach (var subscription in existingSubscriptions)
    {
      log.LogInformation($"Refreshing subscription {subscription}");
      subscriptionsToRefresh.Add(subscription);
    }
}

Actualización de identidad de aplicación: ejemplo de script de C#

En el ejemplo siguiente se usa la identidad de aplicación para actualizar una suscripción.

El archivo function.json define un desencadenador de temporizador con un enlace de entrada de suscripción y un enlace de salida de suscripción:

{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 * * */2 * *"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "subscriptionsToRefresh",
      "direction": "out",
      "action": "refresh",
      "identity": "clientCredentials"
    }
  ],
  "disabled": false
}

El código de JavaScript actualiza las suscripciones:

// This template uses application permissions and requires consent from an Azure Active Directory admin.
// See https://go.microsoft.com/fwlink/?linkid=858780

module.exports = function (context) {
    const existing = context.bindings.existingSubscriptions;
    var toRefresh = [];
    for (var i = 0; i < existing.length; i++) {
        context.log(`Refreshing subscription ${existing[i]}`);
        toRefresh.push(existing[i]);
    }
    context.bindings.subscriptionsToRefresh = toRefresh;
    context.done();
};

Actualización de suscripción de webhook: ejemplo de identidad de usuario

En el ejemplo siguiente se usa la identidad de usuario para actualizar una suscripción.

El archivo function.json define un desencadenador de temporizador y difiere el enlace de entrada de suscripción al código de función:

{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 * * */2 * *"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in"
    }
  ],
  "disabled": false
}

El código de script de C# actualiza las suscripciones y crea el enlace de salida en el código, usando la identidad de cada usuario:

using System;
using Microsoft.Extensions.Logging;

public static async Task Run(TimerInfo myTimer, UserSubscription[] existingSubscriptions, IBinder binder, ILogger log)
{
  log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    foreach (var subscription in existingSubscriptions)
    {
        // binding in code to allow dynamic identity
        using (var subscriptionsToRefresh = await binder.BindAsync<IAsyncCollector<string>>(
            new GraphWebhookSubscriptionAttribute() {
                Action = "refresh",
                Identity = "userFromId",
                UserId = subscription.UserId
            }
        ))
        {
            log.LogInformation($"Refreshing subscription {subscription}");
            await subscriptionsToRefresh.AddAsync(subscription);
        }

    }
}

public class UserSubscription {
    public string UserId {get; set;}
    public string Id {get; set;}
}

Pasos siguientes

[!div class="nextstepaction"] Más información sobre desencadenadores y enlaces de Azure Functions

You can’t perform that action at this time.