
Compartir:
Rabeb fue defensora de los desarrolladores en Nexmo, centrándose en las API de comunicación en la nube y ayudando a los desarrolladores a obtener la mejor experiencia posible al crear sus aplicaciones. Además de escribir código para ganarse la vida, Rabeb aboga por atraer a más mujeres y minorías a la tecnología, de ahí su participación en Women Who Code y en diferentes comunidades tecnológicas. Dirige la red Women Who Code en Bristol.
Añadir 2FA a un bot de Microsoft con Verify API de Nexmo
Tiempo de lectura: 4 minutos
2FA (Two Factor Authentication) se utiliza cada vez más para aumentar la seguridad dentro de las Applications. A medida que los bots se hacen cada vez más populares, los desarrolladores tendrán que considerar cómo integrar 2FA con sus bots En esta demo, veremos cómo utilizar Nexmo Verify API con Microsoft Bot Framework.
Requisitos previos
En este post, no vamos a entrar en los detalles de la creación de un bot. Asumimos que sabes cómo configurar Visual Studio para crear proyectos bot. Si no estás familiarizado con Microsoft Bot framework, puedes visitar la página de documentación página de documentación aquí.
El SDK de Bot Builder para .NET es compatible actualmente con C#. Visual Studio para Mac no es compatible. Necesitarás una máquina Windows para poder ejecutar esta demo.
Para configurar 2FA, estamos utilizando Nexmo Verify API y la Biblioteca Cliente Nexmo C#
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
¿Cómo funciona?
En nuestro escenario, vamos a añadir autenticación de dos factores a un bot en el registro. Como usuario por primera vez, se le pide que proporcione un poco de información para completar su perfil como su nombre y número de teléfono.
A continuación, el bot intentará verificar ese número de teléfono enviando un PIN mediante la API Nexmo Verify. El siguiente paso es recoger el PIN y comprobarlo.
Configuración del proyecto bot
Lo primero que hay que hacer para configurar 2FA con un bot, es crear un bot. Tiene sentido, ¿verdad? En Visual Studio, crea un nuevo proyecto del tipo "Aplicación Bot": Archivo--> Nuevo--> Proyecto--> Aplicación Bot
Creating and Saving new project
Uso de Nexmo con el bot
El uso de las APIs de Nexmo con una Aplicación Bot no difiere del uso de las APIs con cualquier otro Proyecto .Net. instale la Librería Cliente Nexmo C# a través de la Consola del Gestor de Paquetes NuGet.
Install-Package Nexmo.Csharp.Client -Version 3.0.1’ Creación del formulario de perfil
Con el fin de verificar el número de teléfono del usuario en el registro, vamos a recoger un poco de información para la construcción de un perfil de usuario.
Con Microsoft Bot Framework, hay algunas maneras de gestionar el flujo de conversación y construir diálogos. En este caso, vamos a utilizar FormFlow ya que simplifica el proceso de gestión de una conversación guiada como la nuestra.
2fa Typing message
Añade una clase 'UserProfile' al proyecto, esta clase define el formulario. La clase incluye algunas propiedades para ayudarnos a construir el perfil y un método 'BuildForm()' que utiliza 'FormBuilder' para crear el formulario y definir un simple mensaje de bienvenida.
Asegúrese de importar el espacio de nombres FormFlow para poder utilizar FormFlow.
Microsoft.Bot.Builder.FormFlowusing Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Builder.FormFlow;
using System;
namespace _2FABotDemo
{
[Serializable]
public class UserProfile
{
[Prompt("What's your first name?")]
public string FirstName;
[Prompt("How about your last name?")]
public string LastName;
[Prompt("I now need your phone number in its international format but without '+' or '00'. I will send you a verification code shortly.")]
public string PhoneNumber;
public static IForm<UserProfile> BuildForm()
{
return new FormBuilder<UserProfile>().Message("Welcome! Before I'm of any use to you, I will need to verify your identity. Please answer the following questions.")
.OnCompletion(async (context, UserProfile) => {
context.PrivateConversationData.SetValue<bool>("ProfileComplete", true);
await context.PostAsync("Your profile is complete.");
})
.Build();
}
}
} Utilizando el formulario
Ahora que tenemos un formulario de perfil, necesitamos conectarlo al framework para poder usarlo realmente. Esto se hace añadiéndolo al controlador 'MessagesController.cs' a través del método 'MakeRootDialog()'.
'MakeRootDialog()' a su vez llama al método 'FormDialog.FromForm' para crear el formulario de perfil de usuario. Una vez completado el perfil de usuario, el bot procederá a enviar un código de verificación al número de teléfono proporcionado por el usuario.
En aras de la claridad, estamos agrupando los métodos relacionados con la verificación (es decir, para el envío y la comprobación) en una clase helper llamada 'VerifyHelper.cs'.
public string RequestId { get; set; }
public Client Client { get; set; }
public VerifyHelper()
{
Client = new Client(creds: new Nexmo.Api.Request.Credentials
{
ApiKey = "NEXMO_API_KEY",
ApiSecret = "NEXMO_API_SECRET"
});
}
public void SendVerificationCode(string phoneNumber)
{
var result = Client.NumberVerify.Verify(new NumberVerify.VerifyRequest
{
number = phoneNumber,
brand = "NexmoQS"
});
RequestId = result.request_id;
}internal static IDialog<UserProfile> MakeRootDialog() => Chain.From(() => FormDialog.FromForm(UserProfile.BuildForm))
.Do(async (context, userprofile) =>
{
SetVerify(new VerifyHelper());
try
{
var completed = await userprofile;
GetVerify().SendVerificationCode(completed.PhoneNumber);
await context.PostAsync("All Done! I sent a verification code to the phone number you provided. Could you please tell me the code once you receive it?");
}
catch (FormCanceledException<UserProfile> e)
{
string reply;
if (e.InnerException == null)
{
reply = $"You quit on {e.Last} -- maybe you can finish next time!";
}
else
{
reply = "Sorry, I've had a short circuit. Please try again.";
}
await context.PostAsync(reply);
}
});MakeRootDialog()' es llamado por el método Conversation.SendAsync()'.
await Conversation.SendAsync(activity, () => MakeRootDialog());
Ahora que ya se ha enviado el código, el siguiente paso es verificarlo una vez que el usuario se lo proporciona al bot.
Verify Code
Esto se hace a través del método 'CheckVerificationCode' en 'VerifyHelper.cs'.
public string CheckVerificationCode(string code)
{
var result = Client.NumberVerify.Check(new NumberVerify.CheckRequest
{
request_id = RequestId,
code = code
});
if (result.status == "0")
{
return "Verification Sucessful";
}
else
{
return result.error_text;
}
}Como puedes ver, este método devuelve una cadena porque queremos usar esa cadena para comunicarnos con el usuario a través del bot. la otra cosa a tener en cuenta aquí es 'RequestId'. Este es el identificador de la solicitud de Verify a comprobar. Cuando enviamos el código de verificación, simplemente almacenamos este identificador.
Ahora volvamos al bot, hemos mencionado que estamos creando el formulario en 'MessageController.cs'. Esto es porque el método 'Post' dentro de 'MessageController.cs' es responsable de recibir cualquier mensaje del usuario e invoca el diálogo raíz.
Así que cuando el usuario escriba el código de verificación, el bot seguirá interceptando ese mensaje en el método de publicación al igual que la información del perfil del usuario. Por lo tanto, necesitamos una manera de decirle al bot qué acción correcta hacer a continuación. Si observas detenidamente el método BuildForm en 'UserProfile.cs', te darás cuenta de que estamos estableciendo un bool ProfileComplete a true al finalizar.
.OnCompletion(async (context, UserProfile) => {
context.PrivateConversationData.SetValue<bool>("ProfileComplete", true);Lo que ocurre es que cada vez que el usuario teclea algo, comprobamos si ProfileComplete es verdadero o no. Si el perfil está completo entonces se asume que el usuario ha introducido el código de verificación y se procede a comprobar si ese código es válido; en caso contrario se sigue rellenando el perfil en el diálogo raíz.
StateClient sc = activity.GetStateClient();
BotData userData = sc.BotState.GetPrivateConversationData(
activity.ChannelId, activity.Conversation.Id, activity.From.Id);
var boolProfileComplete = userData.GetProperty<bool>("ProfileComplete");
if (!boolProfileComplete)
{
await Conversation.SendAsync(activity, () => MakeRootDialog());
}
else
{
ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
Activity replyMessage = activity.CreateReply(GetVerify().CheckVerificationCode(activity.Text));
await connector.Conversations.ReplyToActivityAsync(replyMessage);
} En pocas palabras
El objetivo de esta demostración es guiarle a través de cómo agregar 2FA a sus aplicaciones de Microsoft Bot utilizando Nexmo Verify API en el registro.
Hemos creado un formulario de perfil de usuario y, a continuación, enviamos un código de verificación al número de teléfono facilitado por el usuario. Una vez que el usuario introduzca el código enviado, lo verificaremos. Echa un vistazo a nuestro blog para ver más ejemplos y escenarios sobre cómo utilizar las API Nexmo con Microsoft Bot Framework.
Compartir:
Rabeb fue defensora de los desarrolladores en Nexmo, centrándose en las API de comunicación en la nube y ayudando a los desarrolladores a obtener la mejor experiencia posible al crear sus aplicaciones. Además de escribir código para ganarse la vida, Rabeb aboga por atraer a más mujeres y minorías a la tecnología, de ahí su participación en Women Who Code y en diferentes comunidades tecnológicas. Dirige la red Women Who Code en Bristol.
