如何使用 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 中,现在有:
