6

Estoy en asp.net web API. En el método de inicio de sesión verifico el usuario/contraseña contra el PP y si no coinciden, vuelvo 401 código de estado junto con invalid user or password method comoEnviando mensaje con 401: Asp.net Web-api

var content = new StringContent("Invalid user name or password"); 
var message = new HttpResponseMessage(HttpStatusCode.Unauthorized); 
message.Content = content; 
throw new HttpResponseException(message); 

Pero API parece ignorar mi mensaje y devuelva algo de HTML como

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> 
<title>401 - Unauthorized: Access is denied due to invalid credentials.</title> 
<style type="text/css"> 
<!-- 
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;} 
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;} 
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF; 
background-color:#555555;} 
#content{margin:0 0 0 2%;position:relative;} 
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;} 
--> 
</style> 
</head> 
<body> 
<div id="header"><h1>Server Error</h1></div> 
<div id="content"> 
<div class="content-container"><fieldset> 
    <h2>401 - Unauthorized: Access is denied due to invalid credentials.</h2> 
    <h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3> 
</fieldset></div> 
</div> 
</body> 
</html> 

¿Por qué es eso? ¿Cómo puedo anular esto?

Respuesta

1

Una posible causa de esta respuesta es que el sitio web de IIS está configurado para permitir la autenticación de formularios. Mire este older but still valid post al configurar IIS para deshabilitar la autenticación de formularios para la API web.

+0

Si ese fuera el caso, ¿no se redirigiría a la página de inicio de sesión a pesar de arrojar html personalizado para 401? –

+0

Tenga en cuenta que el código de respuesta es correcto 401 y no está redirigiendo a la página de inicio de sesión. El problema es que devuelve html de su propia elección. –

1

Creo que la respuesta que recibe es de IIS y no de Web Api. Si desea manejar el proceso de autenticación dentro de su API, debe decirle a IIS que se permite el acceso anónimo para que no se interrumpa.

Además, cuando devuelve un 401 DEBE devolver un encabezado www-authenticate (consulte http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2). Esto le dice al cliente qué tipo de autenticación está permitida.

Cuestiones relacionadas