フリーダムの日記

GIS(地理情報システム)を中心に技術的なことを書いています。

ArcGIS の OpenID Connect を使ってみた。

はじめに

ArcGISOpenID Connect に対応したということで、試しに Google プラットフォームを利用して連携してみましたので、連携方法を含めて紹介したいと思います。

もともと ArcGIS では、SAML ログインをサポートしており、Shibboleth などの多くの ID プロバイダー (IDP) にも対応しているため、シングルサインオン (SSO) を実現することができるようになっております。今回あらたに OpenID Connect をサポートするようになっています。

doc.arcgis.com

また、SSO についてのより詳しいドキュメントについては、以下にも紹介されています。 community.esri.com

OpenID Connect とは

OpenID Connect は、OAuth 2.0 をベースとした ID 連携(フェデレーション)の標準プロトコルです。 そのため、OAuth 2.0 による API 認可と合わせてユーザー認証を行うことができるようなっています。
もともと、OAuth 2.0 は認可に特化した仕組みであるため、認証結果を含むアイデンティティ情報を受け渡す仕組みは実装されていません。ユーザーを識別するには、認証情報を API 側が確認する必要があります。そこで、認証結果を含むアイデンティティ情報を受け渡しできるように OAuth 2.0 を拡張したものが、OpenID Connect プロトコルです。OpenID Connect プロトコルは認証情報を含むアイデンティティ情報を「ID トークン」に入れて受け渡します。OpenID Connect プロトコルにより、OAuth 2.0 のアクセストークンと ID トークンを同時に発行することを実現しています。

より詳しい仕様については、OpenID ファウンデーション・ジャパン(OIDF-J)という団体が、OAuth 2.0 や OpenID Connect の標準仕様などのドキュメントを公開しています。また、日本における OpenID 関連技術の普及啓発やエンタープライズ・フェデレーション、安心して ID を利用できる環境の整備、プライバシー保護の推進などの啓発活動を通じて、オープンな API エコシステムの成長を支援するための活動も行っています。

www.openid.or.jp

ArcGIS Online での OpenID Connect 連携

はじめに ArcGIS Online で OpenID Connect 連携を実現するために、他のプラットフォームで OAuth クライアントを発行する必要があります。今回は、例として Google と連携するため、Google の Developer サイトで OAuth クライアントの発行を行いました。Google 以外のプラットフォームで OpenID Connect に対応したい場合は、連携したいプラットフォームで OAuth クライアントの発行を行います。ちなみに ArcGIS では、個人向けのアカウントを作成する場合、ソーシャルログインとして、 FacebookGoogle 等にも対応しています。

Google の OAuth 2.0 認証情報のクライアント ID とクライアントシークレットの発行については以下を参照してください。 developers.google.com

Google では、以下の画面で OAuth クライアントの発行を行いました。 Google

次に ArcGIS Online に対して設定を行います。

doc.arcgis.com

ArcGIS Online 側の設定項目として、Google の OAuth クライアントで発行したクライアント ID とクライアントシークレットを使用します。 その他、OpenID プロバイダーに関する情報も登録する必要があります。

OpenID プロバイダーに関する情報を取得する手段として、OpenID Connect Discovery 1.0 という仕様が定義されています。この仕様がサポートされている場合は、その OpenID プロバイダーの発行者識別子 (https:// で始まる URI) に /.well-known/openid-configuration を付けた URL に HTTP GET リクエストを投げることで、当該 OpenID プロバイダーの情報を取得することができます。情報は JSON で返されます。

Google の実装はこちらになります。 こちらの OpenID プロバイダーの情報を ArcGIS Online に設定します。

https://accounts.google.com/.well-known/openid-configuration

qiita.com

以下の OpenID プロバイダーの情報を ArcGIS Online に設定しました。

ArcGIS Online ArcGIS Online

最後にArcGIS Online で設定後に表示される「ログイン リダイレクト URI」をGoogle に登録する必要があります。 これにより、ArcGIS Online のログイン画面に OpenID Connect 連携用のボタンが配置されます。 ボタンをクリックすると、Google のログイン画面が表示され、Google のアカウント情報で ArcGIS Online にログインすることができます。

ArcGIS Online (OpenID Connect)

他のプラットフォームとの OpenID Connect 連携

今回、Google プラットフォームを利用しましたが、多くのプラットフォームが API 連携として、OpenID Connect に対応しています。Yahoo や 以前私が携っていた LANDLOG もオープンプラットフォームの思想として OpenID Connect を採用しており、ID 連携を実現しています。そのため、LANDLOG のユーザーであれば、OpenID Connect 連携により ArcGIS Online を使用することができるかと思います。

LANDLOG の周辺技術については以下にも公開されています。

OPTiM サービスでの OAuth 2.0/OpenID Connect と 周辺技術の活用事例 - Speaker Deck

その他、国のプロジェクトとして、農業データプラットフォームの WAGRI でも OpenID Connect に対応しています。WAGRI のユーザーアカウントで、ArcGIS Online にログインすることも実現できるかと思われます。

wagri.net

アプリケーションによる例

アプリケーションで認証したい場合は、以下の例であるように OAuth による認証が可能なため、OpenID Connect による認証も可能となります。ArcGIS API for JavaScript が用意されている API で簡単に認証機構を組み込むことが可能となっており、セキュアなデータも扱うことが可能となります。Google の ID 情報でアプリケーションの認証が可能となります。

developers.arcgis.com

ArcGIS Online (Open IDConnect)
Web アプリケーションによる OpenID Connect 連携

Web アプリケーションでも組織サイトへのログインとして、OpenID Connect による認証を実現することができます。上記の例では、認証することで地図ページを表示しています。

さいごに

今回の連携イメージを作成してみました。このようなイメージを実現できるのかと思います。OpenID Connect 連携によりプラットフォームのエコシステムを実現することが可能となります。ユーザーとしては、プラットフォームごとに ID を管理するのは面倒でなるべく同じID でプラットフォームを利用できることが理想だと思います。ArcGIS がもっと多くのプラットフォームと連携して、エコシステムを実現することができれば個人的には面白くなるのかなと思います。今後もプラットフォームのエコシステムを意識して色々と提案できるようになっていきたいなと思います。

f:id:freedom0625:20201127181954p:plain