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 Bertocci: Active Directory Authentication Library (ADAL) v2 for .NET/Windows Store/Windows Phone–General Availability!