ArcGIS Enterprise で OAuth2 による連携

Enterprise

はじめに

OAuth 2.0 は、認可のための業界標準プロトコルです。 Web、デスクトップ、モバイル アプリケーションのユーザー資格情報を取得および管理する方法を定義します。

ユーザー、クライアント、またはサーバーは、暗号化されたトークンを使用してシステム アクセスを認可され、認可サーバーからの応答としてアクセス トークンを受け取ります。これらのトークンは「キー」として機能し、一定期間、保護されたデータへのアクセスを許可します。

ArcGIS はプライベート ユーザー ID とコンテンツを保存します。サードパーティ アプリケーションは、安全な OAuth 2.0 ユーザー認証プロトコルを通じてこれらのリソースにアクセスします。

ここでは、ブラウザベースのアプリケーションを想定して、ユーザーログインによりトークンを取得してみます。

OAuth2 を利用する流れは以下の通りです。

  • コンテンツ>新しいアイテム>アプリケーションにてアプリケーション設定
  • アプリケーションの Item を選択し、設定タブ>アプリケーションの登録
  • Rest API(authorize)にてトークン発行
  • ArcGIS APIs による OAuth2 のプロセスの簡素化

アプリケーション設定

Portal for ArcGIS にログインし、コンテンツ>新しいアイテム>アプリケーションにて、アプリケーションの設定を行います。

Web マッピングを選択し、ブラウザベースのアプリケーションの URL を入力します。

タイトルなどを設定します。

登録したアプリケーションの Item を選択し、設定タブにてアプリケーションの登録を行います。
リダイレクト URI を設定して、登録ボタンを押下します。

Rest API(authorize)にてトークン発行

アプリケーションを登録することで、トークンを安全に発行する準備が整いました。

Rest API (authorize)を実行して、トークンを取得してみます。

上記で登録したリダイレクト URI、アプリケーションの登録により発行されたアプリケーション ID を利用します。
パラメータ client_id にアプリケーション ID を指定し、redirect_uri にさきほど登録したリダイレクト URI を指定します。

https://[PortalのURL]/arcgis/sharing/rest/oauth2/authorize?client_id=[アプリケーション ID] &response_type=token&redirect_uri=https://app.testesrij.com/redirect1

Portal for ArcGIS に登録されているアカウント情報を入力してサインインボタンを押下すると、さきほど登録されたリダイレクト URI にトークン付でリダイレクトされます。

リダイレクト URI 例)

https://app.testesrij.com/redirect1#access_token=zj-TIQAp-a3VJjo4beXEeUSH0uz8S4iyp6fkCk6WZ0y8y-93tVo7U6by08nCv5-6miespEL4BMW1RQeWC6qFc2s6p5HFAO_2iELTmsi8szroFZuzvwYOgelX2_bqn2_RU_sWGvedk95BYGuexY_ZJy00SNM8GJNr7ntOPYAqdpvBf2ORvpyZGWdmwUrF_DXvYScHnaxeXzR75Z7rTESBdsb1VhBkq4xffS6plHbHux4.&expires_in=7200&username=guest_user01&ssl=true

URL のアンカーの後の access_token により、ArcGIS Enterprise へトークン付でアクセスが可能となります。Javascript の location.hash などでアンカー後の文字列を取得できます。

<script>
window.addEventListener('load', (event) => {
var hash = location.hash;
console.log(hash);
});
</script>

それでは、トークンを利用して ArcGIS Enterprise のコンテンツにアクセスしてみましょう。

以下の URL は認証が必要になります。

https://[ArcGIS Server URL]/arcgis/rest/services/Hosted/PublicFacility/FeatureServer

token を付与して認証なしでアクセスができます。

https://[ArcGIS Server URL]/arcgis/rest/services/Hosted/PublicFacility/FeatureServer?token=FwSIAqqqEeNdyEJeYFJvCb2lEovHVwjKKxElQhKE5Fa4VjPdpP0PUTCvYXbgLo4UaPfjanuvBcx3XSftICRgf-X7QpwU78b0hb3nEPPQkkJHnCvrau22huZn1aYvHOmWujP8tHDFz7w7oO_tRG5Ycogj2s1U5ozUipxngOJSWhJAnHUahqbQY7_c5NYJiOxZFPRuxKAzMnNAGzwZu-9MqljEvkd6zeZl-VjdU1LmftQ.

ArcGIS APIs による OAuth2 のプロセスの簡素化

Authorize API を利用して token を取得できますが、もうひとつ認証コードを利用する方法もあります。

認証コード取得 → 認証コードより access_token、refresh_token 取得 →  定期的に refresh_token でaccess_token を更新

こちらは別の機会に紹介しようと思います。

また、ArcGIS APIs により OAuth2 のプロセスを簡素化できます。
ArcGIS API には、アクセス トークンを取得し、OAuth 2.0 を実装する際のプロセスを簡素化するために使用できる組み込みの IdentityManager または AuthenticationManager クラスが含まれています。これらのクラスの詳細については、「ArcGIS identity」をご参照ください。

こちらの例では、ユーザーは IdentityManager に直接組み込まれた OAuth 2.0 機能を使用して ArcGIS にログインしています。

ArcGIS Enterprise は OAuth2 を標準でサポートしています。
GIS 活用の中での DX 推進のヒントにしてみてください。

※参考

フォローする