ArcGIS Enterprise でOAuth2 による連携(その2)

はじめに

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

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

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

ここでは、サーバーベースのアプリケーションを想定した、ユーザーログインにより認証コードを取得してからトークンを取得してみます。

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

  • コンテンツ>新しいアイテム>アプリケーションにてアプリケーション設定
  • アプリケーションのItemを選択し、設定タブ>アプリケーションの登録
  • Rest API(authorize)にて認証コード
  • 認証コードよりaccess_token、refresh_tokenを取得
  • refresh_tokenを定期実行

アプリケーション設定

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=code&redirect_uri=https://app.testesrij.com/redirect1

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

レスポンス例)

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

認証コードを使って、access_tokenとrefresh_tokenを取得できます。

アプリケーションID、認証コードなどを指定します。

https:// [PortalのURL]/arcgis/sharing/rest/oauth2/token?client_id=[アプリケーション ID]   &grant_type=authorization_code&redirect_uri=https://app.testesrij.com/redirect1&code=[認証コード]

json形式で、access_token、refresh_tokenなどが取得できます。

{
    "access_token": "VpbGWgt-ygxz7sect1B5HSCFJqONat-NPm8mX9RrM6aviA4Y6ovlsFYagGDm1MlSGpxJdTza2PqxtTQiOtvZb0TcVa63zuytESI9Cr2-CdOMnMUvxEMyHEnT1VxWxA3zuXJgyFihIDFgz-HH4liNzw5QLNgt31-pq-MJDOgLGOEJCm-QEgoCNnLQEm442OEpPowtZ-2ARL86DVlcPf6Fm3iJpuzWqnuYxAemJA4q4TIsPq-JABAsFtJQEIZDXQlkak-jKiwB9OnPpyA4xkJYeg..",
    "expires_in": 1800,
    "username": "guest_user01",
    "ssl": true,
    "refresh_token": "mCf0LQxmS_dmp-4lP16HkKASkojkUkGsvAQdUkxiVt6WVQfcR8ZMOOhefZD_M1jmpaASwPz7Hq3wpqxGT8tJBXFNARj7v_w6JMeigy85MGQN_ykYjdeLALD_J6nmiEwHfx_WVEQTO3xdVK5aiMDFTXvPddVgqADzwkaRPzIXlq5wUBwIylNKKOCP4X-EWYOrDZyTYDefgvy8FcLcMla47PZ838CYlpOM-Tvk_yxUbVADOXC9lReQXeCGh5DnbBRLwUz3f3N2eWQcFXJjhqIV52s_w0ywx4uUqEKSFi69yez-UMvTjNlms5Qhv34S4BFWfcxvwujkOPh9kR_we0_Ah4BkolZk49RbWZ94jIDLd_048-33X97V_S1MnFiZAJiJtkqO3XhsnpxNbUo6eFY_1aTpv6AZYbWGn38vLKc_1RdfBJtpBHAanbfLqPv9Vv_znax3OzhONYbF1r8CcXIQ8MmRvDVJQ0Bn9xY2VLTBBz8.",
    "refresh_token_expires_in": 1209599
}

デフォルトではaccess_tokenの有効期限は30分です。

Rest API (token)でgrant_type=refresh_token を実行してaccess_tokenを取得しなおします。

https://[PortalのURL]/arcgis/sharing/rest/oauth2/token?client_id=[アプリケーション ID]&grant_type=refresh_token&refresh_token=[refresh_token]

json形式で、access_tokenが取得できます。

{
    "access_token": "OCJiQwCj-C0Hm1bw5r0rd3pf0B7cSyML9-3GrLJcFP8zHESPp3UywuQFKosfyYEEmvXoGBKSgsXTUh_bqPmsoA0Oaash8Le1ddS8OJwJCxqDj0fs2CI7PeZMXJ5NMSX-zzmBZ3zW6WWPLG85M56T23rrhVuGISqQ8EUFDqyT0U9b5NAw3vMv00Z2vbo12KgNFpq5FrlKepdVOYw1YsTjIBIO23ePp_hfr508l93fRh4LwP4MVkf1Rw1Vb6Urj6nxWU_C0HYX5K7J84UytLK6rg..",
    "expires_in": 1800,
    "username": "guest_user01",
    "ssl": true
}

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

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

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

Applicationによるログイン

Rest API (token)でgrant_type=client_credentials にて、client_idとclient_secretを指定して実行するとユーザーのログイン画面を表示させることなしにトークンを取得することができます。

client_id=<the application ID>&

client_secret=<the application secret>&

grant_type=client_credentials

ただし、Applicatiomによるログイン方法を採用する場合は、client_secretが利用ユーザーに漏れないように注意して管理する必要があります。主にサーバー側のアプリケーションコンポーネントが必要になってきます。

ArcGIS Enterprise はOAuth2を標準でサポートしています。

GIS活用の中でのDX推進のヒントにしてみてください。

※参考 OAuth2.0

Authentication

フォローする