RESTful API를 통해 ArcGIS Server 보안 레이어에 프로그래밍 방식으로 인증


16

인터넷에 보안 맵 서비스를 노출시키는 ArcGIS 10.1 Server 인스턴스가 있습니다. 필자는 클라이언트 응용 프로그램 (현재 ArcGIS Javascript API의 3.3 버전을 사용하여 구축 중임)을 코딩하여 사용자가 보안 웹 서비스를 볼 수 있도록해야합니다.

이 온라인 ESRI 예제 는 좋은 시작 이라고 생각 합니다 .

모든 mapservices가 자신의 / him에 속하고 동일한 사용자 이름 및 암호로 액세스 할 수 있다는 것을 이미 알고 있기 때문에 내 의지는 사용자에게 각 mapservice 인증을 요구하지 않습니다. 내 생각에 자격 증명에 대한 프롬프트는 한 번만 나타나야하므로 JS 코드는 일종의 RESTful 로그인 호출을 통해 각 맵 서비스에 자격 증명을 공급해야합니다. 나에게 ArcGIS Server REST API가 그러한 호출을 제공하는 것처럼 보이지 않습니다 ... 아마 내가 틀렸을 수도 있습니다.

따라서 ArcGIS Server를 사용하여 보안 맵 서비스에 로그인 할 수있는이 "RESTful"방법이 있습니까 (프로그래밍 방식으로 보안 서비스에 액세스 할 수 있도록)? 그렇다면,이를 설명하는 웹 리소스에 대한 예제 나 링크를 제공 할 수 있습니까?


ArcGIS GIS Server 버전 (10.0 OR 10.1)을 알려주십시오.
Sunil

Sunil, 나는 그것을 쓰는 것을 잊었다, 그것은 10.1이다!
csparpa

1
Windows 인증이 아닌 arcgis 보안 저장소를 사용하고 있습니까?
Brad Nesom

@Brad Nesom ArcGIS Server 인스턴스가 내장 보안 저장소 (사용자 및 역할 포함)를 사용하는 순간 인증을 위해 인스턴스를 외부 LDAP 서버에 연결하려고합니다
csparpa

답변:


11

마침내 내가 찾던 것을 발견했습니다. 토큰을 생성하는 데 사용할 수있는 적절한 ArcGIS Server 웹 엔드 포인트!

전화는 이렇습니다 :

GET http://<arcgisserver_host:port>/arcgis/tokens?request=getToken&username=<usr>&password=<usr>&expiration=<token_lifespan>

이는 토큰을 HTTP 응답 본문으로 되돌려주고 자격 증명을 다시 묻지 않고 보안 리소스에 대한 추가 요청으로 토큰을 보낼 수 있습니다. 토큰 Cookie은 현재 클라이언트 측의 쿠키에 저장되어 있으므로 요청 헤더 의 값이어야합니다 .

하지만 ... 젠장 ! 이 토큰 생성기는 ArcGIS Server REST API의 일부 가 아닙니다 !!! 온라인 API 설명서 에서 찾을 수 없습니다 ! 세계 어디에서 찾을 수 있습니까 ???

이는 ArcGIS Server에 RESTful 인증 프레임 워크가 없음을 의미합니다.

예를 들어 ArcGIS REST API에이 맵 서비스가 노출되어 있고이 /arcgis/rest/services/myDir/myMapService/MapServer/layers리소스를 얻으려고하면 ArcGIS Server에서 얻는 것은 200: OK상태 코드와 HTML 문서가 본문에 있는 응답입니다 (HTML은 로그인 양식입니다) ). RESTT가 될 로그인에서 요청이 헤더 401: Authentication Required와 함께 상태 코드를 돌려 주었을 것으로 기대합니다 WWW-Authenticate... REST 클라이언트 프로그램을 사용하여이 모든 것을 직접 테스트했습니다.


3
안타깝게도 대부분의 "RESTful"구현은 RESTful이 아닙니다 :) 몇 년 전에 저는 대부분의 구현이 "REST와 유사"하다는 사실 때문에 이것에 대해 매우 엄격하다고 포기했습니다. 특정 사용 사례의 경우 일반적으로 다른 접근법을 사용합니다. 기본 제공 인증 시스템을 사용하고 프록시 공개 ArcGIS 요청을 사용합니다. 따라서 Django 인증, 루비 또는 .net 등으로 인증을 처리하는 경우 해당 시스템을 사용합니다. 그런 다음 해당 시스템이 정상이라고 말하면 외부 세계에서 잠긴 내부 ArcGIS 서버 / 포트에 요청을 프록시 할 수 있습니다.
Ragi Yaser Burhum

