¿Cómo uso la solicitud HTTP de autenticación Kerberos?Hola,
¿Alguien sabe si la autenticación Kerberos se puede utilizar con el método de solicitud HTTP de jmp? Tengo una API a la que me gustaría conectarme usando este método de autenticación.¿Cuáles son los diferentes métodos de autenticación que se pueden utilizar? ¿Hay algún objeto cURL en JMP ( https://curl.haxx.se/ )? Sería bueno que pudieras dar un ejemplo, si estuviera disponible. Gracias de antemano.
Aquí hay un ejemplo de una solicitud.
request_headers = AssociativeArray();
request_headers["Authorization"] = "";//Kerberos example
request = New HTTP Request(
URL( url ), // the restAPI endpoint
Method( "Get" ),
Headers(request_headers),
Query String( // define key pairs
[["count" => limit]] // JSL associative array
)
);
Re: ¿Cómo uso la solicitud HTTP de autenticación Kerberos?¡Gracias!
Re: ¿Cómo uso la solicitud HTTP de autenticación Kerberos?@Chris_Rodrigues , Por favor, acepte mis disculpas. Me aseguraré de que esta información se agregue a la documentación de JMP 16.1.
Re: ¿Cómo uso la solicitud HTTP de autenticación Kerberos?Hola @Chris_Rodrigues ,
Sí, podemos y debemos hacerlo mejor con nuestra documentación. Si encuentra otros ejemplos que cree que están incompletos o que podrían ser más detallados, no dude en enviar un ticket con apoyo técnico .
@sheila_loring ¿Puede echar un vistazo a este ejemplo para asegurarse de que se actualice en una versión futura de la documentación?
salud,
estan
Re: ¿Cómo uso la solicitud HTTP de autenticación Kerberos?@stan_koprowski gracias, esto también resolvió mi problema.Sin embargo, tengo una pregunta de seguimiento.
¿Por qué tantas cosas como esta no están documentadas, de modo que requieren búsquedas en foros para encontrar la solución?Especialmente en este caso, donde la solución fue increíblemente sencilla:
Password(":") //for Kerberos authenticationEsto podría colocarse fácilmente en la Ayuda de JMP en "Ejemplos de solicitudes HTTP" y luego personas como yo y @CAPEGA No tendría que buscar la respuesta en los hilos de discusión y, si aún no está allí, intente hacer preguntas muy específicas y esperar una respuesta.
Además, no parece útil sugerir el uso de métodos de autenticación completamente diferentes en el servidor, cuando claramente la persona que hace la pregunta está intentando acceder al servidor por sí mismo, no configurar un servidor para que otros accedan, o tener autoridad sobre qué tipo de Se utiliza autenticación.En este caso, fueron necesarias varias rondas de ida y vuelta durante varias semanas antes de que se diera una respuesta muy simple.Me alegra que alguien más haya pasado por todo esto para que yo no tenga que hacerlo.
Sólo quería expresar un poquito de frustración, eso es todo.Agradezco la ayuda.
Re: ¿Cómo uso la solicitud HTTP de autenticación Kerberos?Si no tienes que iniciar sesión en un reino, entonces esto:
//kerberos
url = "http://my_server_with_kerberos/some_endpoint";
request = New HTTP Request(
Method("GET"),
URL(url),
Password(":")
);
request << Send;
Deberías hacerlo. Tenga en cuenta la contraseña ( ":" );
Si necesita iniciar sesión en el ámbito de su empresa, entonces haga algo como esto (esto hace un inicio de sesión basado en formulario):
//login to company realm
url = "https://corporate_realm/login";
values = AssociativeArray();
values["IDToken1"] = "";
values["IDToken2"] = "";
request = New HTTP Request(
Method("POST"),
URL(url),
QueryString([
"realm" => "/my_realm"
]),
Form(Fields(values)),
);
request << Send;
puede ser usado.
Sin embargo, el inicio de sesión en ámbitos corporativos generalmente es específico de la empresa.
Re: ¿Cómo uso la solicitud HTTP de autenticación Kerberos?Hola @CAPEGA ,
Me perdí este... Perdón por el largo retraso en responder a esta publicación.
Para utilizar Kerberos para negociar con la solicitud http, puede utilizar lo siguiente:
Contraseña(":")
// use webids for retrieving tags; get tag for particular webid
For( i = 1, i<=NItems(webids), i++,
url_str = srvrname || "/streams/" || webids[i] || "/value";
strms = New HTTP Request(
URL( url_str ),
Method( "get" ),
Headers( {"Accept: application/json"} ),
Password(":") //for Kerberos authentication
) << Send;
dt_strms = json to data table( strms );
//convert timestamp to JMP date format
dt_strms << New Column( "Time",
Numeric,
Format( "y/m/d h:m:s", 22, 0 ),
Input Format( "y/m/d h:m:s", 0 ),
Formula(
Try(
delims = "-:TZ";
rowWords = Words( :Timestamp, delims );
{};
YearChoice = 1;
{};
{};
Date MDY( Num( Uppercase( rowWords[2] ) ), Num( rowWords[3] ), Num( rowWords[1] ) + 0 ) + Num( rowWords[6] )
+Num( rowWords[5] ) * 60 + (Num( rowWords[4] ) + 0) * 3600 + If( Num( rowWords[4] ) < 12,
0,
0
);
)
)
);
dt_strms = json to data table( strms, Invisible ); //hide table
//concatenate into a single table
If( i == 1, dt_tag_rslts = New Table( "Stream Results", Invisible );
,
dt_tag_rslts << Concatenate( Data Table( dt_strms), "Append to first table" );
Close( dt_strms, "No Save" );
);
);Re: ¿Cómo uso la solicitud HTTP de autenticación Kerberos?Hola @stan_koprowski ,
Gracias por su sugerencia, esos mecanismos tal vez sean muy comunes en Internet (pública), pero dentro de la red (privada) de una empresa, no es tan obvio.Entonces, para volver a la pregunta original: ¿existe una opción del objeto de solicitud HTTP JMP que sea compatible con el mecanismo de autenticación de Windows que existe actualmente en todos nuestros servidores PI?
Salud,
Re: ¿Cómo uso la solicitud HTTP de autenticación Kerberos?Hola @CAPEGA
Gracias por la informacion adicional. Si bien Kerberos es una opción, como usted indicó, como un medio válido para establecer la autenticación, en mi opinión, se prefieren las opciones más nuevas y modernas que usan SSL para autenticar y, a menudo, se las considera el "estándar actual". Con SSL estás afirmando por ti mismo ( a través de clave pública/privada), mientras que, en Kerberos, incluso con criptografía de clave pública (PKC) para las claves de sesión, el servidor (de terceros) sigue haciendo la confirmación por usted. Además, otro beneficio es que SSL también cifra la transferencia de datos.
Si bien Kerberos es una forma válida de establecer la autenticación, recomendaría una opción diferente.Según lo que leí usando el enlace proporcionado anteriormente, existen algunas configuraciones para la API web Pi que permitirían autenticación de portador usando OpenID connect (basado en OAuth 2.0). La ventaja aquí es que tiene un inicio de sesión para varios sitios. El administrador de PI deberá configurar estos cambios. Esta función está disponible a partir de la versión PI Web API 2017.
La mayor parte de la documentación de OSI Pi no es accesible al público en general, por lo que no puedo crear un ejemplo específico. Estaría encantado de trabajar con usted directamente si así lo desea. Envíeme un mensaje privado y podremos conectarnos si desea seguir esta opción.
Sin embargo, aquí hay un ejemplo del uso de OpenID para acceder a su imagen de perfil de Google (si tiene una cuenta de Google).
Names Default To Here( 1 );
/*
Note: the "code" parameter is set automatically after the redirect occurs
*/
auth_url = "https://accounts.google.com/o/oauth2/v2/auth";
token_url = "https://www.googleapis.com/oauth2/v4/token";
redirect_url = "http://localhost/myapp/";
client_id = "581786658708-elflankerquo1a6vsckabbhn25hclla0.apps.googleusercontent.com";
client_secret = "3f6NggMbPtrmIBpgx-MK2xXK";
scope = "openid profile";
auth_fields = [=> ];
token_fields = [=> ];
oauth2 = New OAuth2();
oauth2 << Grant Type( "Authorization Code" );
oauth2 << Auth URL( auth_url );
oauth2 << Token URL( token_url );
oauth2 << Redirect URL( redirect_url );
auth_fields["scope"] = scope;
auth_fields["client_id"] = client_id;
token_fields["client_secret"] = client_secret;
oauth2 << Auth Fields( auth_fields );
oauth2 << Token Fields( token_fields );
auth_header = oauth2 << Get Auth Header();
request = New HTTP Request( URL( "https://www.googleapis.com/oauth2/v3/userinfo" ), Headers( {auth_header} ), Method( "GET" ) );
data = request << Send;
If( !Is Empty( data ),
json_jsl = Parse JSON( data );
If( json_jsl << Contains( "picture" ),
picture_url = json_jsl["picture"];
New Window( "Example", Picture Box( Open( picture_url ) ) );
,
Show( data )
);
);
salud,
estan
Re: ¿Cómo uso la solicitud HTTP de autenticación Kerberos?Hola @stan_koprowski ,
Gracias por tu ayuda. Vea a continuación las respuestas a sus preguntas:
> ¿Qué host estás usando, es decir, estás usando Mac o Windows?
El servidor OsiSoft que ejecuta PI Web API.
El servidor se ejecuta en Windows.
> ¿Cuál es el punto final al que intenta llegar?
Cualquier punto final de la API web de OsiSoft, el primero a probar es:
> ¿Qué has probado?
Aquí una versión muy reducida del código:
url = "https://piserver123.example.com/piwebapi";
request = New HTTPRequest(
URL( url ),
Method( "Get" ),
Query String(
[["selectedFields" => "Items"]]
),
Secure(0)
);
json = request << Send();
jsl_json = Parse JSON( json );
> ¿Te sale algún error?
La API devuelve "Se ha denegado la autorización para esta solicitud". En JMP el error es: "HTTP/1.1 401 no autorizado"
Cuál es la respuesta esperada si no se reconoce correctamente la identidad del usuario que ejecuta la solicitud.
> ¿Estás utilizando un servidor proxy?
No.
¡Gracias!
Re: ¿Cómo uso la solicitud HTTP de autenticación Kerberos?Hola @CAPEGA ,
Desafortunadamente, necesitaremos información adicional aquí para ayudarlo más.
¿Qué host estás usando, es decir, estás usando Mac o Windows?
¿Cuál es el punto final al que intenta llegar?
¿Qué has probado?
tuviste algun error?
¿Estás utilizando un servidor proxy?
salud,
estan
Re: ¿Cómo uso la solicitud HTTP de autenticación Kerberos?Hola a todos,
Por contexto, estoy intentando conectarme a un servidor OsiSoft para el cual se necesita autenticación segura.
Solo para actualizar y aclarar, sé que el método de autenticación debe estar en el método de obtención HTTP, sin embargo, todavía me falta cómo especificar el parámetro para usar otros métodos de autenticación. Entiendo que hay algo similar a curl en el método de solicitud http de jmp. ¿Alguien puede explicarme cómo podemos especificar algo similar para la autenticación como el siguiente código PHP usando curl? Gracias.
$url = "algunaurl.com ";
$ch = curl_init ($url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, verdadero);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, falso);
curl_setopt($ch, CURLOPT_GSSAPI_DELEGATION, CURLGSSAPI_DELEGATION_FLAG);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_GSSNEGOTIATE);
curl_setopt($ch, CURLOPT_USERPWD, ":");
$resultado = curl_exec ($ch);
$json_o = json_decode ($resultado);
var_dump($json_o);
Re: ¿Cómo uso la solicitud HTTP de autenticación Kerberos?En JMP 17, ahora hay:
