Kerberos 認証 HTTP リクエストの使用方法こんにちは、
jmp からの HTTP リクエスト メソッドで Kerberos 認証を使用できるかどうかを知っている人はいますか? この認証方法を使用して接続したい API があります。使用できるさまざまな認証方法には何がありますか? JMP に cURL オブジェクトはありますか ( https://curl.haxx.se/ )? 可能であれば例を示していただけると助かります。 よろしくお願いします。
リクエストのサンプルはこちら
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: Kerberos 認証 HTTP リクエストの使用方法ありがとう!
Re: Kerberos 認証 HTTP リクエストの使用方法@Chris_Rodrigues 、 私の謝罪を受け入れてください。 この情報が JMP 16.1 ドキュメントに追加されるようにします。
Re: Kerberos 認証 HTTP リクエストの使用方法こんにちは@Chris_Rodrigues 、
はい、ドキュメントをもっと改善できるし、そうすべきです。 不完全だと思われる他の例や、もっと詳しく説明できる例を見つけた場合は、お気軽にチケットを送信してください。テクニカルサポート。
@sheila_loringこの例を見て、ドキュメントの将来のリリースで更新されるかどうかを確認していただけますか。
乾杯、
スタン
Re: Kerberos 認証 HTTP リクエストの使用方法@stan_koprowskiありがとう、これで私の問題も解決しました。ただし、追加の質問があります。
なぜこのような多くのことが文書化されておらず、解決策を見つけるためにフォーラムで検索する必要があるのでしょうか?特にこのケースでは、解決策は非常に簡単でした。
Password(":") //for Kerberos authenticationこれは、JMP ヘルプの「HTTP リクエストの例」の下に簡単に配置できます。そうすれば、私や@ケープガディスカッション スレッドで答えを探す必要はありません。答えがまだない場合は、非常に具体的な質問をして、応答を待ちます。
さらに、明らかに質問者が自分でサーバーにアクセスしようとしており、他の人がアクセスできるようにサーバーを設定していないか、どのような認証方法を使用するかについての権限を持っている場合に、サーバー上でまったく異なる認証方法を使用することを提案することは役に立たないようです。認証が使用されます。この例では、非常に単純な答えが得られるまでに、数週間にわたって何度もやり取りを繰り返しました。他の誰かがこのすべてを経験したので、私が経験する必要がなくてよかったです。
ここで少し不満を表明したかっただけです。それだけです。助けていただきありがとうございます。
Re: Kerberos 認証 HTTP リクエストの使用方法レルムにログインする必要がない場合は、次のようにします。
//kerberos
url = "http://my_server_with_kerberos/some_endpoint";
request = New HTTP Request(
Method("GET"),
URL(url),
Password(":")
);
request << Send;
やるべきだ。 パスワードをメモしてください( 「:」 );
会社のレルムにログインする必要がある場合は、次のようにします (これはフォームベースのログインを実行します)。
//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;
に使える。
ただし、企業レルムへのログインは通常、企業固有です。
Re: Kerberos 認証 HTTP リクエストの使用方法こんにちは@ケープガ、
これを見逃していました...この投稿への返信が長くなってしまい、申し訳ありません。
Kerberos を使用して http リクエストとネゴシエートするには、以下を使用できます。
パスワード(":")
// 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: Kerberos 認証 HTTP リクエストの使用方法こんにちは@stan_koprowski 、
ご提案ありがとうございます。これらのメカニズムは (パブリック) インターネットでは非常に一般的かもしれませんが、企業 (プライベート) ネットワーク内ではそれほど明白ではありません。元の質問に戻りますが、現在すべての PI サーバーに導入されている Windows 認証メカニズムと互換性のある JMP HTTP 要求オブジェクトのオプションはありますか?
乾杯、
Re: Kerberos 認証 HTTP リクエストの使用方法こんにちは@ケープガ
追加情報をありがとうございます。 認証を確立するための有効な手段として述べたように Kerberos はオプションですが、私の意見では、認証に SSL を使用する新しいより現代的なオプションが好まれており、多くの場合「現在の標準」と考えられています。 SSL を使用すると、自分自身でアサーションを行うことになります (経由一方、Kerberos では、セッション キーに公開キー暗号化 (PKC) を使用しても、サーバー (サードパーティ) が確認を行います。 さらに、SSL ではデータの転送も暗号化されるというもう 1 つの利点があります。
Kerberos は認証を確立する有効な方法ですが、別のオプションをお勧めします。以前に提供されたリンクを使用して読んだ内容に基づくと、Pi Web API には次のことを可能にする設定がいくつかあります。ベアラ認証OpenID Connect (OAuth 2.0 ベース) を使用します。 ここでの利点は、複数のサイトに 1 つのログインができることです。 PI 管理者はこれらの変更を構成する必要があります。 この機能は、PI Web API 2017 リリース以降で利用可能です。
OSI Pi のドキュメントのほとんどは一般公開されていないため、具体的な例を作成することはできません。 もしよろしければ、直接ご協力させていただければ幸いです。 このオプションをご希望の場合は、プライベート メッセージをお送りください。ご連絡させていただきます。
ただし、ここでは OpenID を使用して Google プロフィール写真にアクセスする例を示します (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 )
);
);
乾杯、
スタン
Re: Kerberos 認証 HTTP リクエストの使用方法こんにちは@stan_koprowski 、
ご協力ありがとうございます。 ご質問に対する回答は以下をご覧ください。
> どのホストを使用していますか、つまり Mac または Windows を使用していますか?
PI Web API を実行する OsiSoft サーバー。
サーバーは Windows 上で実行されています。
> 到達しようとしているエンドポイントは何ですか?
OsiSoft Web API の任意のエンドポイントで、最初に試行するのは次のとおりです。
>何を試しましたか?
コードの非常に縮小されたバージョンは次のとおりです。
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 );
> 何かエラーが出ますか?
API は「このリクエストに対する認証は拒否されました。」を返します。 JMP では、エラーは「HTTP/1.1 401 Unauthorized」です。
リクエストを実行しているユーザーの ID が正しく認識されない場合に予期される答えは次のとおりです。
> プロキシサーバーを使用していますか?
いいえ。
ありがとう!
Re: Kerberos 認証 HTTP リクエストの使用方法こんにちは@ケープガ、
残念ながら、さらにサポートするには、ここで追加情報が必要になります。
どのホストを使用していますか?つまり、Mac または Windows を使用していますか?
到達しようとしているエンドポイントは何ですか?
何を試しましたか?
エラーはありますか?
プロキシサーバーを使用していますか?
乾杯、
スタン
Re: Kerberos 認証 HTTP リクエストの使用方法こんにちは、みんな、
コンテキストとして、安全な認証が必要な OsiSoft サーバーに接続しようとしています。
更新して明確にするために、認証方法は HTTP get メソッドにある必要があることはわかっていますが、他の認証方法を使用するためのパラメーターを指定する方法がまだわかりません。 jmp httpリクエストメソッドにcurlに似たものがあることを理解しています。 どなたか、curl を使用して次の PHP コードと同様のものを認証に指定する方法を説明していただけますか? ありがとう。
$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);
Re: Kerberos 認証 HTTP リクエストを使用するにはどうすればいいですか?JMP 17 では、次の機能が追加されました。
