RESTful APIを介したArcGIS Serverのセキュリティ保護されたレイヤーへのプログラム認証


16

インターネット上のセキュリティで保護されたマップサービスを公開するArcGIS 10.1サーバーインスタンスがあります。私が必要としているのは、ユーザーがこれらのセキュリティで保護されたWebサービスを表示できるようにするクライアントアプリケーション(現在、ArcGIS Javascript APIの3.3バージョンを使用して構築中)をコーディングすることです。

このオンラインESRIの例は良いスタートだと思います。

私はすべてのマップサービスが彼女/彼に属し、同じユーザー名とパスワードで彼女/彼によってアクセス可能であることをすでに知っているので、ユーザーに各マップサービス認証を要求することはありません。私の考えでは、資格情報のプロンプトは1回だけ表示されるはずです。したがって、JSコードは、何らかのRESTfulログイン呼び出しを介して資格情報を各mapserviceにフィードする必要があります。私には、ArcGIS Server REST APIがそのような呼び出しを提供しているようには見えません...多分間違っています。

したがって、セキュリティで保護されたマップサービスにログインするこの「RESTful」な方法は、ArcGIS Serverで実行可能ですか?ある場合、これを説明するWebリソースへの例またはリンクを提供できますか?


ArcGIS GISサーバーのバージョン(10.0または10.1)を教えてください??
スニル

スニル、私はそれを書くのを忘れていました、それは10.1です!
csparpa

1
Windows authではなくarcgisセキュリティストアを使用していますか?
ブラッドネソム

@Brad Nesomは、現時点ではArcGIS Serverインスタンスが(ユーザーとロールを含む)組み込みのセキュリティストアを使用していますが、認証目的でインスタンスを外部LDAPサーバーにリンクする予定です
-csparpa

回答:


11

最終的に、探していたもの、つまりトークンの生成に使用できる適切なArcGIS Server Webエンドポイントが見つかりました!

呼び出しはこれです:

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

これにより、トークンがHTTP応答本文に返され、再度資格情報の入力を求められることなく、セキュリティで保護されたリソースへの要求にトークンを送信できます。トークンはCookie、クライアントサイドのCookieに現在格納されているため、リクエストヘッダーの値である必要があります。

しかし... いまいましい!このトークンジェネレーターは、ArcGIS Server REST APIの一部ではありません !!! オンラインAPIドキュメントで見つけることができませんでした!世界のどこで見つけましたか?

これは、ArcGIS ServerにRESTful認証フレームワークがないことを意味します。

たとえば、このmapserviceをArcGIS REST APIで公開している場合、/arcgis/rest/services/myDir/myMapService/MapServer/layersこのリソースを取得しようとすると、ArcGIS Serverから取得するのは、200: OKステータスコードと本文のHTMLドキュメントを持つ応答です(HTMLはログインフォームです) )。RESTfulなログインから、リクエストによって401: Authentication RequiredステータスコードとWWW-Authenticateヘッダーが返されることを期待します... RESTクライアントプログラムを使用して、このすべてを自分でテストしました。


3
悲しいことに、ほとんどの「RESTful」実装はRESTfulではありません:)数年前、私はこれについて超厳格であることをあきらめました。真実はほとんどの実装が「RESTに似ている」からです。特定のユースケースでは、通常、別のアプローチを使用します。選択した組み込みの認証システムを使用し、オープンArcGISリクエストをプロキシします。だから、もし私がDjangoの自動認証、またはruby、または.net、その他何でも認証を処理していたら、そのシステムを使用します。次に、そのシステムがOKと言ったら、外部の世界からロックされている内部ArcGISサーバー/ポートにリクエストをプロキシできます。
ラギヤセルバーフム

2
こんにちは、@ Ragi Yaser Burhum、あなたは正しいです:完全にRESTfulな世界に住むことは決してありません;-)私はあなたのようなアプローチも考えました:プロキシ(ArcGIS Server以外のWebサービスへのリクエストも処理できる)のアイデアが好きです、同様に)しかし、私はアーキテクチャ全体の複雑さを可能な限り低く保つ必要があります。したがって、ユーザーをマップサービスにプログラムで認証する直接的な方法があることを発見した後、それを説明します。とにかくありがとう!
csparpa

多分これは古すぎる質問ですが、うまくいけば、あなたは、EsriのREST APIは今GenerateToken方法持って見ることができます:resources.arcgis.com/en/help/arcgis-rest-api/index.html#//...
ネイサン呉

7

ArcGIS Server Securityの仕組みをご覧ください

基本的に、ユーザーとグループを作成し、特定のサービスに対する特定のユーザー権限を付与する必要があります。

それが完了したら、JavaScriptアプリケーションでトークンベースのセキュリティを使用する必要があります。つまり、ユーザーにユーザー名とパスワードを尋ねます。これはArcGIS Serverに送信され、認証情報が検証され、トークンが返されます。このトークンは、リソースが要求されるたびにユーザーを検証するために使用されます。

プログラマとしてのあなたは、このトークンをすべてのマップサービス、クエリサービスなどに送信します。

このページでは、トークンベースのサービスの使用方法について詳しく説明します

ArcGIS Javascript API には、これを行うためのIdentityManagerというクラスが既に付属しています。

以下に、Identity Managerの使用方法に関するサンプルをいくつか示します。


3

ArcGIS API for JavaScriptには、実行したいことを正確に処理するIdentity Managerと呼ばれるウィジェットがあります。IDマネージャーを使用するサンプルを確認するをてください。

Devdattaによってリンクされたサンプルは有効ですが、Identity Managerより前の方法でこれを行う方法であり、安全なサービスの認証がAPIに組み込まれたために必要な多くのコードが含まれています。


1
ESRIのドキュメントのサンプルリンクを取得しました。新しいサンプルを指すようにドキュメントを更新できますか?
Devdatta Tengshe

2
皆さん、あなたのヒントに感謝しますが、私はあなたが私のポイントを得られなかったと思います。シナリオは次のとおりです。ユーザーはN個のセキュリティで保護されたマップサービスにアクセスするため、ログインプロンプトでN回悩まされることになります。すべてのユーザーのマップサービスは同じ資格情報を使用してアクセスできるため、アプリが一度だけそれらに要求し、それらを使用して各マップサービスを自動的に認証するようにします。この段階で、プロキシページを使用して、ArcGIS Serverで複数のmapservice認証を処理する必要があると思います。いいですね?もっとまっすぐな代替手段はありますか?事前に感謝、私のニーズを明確にしたことを願っています。
csparpa13年

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、username、password、matchAllコンテンツのみを追加する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.