2
안녕 @ Raagi Yaser Burhum, 당신 말이 맞아요 : 우리는 완전히 RESTful 한 세상에 살지 않을 것입니다 ;-) 나는 당신과 같은 접근법을 고려했습니다 : 나는 프록시를 갖는 아이디어를 좋아합니다. )하지만 전체 아키텍처의 복잡성을 가능한 한 낮게 유지해야합니다. 따라서 사용자를 mapservices에 대해 프로그래밍 방식으로 인증 할 수있는 직접적인 방법이 있다는 것을 발견 한 후에는 바로 설명하겠습니다. 어쨌든 고마워!
csparpa

어쩌면 이것은 너무 오래된 질문이지만 Esri REST API에 GenerateToken 메소드가 있음을 알 수 있습니다. resources.arcgis.com/en/help/arcgis-rest-api/index.html#//…
Nathan Wu

7

ArcGIS Server Security의 작동 방식을 살펴보십시오 .

기본적으로 사용자와 그룹을 만들고 특정 서비스에 대해 특정 사용자 권한을 부여해야합니다.

그렇게 한 후에는 JavaScript 응용 프로그램에서 토큰 기반 보안을 사용해야합니다. 이것이 의미하는 것은 사용자에게 사용자 이름과 비밀번호를 요청한다는 것입니다. 자격 증명의 유효성을 검사하고 토큰을 다시 보내는 ArcGIS Server로 전송됩니다. 이 토큰은 리소스가 요청 될 때마다 사용자를 확인하는 데 사용됩니다.

프로그래머는이 토큰을 모든 맵 서비스, 쿼리 서비스 등에 보냅니다.

이 페이지는 토큰 기반 서비스 를 사용하는 방법을 자세히 설명합니다 .

ArcGIS Javascript API에는 이를 수행하기 위한 IdentityManager 인 클래스가 이미 포함되어 있습니다.

다음은 Identity Manager 사용 방법에 대한 몇 가지 샘플 입니다.


3

ArcGIS API for JavaScript에는 수행하려는 작업을 정확하게 처리 하는 Identity Manager 라는 위젯 이 있습니다. Identity Manager사용하는 샘플을 확인하여 작동 방식을 확인하십시오.

Devdatta에 의해 링크 된 샘플은 유효하지만 사전 ID 관리자 방식이며 보안 서비스에 대한 인증이 API에 구현되기 위해 필요한 훨씬 더 많은 코드가 필요합니다.


1
ESRI 설명서의 샘플 링크를 방금 가져 왔습니다. 새 샘플을 가리 키도록 문서를 업데이트 할 수 있습니까?
Devdatta Tengshe

2
여러분, 힌트를 주셔서 감사하지만 내 요점을 얻지 못했다고 생각합니다. 시나리오는 다음과 같습니다. 내 사용자가 N 보안 맵 서비스에 액세스하려고합니다. 즉, 로그인 프롬프트로 N 번 귀찮게됩니다. 모든 사용자의 mapservices는 동일한 자격 증명을 사용하여 액세스 할 수 있으므로 앱에서 JUST ONCE에 요청한 다음이를 사용하여 각 mapservice를 자동으로 인증하려고합니다. 이 단계에서 프록시 페이지를 사용하여 ArcGIS Server에서 여러 mapservice 인증을 처리 해야한다고 생각합니다 . 좋은데? 더 간단한 대안이 있습니까? 미리 감사드립니다. 내 요구를 분명히하기를 바랍니다 ..
csparpa

2

프록시를 사용할 수도 있으므로 응용 프로그램은 사용자 이름과 암호를 묻지 않습니다. 보안 서비스에 액세스 할 때마다 토큰을 설정하지 않아도됩니다. JS 파일에있는 유일한 작업은 다음을 설정하십시오. esriConfig.defaults.io.proxyUrl = "/proxy.ashx"; (예 : http : //localhost//DotNet/proxy.ashx ; esriConfig.defaults.io.alwaysUseProxy = true; proxy.config 파일에서 애플리케이션에서 소비하는 모든 서비스를 제공
하십시오. https : 프록시에 대한 자세한 내용은 //github.com/Esri/resource-proxy/ 토큰 기반 인증을 사용하려면 proxy.config 파일에서 url, 사용자 이름, 비밀번호 및 matchAll 컨텐츠 만 추가해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.