Come si utilizza la richiesta HTTP di autenticazione KerberosCIAO,
Qualcuno sa se l'autenticazione Kerberos può essere utilizzata con il metodo di richiesta HTTP da jmp? Ho un'API che vorrei connettere utilizzando questo metodo di autenticazione.Quali sono i diversi metodi di autenticazione che possono essere utilizzati? Esiste qualche oggetto cURL in JMP ( https://curl.haxx.se/ )? Sarebbe carino se potessi fornire un esempio, se disponibile. Grazie in anticipo.
Ecco un esempio di richiesta
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
)
);
Ri: Come utilizzo la richiesta HTTP di autenticazione KerberosGrazie!
Ri: Come utilizzo la richiesta HTTP di autenticazione Kerberos@Chris_Rodrigues , per favore accetta le mie scuse. Mi assicurerò che queste informazioni vengano aggiunte alla documentazione di JMP 16.1.
Ri: Come utilizzo la richiesta HTTP di autenticazione KerberosCIAO @Chris_Rodrigues ,
Sì, possiamo e dobbiamo fare meglio con la nostra documentazione. Se trovi altri esempi che ritieni incompleti o che potrebbero essere più dettagliati, non esitare a inviare un ticket supporto tecnico .
@sheila_loring puoi dare un'occhiata a questo esempio per essere sicuro che venga aggiornato in una versione futura della documentazione.
saluti,
Stan
Ri: Come utilizzo la richiesta HTTP di autenticazione Kerberos@stan_koprowski grazie, questo ha risolto anche il mio problema.Ho una domanda di follow-up, però.
Perché così tante cose come queste non sono documentate, tanto da richiedere ricerche nei forum per trovare la soluzione?Soprattutto in questo caso, dove la soluzione era così incredibilmente semplice:
Password(":") //for Kerberos authenticationQuesto potrebbe essere facilmente inserito nella Guida di JMP sotto "Esempi di richieste HTTP" e quindi persone come me e @CAPEGA non dovresti cercare la risposta nei thread di discussione e, se non è già lì, prova a porre domande molto specifiche e attendi una risposta.
Inoltre, non sembra utile suggerire di utilizzare metodi di autenticazione completamente diversi sul server, quando chiaramente la persona che pone la domanda sta tentando di accedere al server da solo, non configura un server affinché altri possano accedervi o ha autorità su quale tipo di viene utilizzata l'autenticazione.In questo caso ci sono voluti più cicli di avanti e indietro per diverse settimane prima che fosse fornita una risposta molto semplice.Sono felice che qualcun altro abbia vissuto tutto questo, quindi non ho dovuto farlo io.
Volevo solo esprimere un po' di frustrazione, tutto qui.Apprezzo l'aiuto.
Ri: Come utilizzo la richiesta HTTP di autenticazione KerberosSe non devi accedere a un reame, allora questo:
//kerberos
url = "http://my_server_with_kerberos/some_endpoint";
request = New HTTP Request(
Method("GET"),
URL(url),
Password(":")
);
request << Send;
Dovrebbe farlo. Prendi nota della password ( ":" );
Se hai bisogno di accedere all'ambito della tua azienda, allora qualcosa del genere (esegue un accesso basato su moduli):
//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;
può essere utilizzata.
Tuttavia, l'accesso agli ambiti aziendali è generalmente specifico dell'azienda.
Ri: Come utilizzo la richiesta HTTP di autenticazione KerberosCIAO @CAPEGA ,
Mi sono persa questa...scusa per il lungo ritardo nel rispondere a questo post.
Per utilizzare Kerberos per negoziare con la richiesta http è possibile utilizzare quanto segue:
Parola d'ordine(":")
// 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" );
);
);Ri: Come utilizzo la richiesta HTTP di autenticazione KerberosCIAO @stan_koprowski ,
Grazie per il tuo suggerimento, questi meccanismi sono forse molto comuni su Internet (pubblico) ma all'interno di una rete aziendale (privata) non è così ovvio.Quindi, per tornare alla domanda iniziale: esiste un'opzione dell'oggetto di richiesta HTTP JMP che sarà compatibile con il meccanismo di autenticazione di Windows utilizzato oggi con tutti i nostri server PI?
Saluti,
Ri: Come utilizzo la richiesta HTTP di autenticazione KerberosCIAO @CAPEGA
Grazie per le informazioni aggiuntive. Sebbene Kerberos sia un'opzione, come hai affermato, come mezzo valido per stabilire l'autenticazione, a mio parere le opzioni più nuove e moderne che utilizzano SSL per l'autenticazione sono preferite e sono spesso considerate lo "standard attuale". Con SSL stai affermando per te stesso ( attraverso chiave pubblica/privata), mentre in Kerberos, anche con la crittografia a chiave pubblica (PKC) per le chiavi di sessione, il server (di terze parti) sta comunque effettuando la conferma per te. Inoltre, un altro vantaggio è che SSL crittografa anche il trasferimento dei dati.
Sebbene Kerberos sia un modo valido per stabilire l'autenticazione, consiglierei un'opzione diversa.In base a ciò che ho letto utilizzando il collegamento fornito in precedenza, ci sono alcune impostazioni per l'API Web Pi che lo consentirebbero autenticazione del portatore utilizzando OpenID Connect (basato su OAuth 2.0). Il vantaggio qui è che hai un accesso per più siti. L'amministratore PI dovrà configurare queste modifiche. Questa funzionalità è disponibile a partire dalla versione PI Web API 2017.
La maggior parte della documentazione per OSI Pi non è accessibile al grande pubblico, quindi non posso creare un esempio specifico. Sarei felice di lavorare direttamente con te se ne hai voglia. Per favore mandami un messaggio privato e possiamo connetterci se desideri perseguire questa opzione.
Tuttavia, ecco un esempio di utilizzo di OpenID per accedere alla tua immagine del profilo Google (se disponi di un account 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 )
);
);
saluti,
Stan
Ri: Come utilizzo la richiesta HTTP di autenticazione KerberosCIAO @stan_koprowski ,
Grazie per il tuo aiuto. Vedi sotto le risposte alle tue domande:
> Quale host stai utilizzando, ovvero stai utilizzando un Mac o Windows?
Il server OsiSoft che esegue l'API Web PI.
Il server è in esecuzione su Windows.
> Qual è l'endpoint che stai cercando di raggiungere?
Qualsiasi endpoint dell'API Web OsiSoft, il primo da provare è:
> Cosa hai provato?
Ecco una versione molto ridotta del codice:
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 );
> Ricevi qualche errore?
L'API restituisce "L'autorizzazione è stata negata per questa richiesta.". In JMP l'errore è: "HTTP/1.1 401 Non autorizzato"
Qual è la risposta prevista se l'identità dell'utente che esegue la richiesta non viene riconosciuta correttamente.
> Stai utilizzando un server proxy?
NO.
Grazie!
Ri: Come utilizzo la richiesta HTTP di autenticazione KerberosCIAO @CAPEGA ,
Sfortunatamente, avremo bisogno di alcune informazioni aggiuntive qui per assisterti ulteriormente.
Quale host stai utilizzando, ovvero stai utilizzando un Mac o Windows?
Qual è l'endpoint che stai cercando di raggiungere?
Cosa hai provato?
Ricevi qualche errore?
Stai utilizzando un server proxy?
saluti,
Stan
Ri: Come utilizzo la richiesta HTTP di autenticazione KerberosCiao a tutti,
Per contesto, sto cercando di connettermi a un server OsiSoft per il quale è necessaria l'autenticazione sicura.
Giusto per aggiornare e chiarire, so che il metodo di autenticazione dovrebbe essere nel metodo get HTTP, tuttavia non riesco ancora a specificare il parametro per l'utilizzo di altri metodi di autenticazione. Capisco che esiste qualcosa di simile a curl nel metodo di richiesta http jmp. Qualcuno può spiegarmi come possiamo specificare qualcosa di simile per l'autenticazione come il seguente codice PHP utilizzando curl? Grazie.
$url = "qualcheurl.com ";
$ch = curl_init ($url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_GSSAPI_DELEGATION, CURLGSSAPI_DELEGATION_FLAG);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_GSSNEGOTIATE);
curl_setopt($canale, CURLOPT_USERPWD, ":");
$risultato = curl_exec ($canale);
$json_o = json_decode ($risultato);
var_dump($json_o);
Ri: Come utilizzo la richiesta HTTP di autenticazione KerberosIn JMP 17 ora sono presenti:
