usuario seguridad renovar necesitan microsoft las credenciales contraseña autenticacion actualizar c# .net authentication http-basic-authentication

c# - renovar - seguridad de windows microsoft outlook credenciales



¿Cómo puedo recuperar las credenciales de Autenticación Básica desde el encabezado? (2)

De mi blog:

Esto explicará en detalle cómo funciona todo esto:

Paso 1 - Entender la autenticación básica

Siempre que use Basic Authentication, se agrega un encabezado a HTTP Request y se verá similar a esto:

Autorización: QWxhZGRpbjpvcGVuIHNlc2FtZQ == básico

Fuente: http://en.wikipedia.org/wiki/Basic_access_authentication

"QWxhZGRpbjpvcGVuIHNlc2FtZQ ==" es solo "nombre de usuario: contraseña" codificada en Base64 ( http://en.wikipedia.org/wiki/Base64 ). Para acceder a los encabezados y otras propiedades HTTP en .NET (C #), debe tener acceso al contexto HTTP actual:

HttpContext httpContext = HttpContext.Current;

Esto lo puede encontrar en el espacio de nombres System.Web.

Paso 2: obtener el encabezado

El encabezado de autorización no es el único en el HttpContext. Para acceder al encabezado, necesitamos obtenerlo de la solicitud.

string authHeader = this.httpContext.Request.Headers["Authorization"];

Si depura el código, verá que el contenido de ese encabezado es similar a este:

Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ ==

Paso 3 - Verificando el encabezado

Ya ha extraído el encabezado, ahora hay varias cosas que debe hacer:

  1. Verifique que el encabezado no sea nulo
  2. Verifique que el mecanismo de Autorización / Autenticación sea de hecho "Básico"

Al igual que:

if (authHeader != null && authHeader.StartsWith("Basic")) { //Extract credentials } else { //Handle what happens if that isn''t the case throw new Exception("The authorization header is either empty or isn''t Basic."); }

Ahora tiene que verificar que tiene algo de lo que extraer datos.

Paso 4 - Extrayendo credenciales

Eliminando la subcadena "Básica"

Ahora puede intentar obtener los valores de nombre de usuario y contraseña. En primer lugar, debes deshacerte de la subcadena "Básica". Puedes hacerlo así:

string encodedUsernamePassword = authHeader.Substring("Basic ".Length).Trim();

Vea los siguientes enlaces para más detalles:

  1. http://msdn.microsoft.com/en-us/library/system.string.substring(v=vs.110).aspx
  2. http://msdn.microsoft.com/en-us/library/t97s7bs3(v=vs.110).aspx

Decodificación Base64

Ahora tenemos que decodificar desde Base64 a la cadena:

//the coding should be iso or you could use ASCII and UTF-8 decoder Encoding encoding = Encoding.GetEncoding("iso-8859-1"); string usernamePassword = encoding.GetString(Convert.FromBase64String(encodedUsernamePassword));

Ahora el nombre de usuario y la contraseña estarán en este formato:

username:password

División de nombre de usuario: contraseña

Para obtener un nombre de usuario y contraseña, simplemente podemos obtener el índice del ":"

int seperatorIndex = usernamePassword.IndexOf('':''); username = usernamePassword.Substring(0, seperatorIndex); password = usernamePassword.Substring(seperatorIndex + 1);

Ahora puede usar estos datos para probar. ¡Buena suerte!

PD: el código final puede verse así:

HttpContext httpContext = HttpContext.Current; string authHeader = this.httpContext.Request.Headers["Authorization"]; if (authHeader != null && authHeader.StartsWith("Basic")) { string encodedUsernamePassword = authHeader.Substring("Basic ".Length).Trim(); Encoding encoding = Encoding.GetEncoding("iso-8859-1"); string usernamePassword = encoding.GetString(Convert.FromBase64String(encodedUsernamePassword)); int seperatorIndex = usernamePassword.IndexOf('':''); var username = usernamePassword.Substring(0, seperatorIndex); var password = usernamePassword.Substring(seperatorIndex + 1); } else { //Handle what happens if that isn''t the case throw new Exception("The authorization header is either empty or isn''t Basic."); }

Estoy tratando de escribir algunas pruebas simples Mecanismo de autenticación de usuario que utiliza la Autenticación básica. ¿Cómo puedo recuperar las credenciales del encabezado?

string authorizationHeader = this.HttpContext.Request.Headers["Authorization"];

¿A donde voy desde aqui? Hay varios tutoriales, pero soy nuevo en .NET y la autenticación, ¿podría explicar en su respuesta exactamente paso a paso qué y por qué está haciendo?


Respuesta impresionante de @DawidO.

Si solo buscas extraer los auth creds básicos y confiar en .NET magic dado que tienes HttpContext, esto también funcionará:

public static void StartListener() { using (var hl = new HttpListener()) { hl.Prefixes.Add("http://+:8008/"); hl.AuthenticationSchemes = AuthenticationSchemes.Basic; hl.Start(); Console.WriteLine("Listening..."); while (true) { var hlc = hl.GetContext(); var hlbi = (HttpListenerBasicIdentity)hlc.User.Identity; Console.WriteLine(hlbi.Name); Console.WriteLine(hlbi.Password); //TODO: validater user //TODO: take action } } }