Wie verwende ich eine HTTP-Anfrage zur Kerberos-Authentifizierung?Hallo,
Weiß jemand, ob die Kerberos-Authentifizierung mit der HTTP-Anfragemethode von jmp verwendet werden kann? Ich habe eine API, die ich mit dieser Authentifizierungsmethode verbinden möchte.Welche verschiedenen Authentifizierungsmethoden können verwendet werden? Gibt es ein cURL-Objekt in JMP ( https://curl.haxx.se/ )? Es wäre schön, wenn Sie ein Beispiel angeben könnten, falls verfügbar. Vielen Dank im Voraus.
Hier ist ein Muster einer Anfrage
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
)
);
Betreff: Wie verwende ich eine HTTP-Anfrage zur Kerberos-Authentifizierung?Danke!
Betreff: Wie verwende ich eine HTTP-Anfrage zur Kerberos-Authentifizierung?@Chris_Rodrigues , bitte akzeptiere meine Entschuldigung. Ich werde sicherstellen, dass diese Informationen der JMP 16.1-Dokumentation hinzugefügt werden.
Betreff: Wie verwende ich eine HTTP-Anfrage zur Kerberos-Authentifizierung?Hallo @Chris_Rodrigues ,
Ja, wir können und sollten unsere Dokumentation verbessern. Wenn Sie auf andere Beispiele stoßen, die Ihrer Meinung nach unvollständig sind oder detaillierter sein könnten, können Sie gerne ein Ticket bei einreichen technische Unterstützung .
@sheila_loring Können Sie sich dieses Beispiel ansehen, um sicherzustellen, dass es in einer zukünftigen Version der Dokumentation aktualisiert wird?
Prost,
Stan
Betreff: Wie verwende ich eine HTTP-Anfrage zur Kerberos-Authentifizierung?@stan_koprowski Danke, das hat auch mein Problem gelöst.Ich habe jedoch eine Folgefrage.
Warum sind so viele Dinge wie diese nicht dokumentiert, sodass eine Suche im Forum erforderlich ist, um die Lösung zu finden?Besonders in diesem Fall, wo die Lösung so unglaublich einfach war:
Password(":") //for Kerberos authenticationDies könnte leicht in der JMP-Hilfe unter „Beispiele für HTTP-Anfragen“ platziert werden und dann Leute wie ich und @CAPEGA Sie müssten keine Diskussionsthreads nach der Antwort durchsuchen, und wenn sie noch nicht vorhanden ist, versuchen Sie, sehr spezifische Fragen zu stellen und auf eine Antwort zu warten.
Darüber hinaus scheint es nicht hilfreich zu sein, die Verwendung völlig unterschiedlicher Authentifizierungsmethoden auf dem Server vorzuschlagen, wenn die Person, die die Frage stellt, eindeutig versucht, selbst auf den Server zuzugreifen, und keinen Server für den Zugriff durch andere konfiguriert oder die Autorität darüber hat, auf welche Art davon zuzugreifen Authentifizierung verwendet wird.In diesem Fall dauerte es mehrere Wochen lang hin und her, bis die sehr einfache Antwort gegeben wurde.Ich bin froh, dass jemand anderes das alles durchgemacht hat, sodass ich es nicht tun musste.
Ich wollte hier nur ein wenig Frust zum Ausdruck bringen, das ist alles.Schätzen Sie die Hilfe.
Betreff: Wie verwende ich eine HTTP-Anfrage zur Kerberos-Authentifizierung?Wenn Sie sich nicht bei einem Realm anmelden müssen, dann Folgendes:
//kerberos
url = "http://my_server_with_kerberos/some_endpoint";
request = New HTTP Request(
Method("GET"),
URL(url),
Password(":")
);
request << Send;
Sollte es tun. Notieren Sie sich das Passwort( :: );
Wenn Sie sich im Bereich Ihres Unternehmens anmelden müssen, dann etwa so (dies führt zu einer formularbasierten Anmeldung):
//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;
kann verwendet werden.
Allerdings ist die Anmeldung in Unternehmensbereichen im Allgemeinen unternehmensspezifisch.
Betreff: Wie verwende ich eine HTTP-Anfrage zur Kerberos-Authentifizierung?Hallo @CAPEGA ,
Das habe ich verpasst... Entschuldigung für die lange Verzögerung bei der Beantwortung dieses Beitrags.
Um Kerberos zum Verhandeln mit HTTP-Anfragen zu verwenden, können Sie Folgendes verwenden:
Passwort(":")
// 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" );
);
);Betreff: Wie verwende ich eine HTTP-Anfrage zur Kerberos-Authentifizierung?Hallo @stan_koprowski ,
Vielen Dank für Ihren Vorschlag. Diese Mechanismen sind im (öffentlichen) Internet vielleicht sehr verbreitet, aber innerhalb eines Unternehmensnetzwerks (privat) ist das nicht so offensichtlich.Um auf die ursprüngliche Frage zurückzukommen: Gibt es eine Option des JMP-HTTP-Anforderungsobjekts, die mit dem Windows-Authentifizierungsmechanismus kompatibel ist, der heute bei allen unseren PI-Servern vorhanden ist?
Prost,
Betreff: Wie verwende ich eine HTTP-Anfrage zur Kerberos-Authentifizierung?Hallo @CAPEGA
Vielen Dank für die zusätzlichen Informationen. Während Kerberos, wie Sie angegeben haben, eine gültige Möglichkeit zur Authentifizierung darstellt, werden meiner Meinung nach neuere, modernere Optionen bevorzugt, die SSL zur Authentifizierung verwenden, und werden oft als „aktueller Standard“ angesehen. Mit SSL behaupten Sie selbst ( über öffentlicher/privater Schlüssel), wohingegen in Kerberos selbst bei Public-Key-Kryptografie (PKC) für Sitzungsschlüssel der Server (Drittanbieter) immer noch die Bestätigung für Sie übernimmt. Ein weiterer Vorteil besteht darin, dass SSL auch die Datenübertragung verschlüsselt.
Obwohl Kerberos eine gültige Methode zur Authentifizierung darstellt, würde ich eine andere Option empfehlen.Basierend auf dem, was ich über den zuvor bereitgestellten Link gelesen habe, gibt es einige Einstellungen für die Pi-Web-API, die dies ermöglichen würden Inhaberauthentifizierung unter Verwendung von OpenID Connect (OAuth 2.0-basiert). Der Vorteil hierbei ist, dass Sie einen Login für mehrere Sites haben. Der PI-Administrator müsste diese Änderungen konfigurieren. Diese Funktion ist ab der Version PI Web API 2017 verfügbar.
Der Großteil der Dokumentation für OSI Pi ist nicht für die breite Öffentlichkeit zugänglich, daher kann ich kein konkretes Beispiel erstellen. Bei Interesse arbeite ich gerne direkt mit Ihnen zusammen. Bitte senden Sie mir eine private Nachricht und wir können uns mit Ihnen in Verbindung setzen, wenn Sie diese Option nutzen möchten.
Hier ist jedoch ein Beispiel für die Verwendung von OpenID für den Zugriff auf Ihr Google-Profilbild (sofern Sie über ein Google-Konto verfügen).
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 )
);
);
Prost,
Stan
Betreff: Wie verwende ich eine HTTP-Anfrage zur Kerberos-Authentifizierung?Hallo @stan_koprowski ,
Danke für Deine Hilfe. Nachfolgend finden Sie die Antworten auf Ihre Fragen:
> Welchen Host nutzen Sie, also einen Mac oder Windows?
Der OsiSoft-Server, auf dem die PI Web API ausgeführt wird.
Der Server läuft unter Windows.
> Welchen Endpunkt möchten Sie erreichen?
Jeder Endpunkt der OsiSoft-Web-API, der erste, den Sie ausprobieren sollten, ist:
> Was hast du versucht?
Hier eine sehr reduzierte Version des Codes:
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 );
> Erhalten Sie Fehlermeldungen?
Die API gibt „Die Autorisierung wurde für diese Anfrage verweigert“ zurück. In JMP lautet der Fehler: „HTTP/1.1 401 Unauthorized“
Dies ist die erwartete Antwort, wenn die Identität des Benutzers, der die Anfrage ausführt, nicht korrekt erkannt wird.
> Benutzen Sie einen Proxyserver?
NEIN.
Danke!
Betreff: Wie verwende ich eine HTTP-Anfrage zur Kerberos-Authentifizierung?Hallo @CAPEGA ,
Leider benötigen wir hier einige zusätzliche Informationen, um Ihnen weiterhelfen zu können.
Welchen Host nutzen Sie, also einen Mac oder Windows?
Welchen Endpunkt möchten Sie erreichen?
Was hast du versucht?
Erhalten Sie Fehler?
Verwenden Sie einen Proxyserver?
Prost,
Stan
Betreff: Wie verwende ich eine HTTP-Anfrage zur Kerberos-Authentifizierung?Hallo zusammen,
Als Kontext versuche ich, eine Verbindung zu einem OsiSoft-Server herzustellen, für den eine sichere Authentifizierung erforderlich ist.
Nur zur Aktualisierung und Klarstellung: Ich weiß, dass die Authentifizierungsmethode in der HTTP-Get-Methode enthalten sein sollte, mir fehlt jedoch immer noch die Angabe des Parameters für die Verwendung anderer Authentifizierungsmethoden. Ich verstehe, dass es in der JMP-HTTP-Anforderungsmethode etwas Ähnliches wie Curl gibt. Kann mir jemand erklären, wie wir mit Curl etwas Ähnliches für die Authentifizierung wie den folgenden PHP-Code angeben können? Danke schön.
$url = "someurl.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($ch, CURLOPT_USERPWD, ":");
$result = curl_exec ( $ch );
$json_o = json_decode ( $result );
var_dump($json_o);
Betreff: Wie verwende ich die HTTP-Anforderung zur Kerberos-Authentifizierung?In JMP 17 gibt es jetzt:
