Comment utiliser la requête HTTP d'authentification KerberosSalut,
Est-ce que quelqu'un sait si l'authentification Kerberos peut être utilisée avec la méthode de requête HTTP de jmp ? J'ai une API que je souhaite connecter en utilisant cette méthode d'authentification.Quelles sont les différentes méthodes d’authentification pouvant être utilisées ? Existe-t-il un objet cURL dans JMP ( https://curl.haxx.se/ ) ? Ce serait bien si vous pouviez fournir un exemple, si disponible. Merci d'avance.
Voici un exemple de demande
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 : Comment utiliser la requête HTTP d'authentification KerberosMerci!
Re : Comment utiliser la requête HTTP d'authentification Kerberos@Chris_Rodrigues , Veuillez accepter mes excuses. Je veillerai à ce que ces informations soient ajoutées à la documentation JMP 16.1.
Re : Comment utiliser la requête HTTP d'authentification KerberosSalut @Chris_Rodrigues ,
Oui, nous pouvons et devons faire mieux avec notre documentation. Si vous rencontrez d'autres exemples qui vous paraissent incomplets ou pourraient être plus détaillés, n'hésitez pas à soumettre un ticket avec soutien technique .
@sheila_loring pouvez-vous jeter un œil à cet exemple pour être sûr qu'il sera mis à jour dans une prochaine version de la documentation.
acclamations,
Stan
Re : Comment utiliser la requête HTTP d'authentification Kerberos@stan_koprowski merci, cela a également résolu mon problème.J'ai cependant une question complémentaire.
Pourquoi tant de choses comme celle-ci ne sont-elles pas documentées, au point qu'elles nécessitent des recherches sur les forums pour trouver la solution ?Surtout dans ce cas, où la solution était incroyablement simple :
Password(":") //for Kerberos authenticationCela pourrait facilement être placé dans l'aide JMP sous "Exemples de requêtes HTTP", puis des personnes comme moi et @CAPEGA vous n'aurez pas à chercher la réponse dans les fils de discussion, et si elle n'y est pas déjà, essayez de poser des questions très spécifiques et attendez une réponse.
De plus, il ne semble pas utile de suggérer d'utiliser des méthodes d'authentification complètement différentes sur le serveur, alors que clairement la personne qui pose la question tente d'accéder au serveur elle-même, ne configure pas un serveur pour que d'autres puissent y accéder, ou n'ait pas d'autorité sur le type d'authentification. l'authentification est utilisée.Dans ce cas, il a fallu plusieurs allers-retours sur plusieurs semaines avant qu’une réponse très simple soit fournie.Je suis content que quelqu'un d'autre ait vécu tout ça pour que je n'aie pas à le faire.
Je voulais juste exprimer un peu de frustration ici, c'est tout.J'apprécie l'aide.
Re : Comment utiliser la requête HTTP d'authentification KerberosSi vous n'êtes pas obligé de vous connecter à un domaine, voici ceci :
//kerberos
url = "http://my_server_with_kerberos/some_endpoint";
request = New HTTP Request(
Method("GET"),
URL(url),
Password(":")
);
request << Send;
Je devrais le faire. Notez le mot de passe ( ":" );
Si vous avez besoin de vous connecter au domaine de votre entreprise, alors quelque chose comme ceci (il s'agit d'une connexion basée sur un formulaire) :
//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;
peut être utilisé.
Cependant, la connexion aux domaines d'entreprise est généralement spécifique à l'entreprise.
Re : Comment utiliser la requête HTTP d'authentification KerberosSalut @CAPEGA ,
J'ai raté celui-ci... Désolé pour le long retard avec lequel je réponds à ce message.
Pour utiliser Kerberos pour négocier avec une requête http, vous pouvez utiliser ce qui suit :
Mot de passe(":")
// 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 : Comment utiliser la requête HTTP d'authentification KerberosSalut @stan_koprowski ,
Merci pour votre suggestion, ces mécanismes sont peut-être très courants sur Internet (public) mais au sein d'un réseau d'entreprise (privé), ce n'est pas si évident.Donc pour revenir à la question initiale : existe-t-il une option de l'objet requête HTTP JMP qui sera compatible avec le mécanisme d'authentification Windows qui est en place aujourd'hui avec tous nos serveurs PI ?
Acclamations,
Re : Comment utiliser la requête HTTP d'authentification KerberosSalut @CAPEGA
Merci pour l'information supplémentaire. Bien que Kerberos soit une option, comme vous l'avez déclaré, comme moyen valable d'établir une authentification, des options plus récentes et plus modernes, à mon avis, qui utilisent SSL pour s'authentifier sont préférées et sont souvent considérées comme la "norme actuelle". Avec SSL, vous vous affirmez ( via clé publique/privée), alors que, dans Kerberos, même avec la cryptographie à clé publique (PKC) pour les clés de session, le serveur (tiers) fait toujours la confirmation pour vous. De plus, un autre avantage est que SSL crypte également le transfert de données.
Bien que Kerberos soit un moyen valable d'établir l'authentification, je recommanderais une option différente.D'après ce que j'ai lu en utilisant le lien fourni précédemment, certains paramètres de l'API Web Pi permettraient authentification du porteur en utilisant OpenID Connect (basé sur OAuth 2.0). L'avantage ici est que vous disposez d'un seul identifiant pour plusieurs sites. L'administrateur PI devra configurer ces modifications. Cette fonctionnalité est disponible à partir de la version PI Web API 2017.
La plupart de la documentation d'OSI Pi n'est pas accessible au grand public, je ne peux donc pas créer d'exemple spécifique. Je serais heureux de travailler directement avec vous si vous le souhaitez. Veuillez m'envoyer un message privé et nous pourrons nous connecter si vous souhaitez poursuivre cette option.
Cependant, voici un exemple d'utilisation d'OpenID pour accéder à votre photo de profil Google (si vous disposez d'un compte 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 )
);
);
acclamations,
Stan
Re : Comment utiliser la requête HTTP d'authentification KerberosSalut @stan_koprowski ,
Merci pour votre aide. Découvrez ci-dessous les réponses à vos questions :
> Quel hébergeur utilisez-vous, c'est-à-dire utilisez-vous un Mac ou Windows ?
Le serveur OsiSoft exécutant la PI Web API.
Le serveur fonctionne sous Windows.
> Quel est le point final que vous essayez d'atteindre ?
N'importe quel point de terminaison de l'API Web OsiSoft, le premier à essayer est :
> Qu'as-tu essayé ?
Voici une version très réduite du code :
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 );
> Avez-vous des erreurs ?
L'API renvoie "L'autorisation a été refusée pour cette demande.". Dans JMP, l'erreur est : "HTTP/1.1 401 Unauthorized"
Quelle est la réponse attendue si l'identité de l'utilisateur exécutant la requête n'est pas correctement reconnue.
> Utilisez-vous un serveur proxy ?
Non.
Merci!
Re : Comment utiliser la requête HTTP d'authentification KerberosSalut @CAPEGA ,
Malheureusement, nous aurons besoin de quelques informations supplémentaires ici pour vous aider davantage.
Quel hébergeur utilisez-vous, c'est-à-dire utilisez-vous un Mac ou Windows ?
Quel est le point final que vous essayez d’atteindre ?
Qu'as-tu essayé ?
Obtenez-vous des erreurs ?
Utilisez-vous un serveur proxy ?
acclamations,
Stan
Re : Comment utiliser la requête HTTP d'authentification KerberosSalut tout le monde,
Pour le contexte, j'essaie de me connecter à un serveur OsiSoft pour lequel une authentification sécurisée est nécessaire.
Juste pour mettre à jour et clarifier, je sais que la méthode d'authentification devrait être dans la méthode HTTP get, mais il me manque toujours comment spécifier le paramètre pour utiliser d'autres méthodes d'authentification. Je comprends qu'il y a quelque chose de similaire à curl dans la méthode de requête http jmp. Quelqu'un peut-il m'expliquer comment pouvons-nous spécifier quelque chose de similaire pour l'authentification au code PHP suivant utilisant curl ? Merci.
$url = "someurl.com " ;
$ch = curl_init ( $url );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, vrai );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt($ch, CURLOPT_GSSAPI_DELEGATION, CURLGSSAPI_DELEGATION_FLAG);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_GSSNEGOCIATE);
curl_setopt($ch, CURLOPT_USERPWD, ":");
$result = curl_exec ( $ch );
$json_o = json_decode ( $result );
var_dump($json_o);
Re : Comment utiliser la requête HTTP d'authentification KerberosDans JMP 17, il y a désormais :
