OAuth 委任認証の設定
Windchill は、
ThingWorx プラットフォーム上に構築されたアプリケーションとマッシュアップのリソースプロバイダとしてシングルサインオン (SSO) に参加できます。この使用事例では、ユーザーは SSO が有効な
ThingWorx ベースのアプリケーションにサインインし、使用しているアプリケーションを認証してそれらの
Windchill データにアクセスできます。このような SSO の実装を委任認証と呼びます。これは、ユーザーがサービスプロバイダ (アプリケーション) に自分の代理としてリソースプロバイダ (
Windchill) から情報を読み込む権限を与え、ユーザーは 1 回ログインするだけでよいからです。サポートされる SSO の使用事例、および PTC 製品の SSO フェデレーションのセットアップに必要な設定ステップの詳細については、
PTC Product Platform Single Sign-on Guide を参照してください。
PTC 製品プラットフォームの SSO ソリューションは、製品アプリケーション間の委任認証の管理を行うために、OAuth 規格に基づいたアクセストークンの交換を利用しています。Windchill で OAuth を有効にするには、2 つの Windchill ファイルを編集する必要があります。
securityContext.properties ファイルの編集
securityContext.properties ファイルでは、中央認証サーバーへの接続を設定し、アクセストークンとスコープによって保護されるシステムリソースを指定します。このプロパティファイルはディレクトリパス <Windchill>\codebase\WEB-INF\security\config\securityContext.properties にあります。
このファイルを設定する際には、以下のステップを実行する必要があります。
1. OAuth 2 トークンによって保護するリソースを特定します。保護されるリソースへのアクセスが付与されるためには、サービスプロバイダから有効な OAuth 2 トークンが提示される必要があります。このためには、com.ptc.eauth.identity.oauth2.rs=/oauth/** という文字列の後ろに、ant スタイルのパターンで各リソースを記述します。
たとえば、Windchill ドキュメントを保護するには、文字列を以下のように設定します。
com.ptc.eauth.identity.oauth2.rs=/oauth/documents/**
単一パターンだけなので (つまり、プロパティファイルには行を 1 つだけ指定できる)、OAuth 2 トークンによって保護するすべてのリソースを完全に網羅するトップレベル URL を定義する必要があります。ステップ 4 では、OAuth トークンに添付するスコープを指定して、リソースへのアクセスをさらに細かく制御します。
2. トークン検証のエンドポイントを特定します。アクセストークンを検証する CAS サーバーにこの値を設定する必要があります。
org.springframework.security.oauth2.provider.token.RemoteTokenServices.checkTokenEndpointUrl=https://{cas-server}
.ptc.com:9031/as/token.oauth2?grant_type=urn:pingidentity.com:oauth2:grant_type:validate_bearer
3. リソースプロバイダ用に作成した PingFederate (CAS) OAuth クライアントで指定したクライアント ID とクライアントシークレットを入力します。Windchill 用 OAuth クライアントについては、CAS 管理者にお問い合わせください。
org.springframework.security.oauth2.provider.token.RemoteTokenServices.clientId=rs_client
org.springframework.security.oauth2.provider.token.RemoteTokenServices.clientSecret={client secret}
4. スコープ WINDCHILL_READ とサービスプロバイダに公開する Windchill リソースをペアにする 1 つ以上のプロパティを追加します。
スコープ WINDCHILL_READ によって公開されるリソースを設定するには、このアクセスを定義するプロパティを securityContext.properties ファイルに追加する必要があります。Windchill では、単一スコープの設定がサポートされています。テストは WINDCHILL_READ という名前のスコープを使用して実施されました。このファイルで登録されているスコープを、SSO ネットワークでのアクセストークンの交換を管理する中央認証サーバーと、データをリクエストするサービスプロバイダアプリケーションでも登録する必要があります。
各スコープのプロパティは以下の部分から構成されます。
◦ そのリソースが OAuth によって保護され、有効なアクセストークンが提示された場合にアクセスが許可されることを示す URL プレフィックス。
com.ptc.eauth.identity.oauth2.rs.InMemoryResourceScopeService.resourceScopes.
◦ 公開されるリソースへのディレクトリパス。例: /Windchill/oauth/documents。
◦ ant スタイルのパスパターン。たとえば、/** では、このタスクの前に指定されているパスの下のすべてのディレクトリからリソースが公開されます。
◦ スコープの値 (名前)。例: =WINDCHILL_READスコープの値にスペースが含まれていてはなりません(スペースは複数のスコープの値を区切るときに使用しますが、複数のスコープを指定するシナリオは現在のところサポートされていません)。
以下に示すスコーププロパティのサンプルでは、/Windchill/oauth/documents リソースのデータを渡すことを許可するためには、OAuth アクセストークンにスコープ WINDCHILL_READ を添付することが要求されます。
com.ptc.eauth.identity.oauth2.rs.InMemoryResourceScopeService.resourceScopes.
/Windchill/oauth/documents=WINDCHILL_READ
指定されたリソースにアクセスするためにプロパティで定義されている必要なスコープを持つアクセストークンが、受信リクエストで指定されている必要があります。これらのプロパティは付加的なものであり、同じリソースに追加のスコープを定義した場合、保護されているデータに対する受信リクエストには、そのリソースに定義されているすべてのスコープが含まれている必要があります。たとえば、上記の例に加えて、/Windchill/oauth/documents リソース用にスコープ "ABC" を必要とする 2 つ目のプロパティを作成した場合、そのリソースにアクセスするためには、受信アクセストークンにスコープ "WINDCHILL_READ" と "ABC" が含まれている必要があります。
Web.xml ファイルの編集
Web.xml ファイルに対して以下の 2 つの編集を行う必要があります。
1. securityContext.properties ファイルの場所を WEB-INF/web.xml ファイルに追加します。
WEB-INF/web.xml ファイルは securityContext.properties ファイルを参照する必要があります。Web.xml ファイルは <Windchill がインストールされている場所>/Codebase/WEB-INF/Web.xml にあります。
Spring root Web アプリケーションコンテキストの場所を表すパラメータ値にこの場所を追加します。以下の例は、securityContext.properties ファイルがそのデフォルトディレクトリに保存されているかぎり有効です。パス WEB-INF/security/config/securityContext.xml を <param-value>config/mvc/applicationContext.xml</param-value> に追加します。このコンテキストパラメータの構造は以下のとおりです。
<context-param>
<description>Location of Spring root web application context</description>
<param-name>contextConfigLocation</param-name>
<param-value>config/mvc/applicationContext.xml
WEB-INF/security/config/securityContext.xml
</param-value>
</context-param>
|
securityContext.properties ファイルの場所は securityContext.xml でも参照されます。securityContext.properties のディレクトリの場所を変更した場合、Web.xml と securityContext.xml でそこへの参照を更新します。
|
2. コード断片 SpringSecurityFilterChain を追加します。
Web.xml ファイルで 1 つ目の <filter-mapping> タグを見つけて、そのタグの前に以下のコードを追加します。
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/oauth/*</url-pattern>
</filter-mapping>
Web.xml ファイルで 1 つ目の <servlet-mapping> タグを見つけて、そのタグの前に以下のコードを追加します。
<servlet>
<description>Bridge Servlet for Oauth Access</description>
<servlet-name>OauthAuthBridgeServlet</servlet-name>
<servlet-class>wt.servlet.AuthBridgeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>OauthAuthBridgeServlet</servlet-name>
<url-pattern>/oauth/*</url-pattern>
</servlet-mapping>
Windchill と Apache サーバーの再起動
securityContext.properties および Web.xml ファイルを編集した後で、Windchill と Apache サーバーを再起動し、Windchill が SSO ネットワークの一員として委任認証に参加していることを検証するテストを実施します。