Search code examples
c#oauthazure-active-directorybotframeworkbots

how to get the user's Email ID after AAD login using bot framework


I'm working on a bot using bot framework. With active directory authentication I managed to get the username . Now I want to get the phone number and logged in user Email ID after authenticated using active directory ?

Below is the code I'm working with.

Authentication

 AuthenticationOptions options = new AuthenticationOptions()
                {
                    UseMagicNumber = false,
                    Authority = Convert.ToString(ConfigurationManager.AppSettings["aad:Authority"]),
                    ClientId = Convert.ToString(ConfigurationManager.AppSettings["aad:ClientId"]),
                    ClientSecret = Convert.ToString(ConfigurationManager.AppSettings["aad:ClientSecret"]),
                    ResourceId = Convert.ToString(ConfigurationManager.AppSettings["aad:ResourceId"]),
                    RedirectUrl = Convert.ToString(ConfigurationManager.AppSettings["aad:Callback"])
                };
                await context.Forward(new AuthDialog(new ADALAuthProvider(), options), ResumeAfterLogin, message, context.CancellationToken);

Extracting the data

 private async Task ResumeAfterLogin(IDialogContext authContext, IAwaitable<AuthResult> authResult)
    {
        string tokenstring = string.Empty;
        string userName = string.Empty;
        var resultToken = await authResult;
        string email = string.Empty;

        try
        {
            tokenstring = resultToken.AccessToken;
            userName = resultToken.UserName;
            MyGlobalVariables.EmailID = "";
            MyGlobalVariables.username = userName;

            if (null != tokenstring && string.Empty != tokenstring)
            {
                authContext.UserData.SetValue<string>("AccessToken", tokenstring);
                authContext.UserData.SetValue<string>("userName", userName);
                await authContext.PostAsync($"*info: you are logged in as {userName}*");
                authContext.Call(new RootDialog(), this.ResumeAfterOptionDialog);
            }
        }
        catch (Exception ex)
        {
            authContext.Wait(MessageReceivedAsync);
            throw ex;
        }
        finally
        {

        }
    }

Solution

  • You can get phone numbers and emails of logged in users by accessing the Microsoft AAD Graph API. For example:

    public async Task<User> GetMe()
        {
            var graphClient = GetAuthenticatedClient();
            var me = await graphClient.Me.Request().GetAsync();
            return me;
        }
    

    A full sample can be found here.