Estoy tratando de escribir un guión simple que solicita algunos datos de una herramienta en una red interna. Aquí está el código:

#!/usr/bin/node

var https = require('https');
var fs = require('fs');

var options = {
  host: '<link>',
  port: 443,
  path: '<path>',
  auth: 'username:password',
  ca: [fs.readFileSync('../.cert/newca.crt')]
};

https.get(options, function(res) {
  console.log("Got response: " + res.statusCode);
  res.on('data', function (d) {
    console.log('BODY: ' + d);
  });
}).on('error', function(e) {
  console.log("Got error: " + e.message);
});

Ahora la pregunta es, ¿cómo puedo utilizar un vale de Kerberos para autenticar en lugar de suministro de mis credenciales en auth: en texto plano?

OriginalEl autor mart1n | 2013-11-20

3 Comentarios

  1. 3

    De Pablo Scheltema la respuesta, usted necesita para obtener ticketdata de la profundidad de sistema operativo. Usted (o un módulo en nombre de usted) debe utilizar GSS-API para tener ticketdata generado por Active Directory para usted.

    Dicho mecanismo está presente en Chrome, pero parece que no está incluido en Node.js (sólo el motor de javascript de Chrome), por lo que usted puede necesitar agregar un módulo, por ejemplo:

    Para instalar/compilar tal módulo usted puede necesitar para tener Visual Studio.


    Para configurar el entorno,
    – En todos los equipos debe tener un puerto tcp y udp habilitado en los puertos 88 (Kerberos) y 53 (dns).
    – En Active Directory de Windows Server debe estar en ejecución (ldap, dns, kdc)
    – En la página https://www.npmjs.org/package/passport-kerberos ellos usan el término REINO. Es un nombre de dominio, escrito en mayúsculas.

    Entiendo que esto se puede hacer con un módulo de pasaporte-kerberos, pero ¿cómo es que el módulo de hacer entonces? No puedo eludir el módulo y simplemente aplicar la misma lógica, manteniendo la secuencia de comandos simple sin ningún tipo de dependencias?
    La lógica: el Uso de GSS-API/funciones SSPI para formar una solicitud a un controlador de dominio. Esta solicitud debe contener la autenticación de usuario info (tengo de Kerberos caché, altamente protegidos por el sistema operativo), y la URL traducido a un userPrincipal forma (usando dns). Si Active Directory tiene userPrincipal en LDAP autenticación y los datos son correctos, se genera un ticket de Kerberos. Esta entrada debe ser envuelto en SPNEGO, Base64encoded y esta es la «ticketdata» en Pablo Scheltema la respuesta. Normalmente esto se hace mediante el navegador web para nosotros. Cuando no está presente, en node.js un módulo es necesario.
    Ok, creo que no hay realmente una manera de hacer esto de manera rápida y fácil y que habrá algunos módulos de las dependencias. Gracias por tu respuesta!
    Después de haber visto a Kerberos un par de meses atrás, definitivamente habrá algún módulo dependencias a menos que quieran profundizar en el código fuente de passport-kerberos (o incluso el Cromo código fuente) y volver a implementarlo. Probablemente voy a hacer esto por mí mismo en algún momento (siempre que este proyecto en particular se eleva a la parte superior de la pila), como el único de Kerberos módulos vi en npm sólo permite verificar las credenciales contra el directorio activo (básicamente, permitiendo el uso de Kerberos en un contexto del servidor), que no permiten realmente negociar con un servidor remoto como un cliente
    Nodo-sspi módulo: npmjs.com/package/node-sspi

    OriginalEl autor greenmarker

  2. 6

    de http://docs.oracle.com/cd/E24191_01/common/tutorials/authn_kerberos_service.html

    Cliente Token de Ubicación para el Mensaje de los Estándares de Nivel: El de Kerberos
    Servicio de entradas puede ser enviado en la cabecera HTTP de Autorización o
    en el interior del propio mensaje, por ejemplo, dentro de un
    elemento. Alternativamente, puede ser contenida dentro de un mensaje
    atributo. Seleccione una de las siguientes opciones:

    así que en lugar de tu nombre de usuario:contraseña que proporcione el billete

    alternativamente, usted puede como se indica a continuación que la información contenida en el cuerpo del mensaje o como un atributo del mensaje

    var request = https.request(options, function(resource) {
      var chunks = [];
       resource.on('data', function (chunk) {
         chunks.push(chunk);
       });
       resource.on('end', function () {
         var data = chunks.join('');
         console.log(data);
       });
    }
    
    request.on('error',...)
    request.send('<body-with-ticket>');
    request.end();

    EDICIÓN:

    la «parte» fue mi ejemplo de dónde usar el billete, lo puso en un multiytype cuerpo y enviar que, alternativamente, utilizar el encabezado WWW-Authenticate enviar

    por ejemplo. añadir a las opciones de https.solicitud de

    options = {
        host: 'hostname',
        port: 443, 
        'WWW-Authenticate': 'Negotiate ' + ticketdata
    };

    de google tiene algunas diagramas de cómo funciona:
    https://developers.google.com/search-appliance/kb/secure/kerberos-diagram

    Agradezco su solución, incluso sé que podemos configurar de forma personalizada las cabeceras de la petición HTTP y enviar las credenciales de kerberos (precisamente necesitamos poner «WWW-Authenticate» para el ticket de kerberos. Pero el problema es conseguir que el contenido de KRB5CCNAME archivo (kerberos), este archivo contenido está cifrado.
    Básicamente necesito utilidad para leer el KRB5CCNAME archivo y establecer el encabezado de autenticación. Me gustaría escribir esta utilidad mí mismo, pero tienen muy poco conocimiento sobre Kerberos, le agradecería si pudiera arrojar algo de luz sobre!
    ¿Qué quieres decir con «que proporcione el billete». Sólo debo seleccione el archivo ticket como auth: 'ticket',. Podría usted por favor enviar el código?
    editado.
    Debo ser lento hoy, lo siento, ¿qué es ticketdata? Entiendo que desde el enlace de Google que es la representación del ticket de Kerberos en un hash (correcto?), pero ¿dónde puedo conseguir eso?

    OriginalEl autor Paul Scheltema

  3. 4

    He llegado a trabajar con «kerberos» módulo, versión 0.0.12. He creado un Gist con el ejemplo de trabajo:

    https://gist.github.com/dmansfield/c75817dcacc2393da0a7

    Básicamente, se utilizan tres métodos para obtener la «Autorización» datos de cabecera:

    • authGSSClientInit, que requiere el nombre del servicio, por ejemplo, [email protected]
    • authGSSClientStep, que requiere la existencia de una caché de credenciales (en Linux se esta haciendo «kinit» y lo pueden verificar con «klist»), y de hecho es la que te da el base64 cosas que usted necesita (sin el «Negociar» string)
    • authGSSClientClean, que libera toda la memoria asignada estructuras

    A continuación, crear una «Autorización» de cabecera (NO es WWW-Authenticate como se muestra arriba, que es lo que el servidor envía de vuelta) y se debe trabajar.

    Nota también: normalmente, los navegadores web solicitar un recurso, obtener un plan 401 de la espalda con un WWW-Authenticate: Negociar el encabezado en la respuesta, a continuación, vuelva a solicitar el recurso con el billete de los datos suministrados en la «Autorización» de cabecera. Este paso de baile que sucede para cada recurso. No estoy seguro de si esto significa algo o no.

    OriginalEl autor dmansfield

Dejar respuesta

Please enter your comment!
Please enter your name here