miércoles, 24 de septiembre de 2014

ACS90014 error using Active Directory Authentication Library V2

Intentando autenticar una aplicación de consola usando ADAL v2, al invocar al método AcquireToken pasando el clientId (sin clientSecret), y PromptBehavior.Always, luego del ingreso de las credenciales me devolvía el error:
ACS90014: The request body must contain the following parameter: 'client_secret or client_assertion'
Luego de buscar un rato pude encontrar que la causa era que el Application que habia creado en el Azure Active Directory era del tipo WEB APPLICATION AND/OR WEB AP cuando lo correcto, para el caso que me interesaba, era crearla del tipo NATIVE CLIENT APPLICATION.

Parte del código utilizado:

    string clientId =       ConfigurationManager.AppSettings["ClientId"];
    string clientSecret =   ConfigurationManager.AppSettings["ClientSecret"];
    string resource =       ConfigurationManager.AppSettings["ServiceRealm"];
    string authenticationUri =
                            ConfigurationManager.AppSettings["AuthBaseUri"] +
                            ConfigurationManager.AppSettings["Tenant"];

    AuthenticationContext authenticationContext =
                            new AuthenticationContext(authenticationUri, false);

    string token;
    var redirectUri = new Uri(ConfigurationManager.AppSettings["RedirectUri"]);
    try
    {
        AuthenticationResult authenticationResult = 
            authenticationContext.AcquireToken(resource, clientId, redirectUri, PromptBehavior.Always);
        token = authenticationResult.AccessToken;
        Console.WriteLine("\n Welcome " + authenticationResult.UserInfo.GivenName + " " + authenticationResult.UserInfo.FamilyName);
    }
    catch (AuthenticationException ex)
    {
        string message = ex.Message;
        if (ex.InnerException != null)
            message += "InnerException : " + ex.InnerException.Message;
        Console.WriteLine(message);
        Console.ReadKey();
        return;
    }

Basado en la publicación de Vittorio BertocciActive Directory Authentication Library (ADAL) v2 for .NET/Windows Store/Windows Phone–General Availability!