intra-mart Accel Platform 上のリソースの提供方法( Java )¶
intra-mart Accel Platform 上のリソースをOAuth認証を通して提供する場合の作業手順は以下のとおりです。
- 提供するリソースのスコープ(アクセス範囲)を設定する。
- リソースを提供するURLを設定する。
- リソースを提供するアプリケーションを設定する。
- 提供するリソースを実装する。
ステップ1:提供するリソースのスコープ(アクセス範囲)を設定する。¶
空の<oauth-client-scope.xml>ファイルを作成して、以下を入力し保存します。<?xml version="1.0" encoding="UTF-8"?> <oauth-client-scopes-config xmlns="http://intra-mart.co.jp/system/oauth/provider/client/scope/config/oauth-client-scopes-config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://intra-mart.co.jp/system/oauth/provider/client/scope/config/oauth-client-scopes-config oauth-client-scopes-config.xsd "> <scopes> <scope id="account"> <default-subject>アカウント情報へのアクセス</default-subject> <localizations> <localize locale="ja"> <subject>アカウント情報へのアクセス</subject> <text>ユーザアカウント情報へのアクセスを許可します。</text> </localize> </localizations> </scope> </scopes> </oauth-client-scopes-config>コラム
国際化情報(localize)は intra-mart Accel Platform で利用するロケール分、設定してください。
詳しい設定については 「 設定ファイルリファレンス 」 - 「 クライアントのアクセス範囲設定 」を参照してください。
作成した<oauth-client-scope.xml>ファイルを、「conf/oauth-client-scopes-config」直下に配置します。スコープ(アクセス範囲)の設定内容はユーザがクライアントアプリケーションにアクセス許可を行う際に表示されます。次に、リソースを提供するURLを設定しスコープを関連付けます。
ステップ2:リソースを提供するURLを設定する。¶
空の<oauth-client-resource.xml>ファイルを作成して、以下を入力し保存します。<?xml version="1.0" encoding="UTF-8"?> <oauth-client-resources-config xmlns="http://intra-mart.co.jp/system/oauth/provider/client/resource/config/oauth-client-resources-config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://intra-mart.co.jp/system/oauth/provider/client/resource/config/oauth-client-resources-config oauth-client-resources-config.xsd "> <client-resources> <client-resource id="user-account" path="/oauth/user/account" type="java" target="jp.co.intra_mart.sample.UserAccount"> <scope id="account" /> </client-resource> </client-resources> </oauth-client-resources-config>コラム
設定したリソースに認可設定を行う場合は<client-resource>の子要素に<authz>タグを設定してください。
リソースに関連付けられたスコープがクライアントアプリケーションに許可されていない場合、リソースへのアクセスは拒否されます。
詳しい設定については 「 設定ファイルリファレンス 」 - 「 クライアントリソース設定 」を参照してください。
作成した<oauth-client-resource.xml>ファイルを、「conf/oauth-client-resources-config」直下に配置します。次に、設定したリソースを参照可能なクライアントアプリケーションを設定します。
ステップ3:リソースを提供するアプリケーションを設定する。¶
空の<oauth-client-detail.xml>ファイルを作成して、以下を入力し保存します。<?xml version="1.0" encoding="UTF-8"?> <oauth-client-details-config xmlns="http://intra-mart.co.jp/system/oauth/provider/client/config/oauth-client-details-config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://intra-mart.co.jp/system/oauth/provider/client/config/oauth-client-details-config oauth-client-details-config.xsd "> <client-details> <client-detail client-id="account-sample" client-secret="sample" authorized-grant-type="authorization_code"> <default-name>サンプル・アプリケーション</default-name> <localizations> <localize locale="ja"> <client-name>サンプル・アプリケーション</client-name> <description>アカウント情報を取得するサンプルアプリケーションです。</description> </localize> </localizations> <scopes> <scope id="account" /> </scopes> </client-detail> </client-details> </oauth-client-details-config>コラム
国際化情報(localize)は intra-mart Accel Platform で利用するロケール分、設定してください。
クライアントのなりすましを防ぐため、 redirect-uri にクライアントアプリケーションのエンドポイントを設定することを推奨します。
詳しい設定については 「 設定ファイルリファレンス 」 - 「 クライアント詳細設定 」を参照してください。
作成した<oauth-client-detail.xml>ファイルを、「conf/oauth-client-details-config」直下に配置します。
ステップ4:提供するリソースを実装する。¶
<oauth-client-resource.xml>ファイルの<client-resource target>に設定した「jp.co.intra_mart.sample.UserAccount」クラスを作成します。OAuth認証を通して提供するリソースの実装クラスを作成する場合は、”jp.co.intra_mart.foundation.oauth.provider.resource.ResourceExecutor”インタフェースを実装します。public class UserAccount implements ResourceExecutor<AccountContext> { @Override @ResponseType("application/json") public AccountContext execute(final HttpServletRequest request, final HttpServletResponse response) throws OAuthException { return Contexts.get(AccountContext.class); } }@ResponseType を指定することで、ContentTypeを指定することができます。@ResponseTypeに「application/json」を指定するとオブジェクトをJSONに、「text/xml」を指定するとオブジェクトをXMLにシリアライズしてレスポンスが返却されます。それ以外の値を設定した場合は、オブジェクトがそのまま返却されます。注意
オブジェクトをXMLにシリアライズする際には、JAXBデータ バインディングが利用されます。シリアライズするオブジェクトにはJAXBアノテーションによるクラス定義を行ってください。以上でリソースの提供が可能になります。アクセストークンを取得した後に、「https://localhost:8080/imart/oauth/user/account?access_token=<access_token>」へリクエストを送信すると以下のようなレスポンスが返却されます。{ "applicationLicenses": [], "authenticated": true, "calendarId": "JPN_CAL", "dateTimeFormats": { "IM_DATETIME_FORMAT_DATE_STANDARD": "yyyy/MM/dd", "IM_DATETIME_FORMAT_DATE_SIMPLE": "MM/dd", "locale": "ja", "IM_DATETIME_FORMAT_DATE_INPUT": "yyyy/MM/dd", "IM_DATETIME_FORMAT_TIME_INPUT": "HH:mm", "format-set-id": "IM_DATETIME_FORMAT_SET_JA_BASE", "IM_DATETIME_FORMAT_TIME_STANDARD": "H:mm", "IM_DATETIME_FORMAT_TIME_TIMESTAMP": "H:mm:ss" }, "encoding": "UTF-8", "firstDayOfWeek": 1, "homeUrl": "/home", "locale": "ja", "loginGroupId": "default", "loginTime": 1375753818835, "roleIds": [], "signature": "1xcbox8", "themeId": "im_theme_dropdown_blue", "timeZone": "Asia/Tokyo", "type": "jp.co.intra_mart.foundation.context.model.AccountContext", "userCd": "aoyagi", "userType": 1 }