如何使用 Kerberos 身份驗證 HTTP 請求你好,
有誰知道 Kerberos 身份驗證是否可以與 jmp 的 HTTP 請求方法一起使用? 我有一個 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
)
);
回复: 如何使用 Kerberos 身份驗證 HTTP 請求謝謝!
回复: 如何使用 Kerberos 身份驗證 HTTP 請求@克里斯_羅德里格斯, 請接受我的道歉。 我將確保將此信息添加到 JMP 16.1 文檔中。
回复: 如何使用 Kerberos 身份驗證 HTTP 請求你好@克里斯_羅德里格斯,
是的,我們可以而且應該更好地處理我們的文檔。 如果您遇到其他您認為不完整或可以更詳細的示例,請隨時通過以下方式提交票證:技術支援。
@sheila_loring您可以看一下這個示例,以確保它在文檔的未來版本中得到更新。
乾杯,
斯坦
回复: 如何使用 Kerberos 身份驗證 HTTP 請求@斯坦_科普羅夫斯基謝謝,這也解決了我的問題。不過,我確實有一個後續問題。
為什麼這麼多類似的事情沒有記錄,以至於需要論壇搜索才能找到解決方案?尤其是在這種情況下,解決方案非常簡單:
Password(":") //for Kerberos authentication這可以輕鬆地放置在 JMP 幫助中的“HTTP 請求示例”下,然後像我這樣的人以及@卡佩加不必在討論線程中搜索答案,如果答案尚未存在,請嘗試提出非常具體的問題並等待答复。
此外,當提出問題的人顯然正在嘗試自己訪問服務器,而不是配置服務器供其他人訪問或有權決定什麼類型的服務器時,建議在服務器上使用完全不同的身份驗證方法似乎沒有幫助。使用身份驗證。在這種情況下,我們經過數週的多輪來回討論才得到了非常簡單的答案。我很高興有人經歷了這一切,所以我不必經歷這一切。
只是想在這裡表達一點小小的不滿,僅此而已。感謝您的幫助。
回复: 如何使用 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;
可以使用。
然而,登錄企業領域通常是特定於公司的。
回复: 如何使用 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" );
);
);回复: 如何使用 Kerberos 身份驗證 HTTP 請求你好@斯坦_科普羅夫斯基,
感謝您的建議,這些機制可能在(公共)互聯網上非常常見,但在公司(私人)網絡內,並不那麼明顯。那麼回到最初的問題:JMP HTTP 請求對像是否有一個選項可以與我們所有 PI Server 中現有的 Windows 身份驗證機制兼容?
乾杯,
回复: 如何使用 Kerberos 身份驗證 HTTP 請求你好@卡佩加
感謝您的附加信息。 正如您所說,Kerberos 是一種建立身份驗證的有效方法,但我認為更新更現代的選項是首選使用 SSL 進行身份驗證,並且通常被認為是“當前標準”。 使用 SSL,您可以為自己斷言(通過公鑰/私鑰),而在 Kerberos 中,即使使用會話密鑰的公鑰加密 (PKC),服務器(第 3 方)仍然會為您進行確認。 此外,另一個好處是 SSL 還可以對數據傳輸進行加密。
雖然 Kerberos 是建立身份驗證的有效方法,但我建議使用不同的選項。根據我使用之前提供的鏈接閱讀的內容,Pi Web API 的一些設置允許持票人認證使用 OpenID 連接(基於 OAuth 2.0)。 這樣做的優點是您可以一次登錄多個站點。 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 )
);
);
乾杯,
斯坦
回复: 如何使用 Kerberos 身份驗證 HTTP 請求你好@斯坦_科普羅夫斯基,
感謝您的幫助。 請參閱下面對您的問題的回答:
> 您使用的是哪款主機,即您使用的是 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 未經授權”
如果運行請求的用戶的身份未被正確識別,這就是預期的答案。
> 您使用代理服務器嗎?
不。
謝謝!
回复: 如何使用 Kerberos 身份驗證 HTTP 請求你好@卡佩加,
不幸的是,我們需要一些額外的信息來為您提供進一步的幫助。
您使用的是哪台主機,即您使用的是 Mac 還是 Windows?
您想要達到的終點是什麼?
你嘗試了什麼?
你有任何錯誤嗎?
您使用代理服務器嗎?
乾杯,
斯坦
回复: 如何使用 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, ":");
$結果=curl_exec($ch);
$json_o = json_decode ( $result );
var_dump($json_o);
回覆: 如何使用 Kerberos 驗證 HTTP 請求在 JMP 17 中,現在有:
