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 요청 예" 아래에 쉽게 배치할 수 있으며 저와 같은 사람들도 쉽게 찾을 수 있습니다. @CAPEGA 답변을 찾기 위해 토론 스레드를 검색할 필요가 없으며, 아직 답변이 없으면 매우 구체적인 질문을 하고 응답을 기다리십시오.
게다가, 질문하는 사람이 서버에 직접 접속하려고 하는 것이 분명하거나, 다른 사람이 접속할 수 있도록 서버를 구성하지 않거나, 어떤 유형의 인증에 대한 권한이 있는 것이 분명한 경우, 서버에서 완전히 다른 인증 방법을 사용하도록 제안하는 것은 도움이 되지 않는 것 같습니다. 인증이 사용됩니다.이 경우 매우 간단한 답변이 제공되기까지 몇 주에 걸쳐 여러 차례 왕복이 필요했습니다.다른 사람이 이 모든 일을 겪었기 때문에 내가 그럴 필요가 없어서 다행입니다.
여기서는 약간의 좌절감을 표현하고 싶었습니다. 그게 전부입니다.도움을 주셔서 감사합니다.
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 요청을 어떻게 사용합니까?안녕 @CAPEGA ,
이 글을 놓쳤습니다...이 게시물에 대한 답변이 오랫동안 지연되어 죄송합니다.
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 요청을 어떻게 사용합니까?안녕 @CAPEGA
추가 정보를 제공해 주셔서 감사합니다. 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 )
);
);
건배,
스탠
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"입니다.
요청을 실행하는 사용자의 신원이 올바르게 인식되지 않는 경우 예상되는 대답은 무엇입니까?
> 프록시 서버를 사용하고 있습니까?
아니요.
감사해요!
Re: Kerberos 인증 HTTP 요청을 어떻게 사용합니까?안녕 @CAPEGA ,
안타깝게도 추가 지원을 위해서는 여기에 몇 가지 추가 정보가 필요합니다.
어떤 호스트를 사용하고 있습니까? 즉, Mac이나 Windows를 사용하고 있습니까?
당신이 도달하려는 종점은 무엇입니까?
무엇을 시도해 보셨나요?
오류가 발생합니까?
프록시 서버를 사용하고 있습니까?
건배,
스탠
Re: Kerberos 인증 HTTP 요청을 어떻게 사용합니까?안녕하세요 여러분,
문맥상 보안 인증이 필요한 OsiSoft 서버에 연결하려고 합니다.
업데이트하고 명확히 하기 위해 인증 방법이 HTTP get 메서드에 있어야 한다는 것을 알고 있지만 다른 인증 방법을 사용하기 위한 매개 변수를 지정하는 방법은 아직 누락되었습니다. jmp http 요청 메소드에 컬과 비슷한 것이 있다는 것을 알고 있습니다. 컬을 사용하여 다음 PHP 코드와 같이 인증을 위해 비슷한 것을 어떻게 지정할 수 있는지 설명해 주실 수 있나요? 감사합니다.
$url = "someurl.com ";
$ch = 컬_init( $url );
컬_setopt($ch, CURLOPT_RETURNTRANSFER, true);
컬_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
컬_setopt($ch, CURLOPT_GSSAPI_DELEGATION, CURLGSSAPI_DELEGATION_FLAG);
컬_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_GSSNEGOTIATE);
컬_setopt($ch, CURLOPT_USERPWD, ":");
$result = 컬_exec($ch);
$json_o = json_decode( $result );
var_dump($json_o);
Re: Kerberos 인증 HTTP 요청을 어떻게 사용합니까?JMP 17에는 다음이 포함됩니다.
