トークン サービスの設定
トークン サービスは、ASP.NET 認証が使用されるとき(つまり、SQL Server またはカスタム プロバイダがユーザおよび ロール ストアに使用されるとき)にユーザを認証します。トークンはセキュリティで保護されたサービスにアクセスするときの鍵の役割を果たし、認証されたユーザだけに与えられます。トークンとは、ユーザの名前、有効期限などの情報を含む暗号化された情報の文字列のことです。トークンは、<ArcGIS Server インスタンス>/Tokens で使用できる Web サービスを通して認証ユーザに与えられます。
トークンは Web GIS サービス レベルのセキュリティを実現しますが、Windows 統合認証といった他の手法ほど安全ではありません。トークンによるシステムのセキュリティは、トークンへのアクセス制御によって決まります。トークンをリクエストするには デフォルトで安全な接続(HTTPS)が必要 ですが、トークンを使用するすべてのリクエストでも HTTPS を要求することができます。これは、セキュリティで保護された GIS サービスが含まれているフォルダに対して HTTPS を要求することを意味します。Manager または ArcCatalog でフォルダのプロパティを開き、[暗号化 Web アクセスの使用] チェックボックスをオンにすると、サービス フォルダに対して HTTPS を要求することができます。
トークン サービスは、ArcGIS Server のインストール時に ArcGIS Web アプリケーション コンポーネントとともにインストールされる Web サービスです。ArcGIS 9.3 では、トークン サービスは必要なときに自動的に有効になります。トークン サービスは、ユーザが Microsoft SQL Server またはカスタム メンバーシップ プロバイダに格納される場合に有効になります(「ユーザとロールの設定の概要」をご参照ください)。Windows ユーザ アカウントを使って GIS サービスのユーザを認証することを指定した場合、ロールに SQL Server またはカスタム プロバイダを使用し、かつユーザ認証としてトークンを有効にするまで、トークン サービスは有効になることも利用されることもありません。
トークン サービスが有効である場合は、トークンのタイムアウトの最大値を設定することができます。この設定については、「トークンのタイムアウト」をご参照ください。また、暗号キーをシステムにおいて一意な値に設定することもできます。詳細については、「トークン サービスの共有鍵」をご参照ください。次の設定手順は、トークン サービスにのみ適用されます。
GIS サービスに対してトークンが要求された場合、クライアント ソフトウェアはこの方法で GIS サービスを使用します。
- クライアントが GIS サービスをリクエストします。
- GIS サーバは、トークンが必要であることを通知し、トークン サービスの URL を提供します。
- クライアントは、有効なユーザ名とパスワードを提供することにより、トークン サービスにトークンをリクエストします。
- トークン サービスは、ユーザ名とパスワードをデータベース(またはカスタム メンバーシップ プロバイダ)で整合チェックし、それらが有効である場合に、クライアントにトークンを返します。
- クライアントは、GIS サービスにトークンが含まれたリクエストを送信します。
- GIS サーバは、トークンを整合チェックし、サービス リクエストへのレスポンスをクライアントに返します。
トークンまたはログイン情報を提供しなくてもユーザがサービスにアクセスできるようにしたい場合はどうすればよいでしょうか。その場合は Everyone ロールを使用して、サービスまたはフォルダへの匿名アクセスを許可することができます(詳細については、「サービスまたはフォルダの権限の設定」をご参照ください)。
トークン サービスが有効であり、GIS サービスへのアクセスに要求される場合、クライアント ソフトウェアは先に示したようにトークンを取得し、それを使用できなければなりません。Esri クライアントは自動的にトークンを取得して使用します。次に、ログインを要求する ArcGIS Server Internet サービスに接続するときのクライアントの振舞いを示します。
- ArcGIS Desktop(ArcMap、ArcCatalog)、ArcGIS Explorer、および Web ADF アプリケーション:デスクトップ アプリケーションまたは開発環境でサービスにアクセスするのに必要な有効なユーザ名とパスワードをユーザが接続ダイアログ ボックスに入力します。アプリケーションがトークン サービスと通信して有効なトークンを入手します。ユーザまたは開発者がトークン サービスと直接やりとりする必要はありません。
- REST ベースのアプリケーション(JavaScript、Flex、Silverlight/WPF、SharePoint): このようなアプリケーションはブラウザ上で実行され、アプリケーションにアクセスできる人は誰でも表示できるため、サービス用のユーザ名とパスワードをアプリケーションに埋め込むのは適切ではありません。代わりに、トークン サービスからトークンを取得できます。トークンはサービスの URL リクエストに組み込まれます(例としては、http:// <サービスURL>?token=<トークン文字列>)となります。トークンの取得の詳細については、「GetToken Web ページ」セクションをご参照ください。トークンベースのリソースのリクエストについては、適切な API リソースをご参照ください。
- SOAP ベースのアプリケーション: ADF のコネクション クラスを使用せずに、SOAP ツールキットを使用して GIS Web サービスの WSDL(Web Service Description Language)にアクセスするアプリケーションでは、トークンを明示的に取得して使用する必要があります。詳細とサンプルについては、「ArcGIS Server SOAP SDK」をご参照ください。
トークンを使用するとき、Web アプリケーションでは、アプリケーションのエンド ユーザがブラウザで GIS サービスのためのアカウント情報を入力することはありません。サービスのためのログイン情報は、Manager または開発環境で事前に指定されていなければなりません。Web アプリケーションのすべてのユーザに同じアカウント情報が使用されます。ログイン情報を要求する Web アプリケーション自体はセキュリティで保護することができますが、このログイン情報は Manager または他の方法で、Web アプリケーションのセキュリティ設定に基づいて個別に検証されます。カスタム プログラミングを使用すると、エンド ユーザから GIS サービスにアカウント情報を渡すことが可能になります。詳細については、開発者ヘルプをご参照ください。IIS 認証(ユーザが Windows に保管される)を使用するときは、認証情報が自動的にアプリケーションから基となる Web サービスに渡されます。
Manager を使用して、トークン サービスのサービス パラメータを設定することができます。これには、トークンの有効期限(短い有効期限と長い有効期限)と暗号化の共有鍵が含まれます。次に、それぞれの設定について説明します。
トークンのタイムアウト
トークン サービスが有効である場合は、Manager の [セキュリティ] → [設定] でトークンのタイムアウトを設定することができます。タイムアウトは、トークンが有効な期間を決定します。有効期限の切れたトークンを使用すると、エンド ユーザにタイムアウトまたはその他のエラー メッセージが表示されることがあります。
トークンのタイムアウトが短ければ短いほどセキュリティは強化されますが、アプリケーションがトークンのタイムアウトを検出して新しいトークンを取得しないと、正規ユーザがサービスを使用している間にタイムアウトしてしまいます(ArcGIS Desktop および ADF クライアントは新しいトークンを取得できます)。トークンにタイムアウトが割り当てられるのは、不正使用に歯止めをかけるためです。ハッカーが認証されたユーザとサーバ間の通信を傍受することに成功した場合、トークンがハッカーによって盗み取られるおそれがあります。トークンが傍受されたとしても、タイムアウトによってその使用期間は制限されます。そこで、セキュリティを強化するために、トークンのタイムアウトを短い期間に設定します。トークンのタイムアウトを短くする場合は、トークンがタイムアウトする前に、アプリケーションに新しいトークンを埋め込む必要があります。
カスタム アプリケーションを記述している場合は、トークンのタイムアウトを検出して適切なメッセージを表示するか、新しいトークンを取得する必要があります。詳細については、開発者ヘルプをご参照ください。
[セキュリティ] → [設定] ページでは、トークンの有効期限が 2 つ定義されます。
- 短期トークン:このタイムアウト設定は、クライアント ID を指定せずに、または有効期限なしでクライアント ID を指定することにより、トークンをリクエストするクライアントに適用されます。ここで設定されるタイムアウト値は、常に有効期限の短いトークンに適用されます。このタイムアウト設定は、ArcGIS Desktop アプリケーションおよび Web ADF アプリケーションで使用されます。
- 長期トークン:このタイムアウト設定は、通常、REST ベースのアプリケーション(JavaScript、Flex、Silverlight/WPF、SharePoint)で使用されます。一般に、Manager で設定する長期トークンは、短期トークンよりもかなり長めです。タイムアウト設定は最大許容値であり、クライアントは、Manager で設定された最大値を限度として、任意の有効期限のトークンをリクエストできます。長期トークンを取得するには、クライアント ID と有効期限を含める必要があります。クライアント ID は、クライアントの IP アドレスまたは Web Referrer URL(クライアント ブラウザが使用している Web アプリケーションの URL)のどちらかです。リクエストには、トークンのタイムアウトも追加する必要があります。タイムアウトが指定されない場合は、短期トークンに指定されたタイムアウトが使用されます。
トークンの傍受と不正使用を防ぐための効果的な方法の 1 つは、GIS サービスとのすべての通信に HTTPS(SSL)の使用を要求することです。そのためには、ArcGIS/Services Web アプリケーションにセキュリティで保護された接続(SSL)を要求します。IIS のアプリケーションに HTTPS(SSL)を要求する方法については、「SSL の設定」をご参照ください。
トークン サービスの共有鍵
トークン サービスの共有鍵は、トークンを暗号化するために使用されます。トークンはユーザ名と他の情報に基づいて暗号化され、クライアントに送信されます。クライアントが GIS サービスへのリクエストを送信する際、リクエストにはトークンが含まれます。サーバは共有鍵を使ってトークンを解読します。サーバは GIS サービスへのアクセスを許可する前に、クライアントのアイデンティティを確認します。共有鍵により、サーバが作成したトークンであることが保証されます。
共有鍵はクライアントのアイデンティティと認証を保証するために不可欠です。このため、共有鍵は適切な長さの一意な値に設定されなければなりません。トークン サービスが有効である場合、Manager は共有鍵をランダムな値に設定します。必要であれば、管理者自身が共有鍵を設定することもできます。共有鍵を設定するには、Manager で [セキュリティ] → [設定] をクリックし、[トークン サービス] の下にある [設定] ボタンをクリックします。[トークン サービス設定] ダイアログ ボックスで [共有鍵] の値を設定します。鍵は 16 文字に設定する必要があります(16 文字を超える文字は使用されません)。鍵にはランダムな文字を使用することが推奨されます。英数字以外の文字を含め、あらゆる文字を使用することができます。鍵は、トークンを傍受したユーザが容易に推測できない値に設定してください。ユーザが鍵を使用したり覚えたりする必要はないので、パスワードのように複雑さが問題になることはありません。
トークンは、Rijndael としても知られる AES(Advanced Encryption Standard)暗号方式に基づいて、鍵とともに暗号化されます。鍵を構成する 16 文字は、暗号化に使用される 128 ビットを表します。暗号化と AES 規格の詳細については、セキュリティ リファレンスを参照するか、組織内のセキュリティや暗号法の担当者に問い合わせてください。
GetToken Web ページ
トークン サービスでは、トークンを手動でリクエストできるよう、HTML ページが提供されます。通常、これが必要になるのは、ArcGIS JavaScript API を使って Web アプリケーションを構築するときか、テストやトラブルシューティングで使用する場合だけです。Web ADF アプリケーションや ArcGIS Desktop などのクライアントは、トークンを自動的に取得するので、このページは必要ありません。GetToken ページは、https://<Web サーバ>/ArcGIS/Tokens/gettoken.html にあります(デフォルト以外のインスタンス名でインストールしている場合は、ArcGIS の名前を置き換えてください)。
GetToken ページを使用するには、次の情報を入力します。
- ユーザ名(User Name)とパスワード(Password): これらは GIS サーバ上の GIS Web サービスにとって有効なものでなければなりません。有効な名前は、ArcGIS Server Manager の [セキュリティ] → [設定] で以前に設定されたものです。
- クライアント ID(Identifier): Web サービスにリクエストを送信するコンピュータを識別します。クライアント ID は、REST ベースの API を使用するときに一般に必要となる、長期間有効なトークンを取得するために必要となります。クライアント ID は、トークンが送信中に傍受された場合に、第三者がそれを使って GIS サーバにリクエストを簡単に送信できないようにします(次のどちらのオプションも詐称できることに注意してください)。クライアント ID は次のどちらかの方法で指定することができます。
- IP アドレス(IP Address):トークンを指定されたコンピュータと関連付けます。サーバが GIS Web サービスにリクエストを送信する ArcGIS Server SOAP API で構築された Web アプリケーションなどのように、指定されたコンピュータでトークンが常に使用される場合は、IP アドレスを使用します。この手法は、GIS サーバでの問題のテストやトラブルシューティングにも使用できます。
- HTTP Referer(Web Application URL or HTTP Referrer):GIS Web サービスへのリクエストを送信するページの HTTP(S)接頭辞を除いた URL です。ArcGIS JavaScript API など REST ベースの API を使用してアプリケーションを構築し、各クライアントが GIS Web サービスのマップやデータを直接リクエストする場合は、この方法を使用します。たとえば、アプリケーションが http://www.esri.com でホストされる場合は、www.esri.com を HTTP Referrer として使用します。このアプリケーションに gis.esri.com のような複数のサブドメインからアクセスする場合は、両方の URL に共通する部分だけを使用できます。この例の場合、HTTP Referrer は esri.com になります。Referrer を必要以上に短くしないよう気をつけてください。トークンのセキュリティが弱まります。
- 有効期限(Expires in): 発行日を基準としたトークンの有効期間です。トークンの有効期限が切れたあとでクライアントがリクエストを送信した場合は、トークンの有効期限切れコードが返されます。Esri クライアント(Desktop、ArcGIS Explorer、Web ADF)は新しいトークンを取得することができます。その他のクライアントには、アプリケーションを再起動しなくてはいけないものもあります。指定された有効期限はクライアント ID が設定されている場合にのみ使用されます。クライアント ID が省略された場合、有効期限には Manager で設定された短期トークン時間が使用されます。クライアント ID が設定されていて、Manager で長期トークン用に設定された最大期限を有効期限が越えている場合は、Manager で設定された長期トークン時間が使用されます。
GetToken ページが悪用される懸念がある場合は、IIS Manager またはファイル システムを使ってページを削除するか、アクセスを制限することができます。GetToken ページが利用できなくても、次のセクションで説明するリクエスト形式を使用して、フォルダへの gettoken リクエストを通じてトークン サービスにトークンをリクエストすることができます。
トークンのリクエスト形式
サーバからトークンを取得するには、URL リクエストを作成する必要があります。ArcGIS Desktop、Web ADF、Web API、モバイル クライアントといったトークンを操作するクライアントは、先のセクションで説明した GetToken ページと同様に、この方法を使用します。
トークン エンドポイントを使用したトークンのリクエスト
トークン エンドポイントを使用してトークンをリクエストすることができます。たとえば、サーバからトークンを取得するには、次の URL を使用することができます。
https://myserver.example.com/arcgis/tokens?request=gettoken&username=myuser&password=secret1&clientid=ref.myserver.example.com&expiration=1440&f=json&callback=myfunction
このリクエストは、同じサーバ(myserver.example.com)上で実行されている Web アプリケーションの myuser ユーザのために、有効期限が 1 日(1,440 分)のトークンを取得します。
クエリ文字列では、次のパラメータを指定することができます。
request:このパラメータの値は常に gettoken です(request=gettoken)。このパラメータは必須です。
username:システムのユーザのユーザ名です。このパラメータは必須です。
password:システムのユーザのパスワードです。このパラメータは必須です。
メモ:HTTPS/SSL は、トークンの送信時にユーザ名とパスワードを暗号化します。詳細については、以下の「セキュリティで保護された接続(HTTPS/SSL)」をご参照ください。
clientid:クライアントを識別するオプション パラメータです。タイプと値の間にピリオド(.)を使用します。clientid が指定されない場合は、短期トークンのタイムアウト設定が使用されます。
値:
ip:クライアントの IP アドレスです。
例:clientid=ip.10.14.102.85
ref:このトークンが使用される Web アプリケーションのベース URLです。client パラメータの値が referrer である場合、このパラメータを指定する必要があります。
例:clientid=ref.http://myserver/mywebapp
requestip:値として requestip(リクエスト IP)を指定すると、リクエストが作成された IP のトークンが生成されます。
例:clientid=requestip
expiration:トークンが発行されてから有効な期間を指定するオプション パラメータです。値は分単位です。このパラメータが指定されなかった場合は、短期トークンのタイムアウト設定が使用されます。
f:ArcGIS Server 10.0 Service Pack 1(SP1)の新機能であるこのオプション パラメータは、出力形式を指定します。値「json」を受け入れて、結果を json 形式で返します。このパラメータを指定しないと、トークンはテキスト形式で生成されます。
例:{"token":"hjSXkAQl2uczsyE9T3NDvhcso6WVYWSAqBcn1GFB-L8.","expires":"1289513369381"}
有効期限は 1970 年 1 月 1 日から経過した時間(ミリ秒)で表されます。
callback:コールバック関数の名前を指定するオプション パラメータです。callback を含めると、出力は常に json 形式で返されます。
generateToken エンドポイントを使用したトークンのリクエスト
ArcGIS Server 10.0 Service Pack 1(SP1)の新機能で、generateToken エンドポイントを使用してトークンをリクエストすることもできます。たとえば、サーバからトークンを取得するには、次の URL を使用することができます。
https://myserver.example.com/arcgis/tokens/generateToken?username=myuser&password=mypass&client=referer|ip|requestip&referer=referer&ip=ipaddress&expiration=expiration&f=json&callback=myfunction
クエリ文字列では、次のパラメータを指定することができます。
username:トークンが生成されたユーザ名です。このパラメータは必須です。
password:ユーザー名のパスワードです。このパラメータは必須です。
メモ:HTTPS/SSL は、トークンの送信時にユーザ名とパスワードを暗号化します。詳細については、以下の「セキュリティで保護された接続(HTTPS/SSL)」をご参照ください。
client:クライアントを識別するオプション パラメータです。clientid が指定されない場合は、短期トークンのタイムアウト設定が使用されます。
値:
referer:このトークンが使用される Web アプリケーションのベース URLです。client パラメータの値が referrer である場合、このパラメータを指定する必要があります。
例:referer=http://myserver/mywebapp
ip:トークンが使用されるコンピュータの IP アドレスです。client パラメータの値が ip である場合、このパラメータを指定する必要があります。
例:ip=10.14.102.85
requestip:値として requestip(リクエスト IP)を指定すると、リクエストが作成された IP のトークンが生成されます。
expiration:トークンが発行されてから有効な期間を指定するオプション パラメータです。値は分単位です。expiration には、長期トークンに許容される最大値よりも大きい値を指定することはできません。
例:expiration=60
メモ:client パラメータと expiration パラメータが含まれない場合は短期トークンが生成され、expiration には短期トークンのタイムアウト設定が使用されます。
f:出力形式を指定するオプション パラメータです。値「json」を受け入れて、結果を json 形式で返します。このパラメータを指定しないと、トークンはテキスト形式で生成されます。
例:{"token":"hjSXkAQl2uczsyE9T3NDvhcso6WVYWSAqBcn1GFB-L8.","expires":"1289513369381"}
有効期限は 1970 年 1 月 1 日から経過した時間(ミリ秒)で表されます。
callback:コールバック関数の名前を指定するオプション パラメータです。callback パラメータを含めると、出力は常に json 形式で返されます。
トークン サービスに要求されるセキュリティで保護された接続(HTTPS/SSL)
トークン サービスにトークンをリクエストする際には、デフォルトで、HTTPS(Secure Sockets Layer または SSL)に基づくセキュリティで保護された接続が要求されます。HTTPS は、ユーザ名とパスワードを送信時に暗号化します。クライアントは、ユーザ名とパスワードがクエリ文字列に含まれる標準方式(ArcGIS Desktop、Web ADF コントロール、およびその他のクライアントによって使用されます)または GetToken.html Web ページを通してトークンをリクエストする際に、HTTPS を使用しなければなりません。
HTTPS の要件を無効にし、セキュリティで保護されない HTTP を使ってトークンを取得できるのは、内部のテスト目的に限られます。ネットワークに接続できる何者かが、HTTP を使って送信されるパスワードを傍受できることに注意してください。開発サーバでトークンに HTTP を使用する必要があるとすれば、それは IIS Web サーバを開発コンピュータにインストールすることが組織のポリシーで禁止されている場合だけでしょう。そのような環境では、一般に、SSL/HTTPS の使用をサポートしない Visual Studio のファイルベースの Web サーバ(Cassini)を使って開発が行われます。IIS が利用できる場合は、常に SSL を使用して、ユーザ名とパスワードを傍受や不正使用から保護する必要があります。SSL の設定については、「SSL の設定」をご参照ください。
トークンにセキュリティで保護されない HTTP リクエストを使用できるようにトークン サービスを設定するには、次の手順に従います。
- <Web サーバ ルート>\ArcGIS\Tokens\web.config ファイルをテキスト エディタまたは XML エディタで開きます(ArcGIS インスタンスがデフォルトの C:\Inetpub\wwwroot\ArcGIS にない場合は、設定した ArcGIS インスタンスのディレクトリを調べてください)。
- <appSettings> セクションで次のタグを探します。このタグが存在しない場合は追加します。
<appSettings> <add key="RequireSSL" value="True" /> <add key="TokenServiceURL" value="XYZ" /> <appSettings>
- RequireSSL キーの値を False に設定し、TokenServiceURL の値を https から http に変更します。その後、ファイルを保存します。web.config ファイルを変更すると、トークン サービス アプリケーションが再起動されるので、IIS を再起動する必要はありません。
- <Web サーバ ルート>\ArcGIS\rest と <Web サーバ ルート>\ArcGIS\Services にある web.config ファイルに対して、上記の手順を繰り返します。
必要に応じて、SSL の要件を元に戻してください。トークン サービスで SSL の要件を再び有効にするには、RequireSSL 設定を True に戻し、TokenServiceURL を https に設定してからファイルを保存します。Tokens、rest、Services フォルダにある web.config ファイルで、同じ作業を繰り返します。
トークン サービスをインターネットからアクセス可能にする
先に説明したように、ArcGIS Desktop、ArcGIS Explorer および Web ADF クライアントは、セキュリティで保護されたサービス用のトークンをリクエストするために、トークン サービスにアクセスする必要があります。ArcGIS Server インスタンスをインターネットからアクセス可能にする場合は、トークン サービスにアクセスする URL を変更して、トークン サービスをインターネットで参照できるようにする必要があります。
ArcGIS Server のインストール時には、トークン サービスにアクセスする URL にコンピュータ名が含められます。イントラネット設定では、このコンピュータ名が認識できるため、正常に動作します。しかし、インターネット経由でそのコンピュータにアクセスするクライアントには、そのコンピュータ名を認識することができません。
これを解決するには、ArcGIS Server インスタンス(<Web サーバ ルート>\<ArcGIS Server インスタンス名>)の rest、Services、および Tokens の各フォルダにある 3 つの web.config ファイルを変更する必要があります。それぞれの web.config ファイルをテキスト エディタで開き、以下の手順を実行します。
- appSettings 要素内でキーが TokenServiceURL の要素を見つけます。
- このキーの値を https://<コンピュータ名>/ArcGIS/tokens から https://<パブリック ドメイン名>/ArcGIS/tokens に変更します。