Oracle® Fusion Middleware Oracle Access Management開発者ガイド 11g リリース2 (11.1.2.1) B69537-05 |
|
前 |
次 |
この章では、AndroidクライアントSDKを使用してモバイル・サービス・アプリケーションを開発する方法について説明します。このSDKは、Androidデバイス向けのセキュアなモバイル・アプリケーションを開発するためのセキュリティ・レイヤーとして機能します。このSDKを使用することにより、認証、認可、ユーザー・プロファイル・サービスおよびセキュアな記憶域を制御でき、アプリケーションの開発が簡素化されます。Mobile and Social AndroidクライアントSDKによってサポートされるAndroidのバージョンはAndroid 2.2以上です。この章の内容は次のとおりです。
第10.7項「AndroidクライアントSDKのユーザー・ロール・モジュールを使用したユーザー・プロファイル・サービスの起動」
第10.9項「AndroidクライアントSDKを使用したカスタム・モバイル・シングル・サインオン・エージェント・アプリケーションの作成」
第10.12項「AndroidクライアントSDKのセキュア・ストレージ・モジュールを使用したCredentialStoreServiceの起動」
このSDK (oamms_sdk_for_android.zip
)は、Oracle Access Management配布パッケージに含まれており、Oracle Technical Network (OTN) Webサイトからダウンロードすることもできます。
この開発者ガイドの他に、SDKでは、HTML形式のAPIドキュメントが提供されています。APIクラス、インタフェース、コンストラクタ、メソッドおよびフィールドの説明については、APIドキュメントを参照してください。
モバイルAndroidクライアントSDKはライブラリ・プロジェクトとして提供されます。次の5つのモジュールが含まれます。
認証モジュール: ユーザー、デバイスおよびアプリケーションのかわりに認証リクエストを処理します。
ユーザー・ロール・モジュール: ユーザーおよびアプリケーションが構成されたアイデンティティ・ストアからユーザーおよびグループ詳細を取得できるようにするユーザー・プロファイル・サービスを提供します。
RESTハンドラ・モジュール: REST Webサービスへのアクセス、およびAccess Managerによって保護されたREST Webサービスに対するトークンの自動注入の機能を提供します。
暗号化モジュール: ハッシング、暗号化、復号化などの暗号化タスクを実行するための簡易的なAPIを提供します。
セキュア・ストレージ・モジュール: Androidの優先ストレージを使用して機密性の高いデータを保存および取得するためのAPIを提供します。
重要: Mobile and Social AndroidクライアントSDKによってサポートされるAndroidのバージョンはAndroid 2.2以上です。 |
Androidアプリケーションの開発およびパッケージ化を行う前に、次の注意事項を確認してください。
ワークスペースへのライブラリ・プロジェクトのインポート
oamms_sdk_for_android.zip
アーカイブには、IDMMobileSDK
フォルダが含まれています。IDMMobileSDK
フォルダはライブラリ・プロジェクトです。
Eclipseでライブラリ・プロジェクトをワークスペースにインポートするには、「File」→「Import」→「Existing projects into workspace」を選択します。
アプリケーションによるライブラリの参照
Eclipseで「Project」→「Properties」→「Android」→「Library」を選択し、ライブラリ・プロジェクトに対する参照を追加します。
コンパイル前の権限文の追加
アプリケーションをコンパイルする前に、Mobile and Socialサービスを利用するアプリケーションに次の<uses-permission>
文を追加します。これらの文はAndroidManifest.xml
ファイルに追加します。これらの文は必須であり、含まれてない場合にはアプリケーションがクラッシュします。
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
権限のリクエストの詳細は、Androidの開発者向けドキュメントを参照してください。
この項では、Mobile and Socialサーバーを使用して認証する方法について説明するサンプル・コードを提供します。Mobile and Socialサーバーの構成の詳細は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のモバイル・サービスの構成に関する項を参照してください。
手順1: 必須オブジェクトの初期化とエンドポイントの宣言
次のようにMobile and Socialサーバーに関する必要な詳細情報を指定し、OMMobileSecurityService
のオブジェクトを作成します。
注意: アプリケーションが単一のOAMサーバーまたは単一のServiceDomainで認証を行う場合、 アプリケーションのライフ・サイクル全体を通じて Applicationクラスの拡張の詳細は、次のAndroidのドキュメントを参照してください。
アプリケーションの認証が、異なる複数のOAMサーバーで行われるか、または同一OAMサーバーの異なる複数の認証スキームを使用して行われる場合は、サーバーまたは認証スキームごとに1つの |
OMMobileSecurityService mss = OMMobileSecurityService(context, serverUrl, applicationId, serviceDomain, callback);
context
引数は、Application
オブジェクトのコンテキストです。Context#getApplicationContext()
によって返されるコンテキストを渡します。
注意:
|
Activity
の参照を渡さないでください。なぜなら、OMMobileSecurityService
のインスタンスはアプリケーションのライフ・サイクル全体を通じて存在し、OMMobileSecurityService
のインスタンスがActivity
の参照を保持するとメモリー・リークにつながる可能性があるためです。
serverUrl
引数は、Mobile and Socialサーバーにアクセスするために必要なURL(プロトコル、ホスト名およびポート番号を含む)です。HTTPおよびHTTPSプロトコルのみがサポートされています。
applicationId
引数は、アプリケーションを識別する一意の識別子です。この文字列値はMobile and Socialサーバー管理コンソールのアプリケーション・プロファイルのセクションにあるアプリケーション名の値に一致している必要があります。詳細は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のアプリケーション・プロファイルの定義に関する項を参照してください。
serviceDomain
引数には、Mobile and Socialサーバーで作成されたサービス・ドメインの名前を指定します。applicationId
が参照するアプリケーション・プロファイルは、このサービス・ドメイン内でアプリケーション・プロファイルとして定義されている必要があります。詳細は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のサービス・ドメインの定義に関する項を参照してください。
callback
引数には、インタフェースOMMobileServiceCallback
を実装しているクラスのインスタンスを指定します。SDKはOMMobileSecurityService#setup()
およびOMMobileSecurityService#authenticate()
をコールした後に、これを使用してアプリケーションに制御を戻します。
setup()
、authenticate()
、authenticate(String userName, char[] password
,
OMAuthenticationRequest authRequest
, String credentialKey)
、processSSORequest(Intent intent)
、processHttpRequest(Intent intent)
など、OMMobileSecurityService
内のメソッドを呼び出す前に、必ず現在のアクティビティを登録してください。フォアグラウンドでなくなったら、このアクティビティの登録を解除します。メモリー・リークを防止するため、これは必ず実行してください。現在のアクティビティへの参照を渡すには、前述のメソッドをコールするアクティビティに関して、onResume()
の中で現在のアクティビティを登録し、onPause()
の中でアクティビティの登録を解除します。アクティビティのonCreate()
の中でこれらのメソッドのいずれかをコール場合は、それらのメソッドをコールする前にアクティビティを登録します。アクティビティの登録を解除するには、アクティビティがバックグラウンドに移動するときにOMMobileSecurityService#deregisterActivity()
メソッドを使用します。
mss.registerActivity(this);
次に、OMMobileSecurityService
setup
メソッドをコールします。
mss.setup();
setup
メソッドは、Mobile and Socialサーバーから構成済セキュリティ・ポリシーおよびアプリケーション・プロファイルを取得します。このメソッドは、Mobile and Socialサーバー上で認証、認可およびユーザー・プロファイル・サービスに接続するために必要なサービス・エンドポイント(URL)のリストも取得します。
これは非同期コールです。アプリケーション・プロファイルのダウンロードが完了するか、またはネットワーク切断などの問題が発生した場合、SDKはcallback.processSetupResponse(OMApplicationProfile profile, OMMobileSecurityException mse)
をコールすることによって、コール元のアクティビティに制御を返します。アプリケーション・プロファイルをダウンロードできなかった場合は、OMMobileSecurityException mse
で例外の詳細を確認できます。
SDKはアプリケーション・プロファイルのダウンロードと格納を行います。ProfileCacheDuration
で設定された有効期限が切れるまでは、以降のOMMobileSecurityService#setup()
のコールでアプリケーション・プロファイルはダウンロードされません。ProfileCacheDuration
の設定はアプリケーション・プロファイルの中で定義されます。
追加情報
次の表は、Mobile and Socialで定義される、標準的なアプリケーション・プロファイルの属性を示しています。SDKは、アプリケーション・プロファイルをダウンロードした後に、これらの属性の解析と格納を行います。
表10-1 構成属性
属性 | 説明 |
---|---|
アクセス・サービスURL |
Oracle Access Managementサーバーからアクセス・トークンを取得するために使用するURLです。 |
オフライン認証の許可 |
オフライン認証を許可するかどうかを示します。 |
Androidアプリケーションの署名 |
Androidアプリケーションの署名です。 |
要求属性 |
アイデンティティ要求の一環としてデバイスから収集される各種属性の名前を表す、カンマで区切られた文字列です。 |
アプリケーション登録の資格証明レベル |
これは、モバイル・シングル・サインオンのコンテキストでは、ビジネス・アプリケーションの登録でユーザー名/パスワードの組合せ、またはユーザー・トークンのいずれを使用するかを指定します。 |
削除サービスURL |
Oracle Access Managementサーバーからトークンを削除するために使用するURLです。 |
モバイル認証スキーム |
ユーザー認証で使用する認証スキームを指定します。これには、列挙 |
オフライン認証再試行回数 |
オフライン認証の最大試行回数です。これを超えるとクライアントに失敗が送信されます。 |
SSOへの参加 |
アプリケーションがモバイル・シングル・サインオンをサポートするかどうかを指定します。 |
プロファイル・キャッシュ継続時間 |
システムがアプリケーション・プロファイルをキャッシュする時間の長さ(分)です。 |
登録サービスURL |
デバイスの登録に使用される登録サービスURLです。 |
リライイング・パーティの認証モード |
埋込みWebViewの内部からまたは外部ブラウザからインターネット・アイデンティティ認証を呼び出すかどうかを指定します。有効な値はEmbeddedまたはExternalです。 |
リライイング・パーティ認証URL |
リライイング・パーティ認証URLです。 |
トークン検証サービスURL |
トークンの検証に使用されるサービスURLです。 |
URLスキーム |
インターネット・アイデンティティの戻りURLで使用されるURLスキームを指定します。例: rp:// |
ユーザー認証サービスURL |
Oracle Access Managerサーバーに対してユーザーを認証するために使用されるサービスURLです。 |
ユーザー・プロファイル・サービスURL |
構成されているディレクトリ・サーバーからのユーザーおよびグループの情報にアクセスするために使用されるサービスURLです。 |
Mobile and Social管理コンソールのアプリケーション・プロファイルの「カスタム設定」セクションの下で次の属性を構成します。構成する属性に関しては、次の表に示す属性の名前をコンソールに入力します。属性の値はアプリケーション・プロファイルの一部としてダウンロードされ、値はSDKによって内部で設定されます。
表10-2 コンソールUIで構成される属性
属性 | 説明 |
---|---|
|
サーバーとSDKの間のHTTP接続がタイムアウトになる時間の長さ(秒)です。 |
|
オフライン認証のためにパスワードを保存する際にハッシュまたは暗号化を行うかを示すCryptoSchemeの列挙です。有効な値は、 |
|
オフライン認証コンテキストが削除されるまでの時間の長さ(秒)です。 |
手順2: 認証プロセスの実行
設定が正常に完了したら、ビジネス・アプリケーションはOMMobileSecurityService#authenticate()
をコールすることによって認証を実行できます。これは非同期コールであり、認証の完了後、またはなんらかの理由で認証が失敗した場合、SDKは制御をアプリケーションに返します。アプリケーションへの制御の戻しは、OMMobileServiceCallback#processAuthenticationResponse(OMAuthenticationContext context, OMMobileSecurityException mse)
を通じて行われます。認証セッションに関するすべての詳細は、OMAuthenticationContext
コンテキストでアクセスできます。なんらかの理由で認証に失敗した場合は、OMMobileSecurityException mse
に詳細が格納されます。
次のようにページを設定します。
View view = mss.authenticate(); setContentView(view);
authenticate()
メソッドは、処理中のビューを保持するViewFlipper
オブジェクトを返します。このビューにフォーカスが設定されると、実際の認証フローがトリガーされます。
前述のリクエストに関して、有効な認証コンテキストがすでにキャッシュ内に存在する場合は、サーバーへのリクエストを行わずにコール元のビジネス・アプリケーションに制御が返されます。
次のサンプル・コードは、processAuthenticationResponse()
メソッドの使用方法を示しています。
public void processAuthenticationResponse(OMAuthenticationContext context, OMMobileSecurityException mse) { if (context != null) { Toast.makeText(getApplicationContext(), "Logged in successfully.", Toast.LENGTH_LONG).show(); } else { Toast.makeText(getApplicationContext(), "Failure in login due to " + mse.getLocalizedMessage(), Toast.LENGTH_LONG).show(); } }
第10.2項で示したコンストラクタ以外にも、次のコンストラクタを使用してAndroidクライアントSDKを初期化できます。
public OMMobileSecurityService(Context context, Map<String, Object> configProperties,OMMobileServiceCallback callback)
このコンストラクタは開始時に詳細情報を受け取り、Map<String, Object>
を使用してOMMobileSecurityService
オブジェクトを初期化します。これにより、OM_PROP_AUTH_KEY
、OM_PROP_LOCATION_UPDATE_ENABLED
、OM_PROP_CRYPTO_SCHEME
などの追加パラメータを指定できます。これらの追加パラメータは、前述のコンストラクタによる初期化時には指定できません。これらのプロパティは、表10-3で説明されています。第10.2項で説明するコンストラクタを使用してOMMobileSecurityService
オブジェクトを構築する場合は、セッターを使用してこれらのパラメータを設定することもできます。次に例を示します。
OMMobileSecurityConfiguration mobileSecurityConfiguration = mobileSecurityService.getMobileSecurityConfig(); MobileSecurityConfiguration.setLocationUpdateEnabled(true);
初期化サンプル・コード
Map<String, Object> configProp = new HashMap<String, Object>(); //The following strings should be available in configProperties. //Otherwise, IllegalArgumentException will be thrown configProp.put(OMMobileSecurityService.OM_PROP_AUTHSERVER_TYPE, OMMobileSecurityService.AuthServerType.OAMMS); configProp.put(OMMobileSecurityService.OM_PROP_OAMMS_SERVICE_DOMAIN, "xyzDomain"); configProp.put(OMMobileSecurityService.OM_PROP_APPNAME, "ShopCart"); configProp.put(OMMobileSecurityService.OM_PROP_OAMMS_URL, "http://examplehost.us.example.com:14100"); //This next line is optional. If you do not include it, a default key //is used which is <OAMMS_URL>_<APPNAME>_<SERVICE_DOMAIN> //configProp.put(OMMobileSecurityService.OM_PROP_AUTH_KEY, "testKey"); OMMobileSecurityService mss = new OMMobileSecurityService(getApplicationContext(), configProp, callback); //In the previous line, getApplicationContext() is the context of the //calling application, and callback is the instance of a class that has //implemented the interface OMMobileServiceCallback.
次の表は、Map<String, Object>
に値を格納する際に使用するキーについての説明です。
表10-3 AndroidクライアントSDKの初期化プロパティ
プロパティ名 | プロパティの値 | 型 |
---|---|---|
|
|
Enum |
|
必須プロパティ。プロトコル、ホスト、ポートの情報を次の形式で保持する文字列です。<protocol> |
String |
|
必須プロパティ。Stringオブジェクトとして渡される任意の有効なサービス・ドメイン名。 |
String |
|
必須プロパティ。Stringオブジェクトとして渡される有効なアプリケーション名。 |
String |
|
共有プリファレンス内に これはオプション・プロパティです。このプロパティが指定されないとき、すべての値がnullでない場合には、<login_url>_<applicationName>_<serviceDomain>キーを使用して格納されます。nullが含まれる場合は、<applicationName>のみを使用して格納されます。 |
String |
|
このプロパティを使用して場所の更新を有効または無効にします。これを有効にすると、SDKはデバイスの場所の詳細を収集し、サーバーに送信します。 |
Boolean |
|
認証がどのように行われるかを指定します。具体的には、認証が常にオンラインまたはオフラインで実行されるか、あるいはネットワーク接続に応じてオンライン/オフラインを切り替えるかを指定します。 これはオプション・プロパティです。デフォルトでは、ネットワーク接続に応じてオンライン/オフラインを切り替えて認証が行われます。 |
Enum(OMConnectivityMode) |
次のOM_PROP_CRYPTO_SCHEME暗号化プロパティはオプションのプロパティです。アプリケーションでオフライン認証が必要であるにもかかわらずこのプロパティが指定されていない場合、デフォルトの暗号スキームはSSHA512
になります。これは、アプリケーションの必要に応じて、以降のオフライン認証用にパスワードをハッシュ化/暗号化して保存するのに使用されます。
このプロパティはMobile and Socialサーバー・コンソールを使用しても設定できます。「カスタム設定」→「モバイル・カスタム属性」を選択し、表の最後の2列にある属性名および属性値を使用します。
Mobile and Social AndroidクライアントSDKに含まれる暗号化モジュールの詳細は、第10.11項「暗号化APIの使用」を参照してください。
表10-4 AndroidクライアントSDKの暗号スキームのプロパティ属性
プロパティ名 | プロパティの列挙値 | 属性名 | 属性値 |
---|---|---|---|
|
|
CryptoScheme |
PlainText |
|
AES |
||
|
SHA-1 |
||
|
SHA-224 |
||
|
SHA-256 |
||
|
SHA-384 |
||
|
SHA-512 |
||
|
SaltedSHA-1 |
||
|
SaltedSHA-224 |
||
|
SaltedSHA-256 |
||
|
SaltedSHA-384 |
||
|
SaltedSHA-512 |
Mobile and Socialでは、オフライン認証をサポートしています。
OMMobileSecurityService
オブジェクトを作成するときに、オフライン認証を行う方法を指定します。表10-3に記載されているOM_PROP_CONNECTIVITY_MODE
キーを使用します。このキーには次の値を使用できます。
OMConnectivityMode.ONLINE
: 常にサーバーとの間で認証が行われます。デバイスがインターネットに接続できない場合は失敗します。
OMConnectivityMode.OFFLINE
: キャッシュされた資格証明を使用してローカルで認証が行われます。デバイスがオンラインでサーバーと接続できる場合であっても、オフライン認証が行われます。
OMConnectivityMode.AUTO
: サーバーに接続可能な場合はサーバーとの間で認証が行われ、デバイスがインターネットに接続されていない場合はオフラインで認証が行われます。
OMMobileSecurityService
オブジェクトを作成した後は、次に示すセッターを使用してオフライン認証を設定できます。
OMMobileSecurityConfiguration mobileSecurityConfiguration = mobileSecurityService.getMobileSecurityConfig(); mobileSecurityConfiguration.setConnectivityMode(OMConnectivityMode.OFFLINE);
注意: オフライン認証は、サーバーでオフライン認証が許可に設定されている場合のみ動作します。詳細は、『Oracle Access Management管理者ガイド』のアプリケーション・プロファイルの編集または削除に関する項を参照してください。 |
この項では、Mobile and Socialサーバーとの間でリライイング・パーティ認証を実行する方法を示すサンプル・コードを紹介します。Mobile and Socialサーバーの構成の詳細は、『Oracle Access Management管理者ガイド』の「インターネット・アイデンティティ・サービスの構成」の章を参照してください。
リライイング・パーティを使用して認証を行うには、アプリケーションのメイン・アクティビティのデータ・スキームが、アプリケーション・プロファイルに構成されているURLスキームと一致している必要があります。詳細は次のページを参照してください。
http://developer.android.com/guide/topics/manifest/data-element.html
認証を行うには、通常どおりOMMobileSecurityService#authenticate()
を呼び出します。SDKによってサーバーから必要な設定が取得され、リライイング・パーティとの間で認証が行われます。認証されたら、モバイル・セキュリティ・サービス・インスタンスから認証コンテキストを取得します(OMMobileSecurityService#retrieveAuthenticationContext()
)。取得される認証コンテキスト・オブジェクトには、アイデンティティ・プロバイダ固有の情報も含まれます。認証コンテキストを使用することによって、ログイン・ユーザー名、アイデンティティ・プロバイダ名およびアイデンティティ・プロバイダのアクセス・トークンを取得できます。詳細は、SDKのドキュメントを参照してください。
注意: 次のコード・スニペットは、FacebookやGoogleなどのインターネット・アイデンティティ・プロバイダに対して認証を行うアプリケーションのメイン・アクティビティに含めてください。メイン・アクティビティとは、Mobile and Socialサーバーの「アプリケーション・プロファイル」設定で「Androidパッケージ」として定義されているアクティビティです。 「Androidパッケージ」フィールドには、Androidアプリケーションのアクティビティの完全修飾名を設定する必要があります。このアクティビティは、 |
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... Intent intent = getIntent(); if (intent.getExtras()!= null) { try { mMobileSecurityService.processSSORequest(intent); } catch (OMMobileSecurityException e) { Log.w(TAG, e.getLocalizedMessage()); } } ... }
この項では、AndroidクライアントSDKを使用してモバイル・シングル・サインオン・エージェント・アプリケーションと連携する方法について説明します。Mobile and Socialでのモバイル・シングル・サインオンに関する概念情報は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のモバイル・シングル・サインオン(SSO)機能の概要に関する項およびMobile and Socialの理解に関する項を参照してください。
サンプルのモバイルSSOエージェント・アプリケーション
Mobile and Socialでは、必要なロジックを示すサンプルのSSOエージェント・アプリケーションを提供します。このロジックを任意のビジネス・アプリケーションに適用して、アプリケーションがモバイルSSOエージェントとして機能できるようにします。サンプルのモバイルSSOエージェント・アプリケーションは、Oracle Technical Network (OTN) Webサイトからダウンロードできます。
サンプルのモバイルSSOエージェント・アプリケーションのデータ・スキームは"osa"であることに注意してください。Mobile and Socialサーバーのアプリケーション・プロファイルに、URLスキームとしてこれを入力します。本質的には、iOS SSOエージェント・アプリケーションのURLスキームと、Android SSOエージェント・アプリケーションのデータ・スキームは同じものです。最後に、アプリケーション・プロファイルをMobile and Socialサーバー上のサービス・ドメインに追加する際、モバイル・シングル・サインオン(SSO)構成属性(シングル・サインオンへの参加およびエージェント優先度)を構成します。
Mobile and SocialサーバーでのSSO構成の詳細は、『Oracle Access Management管理者ガイド』のサービス・ドメインの編集または削除に関する項およびアプリケーション・プロファイルの編集または削除に関する項を参照してください。
シングル・サインオンが機能するためには、SSOエージェント・アプリケーションおよびSSOクライアント・アプリケーションの両方について、それぞれのアプリケーション・プロファイルにAndroidアプリケーションの署名を入力します。アプリケーションの署名は、次のコード・スニペットを使用してプログラムで取得できます。このコード・スニペットはアプリケーションのアクティビティの中に含めます。
try { packageInfo = getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), PackageManager.GET_SIGNATURES); for (Signature signature : packageInfo.signatures) { Log.i(TAG, "The signature is : " + signature.toCharsString()); } } catch (NameNotFoundException e) { e.printStackTrace(); }
独自のモバイルSSOエージェント・アプリケーションを作成する場合は、第10.9項「AndroidクライアントSDKを使用したカスタム・モバイル・シングル・サインオン・エージェント・アプリケーションの作成」を参照してください。
SSOエージェント・アプリケーションがデバイスにインストールされている場合、SSOクライアントとして構成されているアプリケーションがOMMobileSecurityService#authenticate()
を呼び出すと、AndroidクライアントSDKはSSOエージェント・アプリケーションにリクエストを委任します。そうでない場合は、例外がスローされます。AndroidクライアントSDKは認証リクエストを構築し、インテントを使用してSSOエージェント・アプリケーションを呼び出します。
注意: アプリケーション(SSOクライアント)でSSOエージェント・アプリケーションを使用した認証が必要な場合は、メイン・アクティビティで メイン・アクティビティとは、Mobile and Socialサーバーのアプリケーション・プロファイルで「Androidパッケージ」として構成されているアクティビティです。 |
次のサンプル・コードを参照してください。
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); … … Intent intent = getIntent(); if (intent.getExtras()!= null) { try { mMobileSecurityService.processSSORequest(intent); } catch (OMMobileSecurityException e) { Log.w(TAG, e.getLocalizedMessage()); } } … … }
Webアプリケーションは、モバイルSSOエージェントによって提供されるシングル・サインオン認証機能を使用することもできます。この機能にはAccess Managerが必要です。
Oracle Access Management管理コンソールにログオンして、「ポリシー構成」タブをクリックします。
「共有コンポーネント」で、「認証スキーム」をクリックし、「作成」ボタンをクリックします。
認証スキームの作成タブが開きます。
次のようにフォームに入力して、新しい認証スキームを作成します。
名前: MobileSSOScheme
認証レベル: 2
チャレンジ・メソッド: FORM
チャレンジ・リダイレクトURL: /oam/server/
認証モジュール: LDAP
チャレンジURL: /mobilesso?serviceDomain=
MobileServiceDomain
ここで、MobileServiceDomainは、シングル・サインオン用に構成されるドメインの名前です。
コンテキスト・タイプ: customWar
コンテキストの値: /oic_rest
Oracle Access Management管理コンソールで、次の手順を実行します。
アプリケーション・ドメインで新しい認証スキームを作成します。
認証スキーム: MobileSSOScheme
(MobileSSOSchemeは、手順1で作成されたスキームです。)
/protectedRes
などのHTTPリソースを作成し、作成された認証スキーム(MobileSSOScheme)を使用してそのリソースを保護します。これは、モバイルWebブラウザからアクセスでき、Webgateによって保護されるURIです。
保護されたリソースにモバイル・ブラウザを使用してアクセスすると、サーバーはモバイルSSOエージェント・アプリケーションを呼び出します。エージェント・アプリケーションはメイン・アクティビティのonResume()
の中でOMMobileSecurityService#processSSORequest(intent)
を呼び出すため、認証、OAM_ID
トークンの取得、このトークンの注入、ブラウザへの制御の戻しなどの複雑な操作については、エージェント・アプリケーションはSDKに制御を委任します。必要なトークンはSSOエージェント・アプリケーションによって設定されるため、ブラウザは保護されたリソースにアクセスできるようになります。
この項では、AndroidクライアントSDKを使用して、Mobile and Socialと連携するように構成されているディレクトリ・サーバーでユーザーおよびグループの作成、読取り、更新または削除を行う方法について説明します。ディレクトリ・サーバーと連携するようにMobile and Socialサーバーを構成するには、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のユーザー・プロファイル・サービス・プロバイダの定義、変更および削除に関する項、およびユーザー・プロファイル・サービス・プロファイルの定義、変更および削除に関する項を参照してください。
サービス・ドメインの「サービス保護」タブで設定を調整することによって、ユーザー・ロール・モジュールを匿名で使用するか、または認証後のみ使用するように構成できます。
いずれの場合でも、最初にOMMobileSecurityService
インスタンスからOMUserProfileService
のインスタンスへの参照を取得する必要があります。それには、OMMobileSecurityService#getUserRoleProfileService(OMAuthenticationContext)
を呼び出します。
次の手順は、実行する操作に応じて、UserManager
またはRoleManager
のいずれかのインスタンスを取得することです。UserManager
のインスタンスは、ユーザーの詳細を取得するのに使用できます。一方、RoleManager
のインスタンスは、Mobile and Socialサーバーのアプリケーションのドメインに関連付けられているアイデンティティ・ストアからグループの詳細を取得するのに使用できます。
認証の成功後に取得したAuthenticationContext
を渡すことによって、OMUserProfileService
のインスタンスを取得します。認証後は、OMMobileSecurityService#retrieveAuthenticationContext()
を使用して認証コンテキストを取得できます。
次のサンプルでは、mMobileSecurityService
はOMMobileSecurityService
のインスタンスです。
OMUserRoleProfileService userProfileService = mMobileSecurityService.getUserRoleProfileService(authContext);
これらのサービスに対する匿名アクセスが必要な場合は、null
を渡します。
OMUserRoleProfileService userProfileService = mMobileSecurityService.getUserRoleProfileService(null);
次のように、UserManager
またはRoleManger
のいずれかのインスタンスを取得します。
OMUserManager userManager = userProfileService.getUserManager(); OMRoleManager roleManager = userProfileService.getRoleManager();
次のメソッドはuserManager
を使用して呼び出せます。これらのメソッドはすべて、ネットワークを介してMobile and Socialサーバーと通信します。したがって、これらのメソッドはUIスレッドではなく、バックグラウンド・スレッドから呼び出す必要があります。
public List<OMUser> searchUsers(Map<String, String> searchFilter, List<String> attrsToFetch, int startIndex, int size, boolean isSimpleSearch) throws OMMobileSecurityException public OMUser searchUser(String userId, List<String> attrsToFetch, boolean shouldPrefetchManager) throws IOException, JSONException, OMMobileSecurityException public OMUser modifyUser(String uid, String telephoneNumber, String mobile, String mail, String address) throws OMMobileSecurityException public boolean deleteUser(String userId) throws OMMobileSecurityException public boolean createUser(Map<String, String> attrVals) throws OMMobileSecurityException
次のメソッドはroleManager
を使用して呼び出せます。OMUserManager
のメソッドの場合と同様に、OMRoleManager
のすべてのメソッドはバックグラウンド・スレッドから呼び出す必要があります。
public OMRole getRole(String roleName) throws IOException, JSONException,OMMobileSecurityException public boolean createRole(Map<String, String> attrVals) throws OMMobileSecurityException public OMRole modifyRole(String rolename, Map<String, String> attrVals) throws OMMobileSecurityException public boolean deleteRole(String roleName) throws OMMobileSecurityException public OMUser getUserFromRole(String userId, String role) throws OMMobileSecurityException public void addUserToRole(String roleName, Map<String, String> attrVals) throws OMMobileSecurityException public boolean deleteUserFromRole(String roleName, String userId) throws OMMobileSecurityException
Mobile and Social SDKを使用して、Mobile and SocialサービスによりAccess Managerに対して認証できます。Access Managerに対して認証すると、SDKはトークンを取得し、それをCookieストアで永続化して、Access Managerで保護されたアプリケーションが埋め込まれたWebブラウザを使用できるようにします。ただし、Access Managerで保護されているREST Webサービスは、Webブラウザを使用してアクセスできません。
Mobile and Social AndroidクライアントSDKは、REST Webサービス、またはAccess Managerによって保護されている任意のWebリソースにアクセスするために、次のメソッドを提供します。
OMMobileSecurityService#processHttpRequest(HttpRequest httpRequest)
それらにアクセスするためには、最初にユーザーの認証が行われる必要があります。リソースがAccess Management 11g R2 Webgateによって保護されている場合、AndroidクライアントSDKは、認証時に取得したユーザー・トークンを使用してそれらのリソースのアクセス・トークンを取得します。
次のサンプル・コードでは、現在のアプリケーションの有効なユーザー・トークンが見つからない場合に(ユーザーが認証されていない場合など)、コードが例外をスローします。このメソッドはネットワークを介してサーバーにアクセスするため、バックグラウンド・スレッドで実行します。
HttpRequest httpRequest = new HttpGet("http://abc.example.com:7778/index.html"); // It is important to set the User-Agent to the value configured for // "OAMAuthUserAgentPrefix" parameter in OAM 11g R2 Webgate in user defined parameters httpRequest.setHeader("User-Agent", "OAMMS-Agent"); try { HttpResponse response = mss.processHttpRequest(httpRequest); // The developer may extract the useful information from the "response" object } catch (OMMobileSecurityException mse) { Log.d("processHttpRequest", mse.getLocalizedMessage()); }
OMMobileSecurityService#processHttpRequest(HttpRequest)
メソッドは、REST WebサービスがOracle Access Management 11g R2 Webgateを使用して保護されている場合のみ、Access Managerから必須トークンを取得できます。Access Management 11g R2 Webgateのユーザー定義パラメータには、OAMAuthUserAgentPrefix
プロパティが含まれている必要があります。サンプル・コードに示すように、モバイル・アプリケーションのヘッダーにOAMAuthUserAgentPrefix
プロパティの値を指定する必要があります。
次の手順は、このメソッドが呼び出されたときの内部フローの説明です。
OMMobileSecurityService#processHttpRequest(HttpRequest)
が、モバイル・アプリケーションによって指定されたURLを呼び出します。
Oracle Access Management 11g R2 Webgateが次のような詳細で401エラーを返します。
HTTP/1.1 401 Authorization Required WWW-Authenticate: OAM-Auth realm="<WebGateName>:<AuthenticationLevel> <RelativeRESTURL>", request-ctx="<RequestContext>"
Mobile and Social SDKは、アプリケーションの有効期間中に取得したアクセス・トークンのキャッシュを保持します。このWebgateのアクセス・トークンがすでにキャッシュに存在する場合、SDKはアプリケーション・リクエストにアクセス・トークンを挿入します。
Webgate用アクセス・トークンがMobile and Social SDKキャッシュで使用できない場合、RESTリクエストをMobile and Socialサーバーに送信してWebgate用アクセス・トークンを取得します。
リクエストが有効な場合、Mobile and Socialはレスポンスでアクセス・トークンを返します。
Mobile and Social SDKは、Mobile and Socialサーバーによって返されるトークンを挿入し、保護されたURLにアクセスします。
この項では、AndroidクライアントSDKを使用してカスタムのモバイル・シングル・サインオン(SSO)エージェント・アプリケーションを作成する方法について説明します。
SSOエージェント・アプリケーションがデバイスにインストールされている場合、SSOクライアントとして構成されているアプリケーションがOMMobileSecurityService#authenticate()
を呼び出すと、AndroidクライアントSDKはSSOエージェント・アプリケーションにリクエストを委任します。そうでない場合は、例外がスローされます。AndroidクライアントSDKは認証リクエストを構築し、インテントを使用してSSOエージェント・アプリケーションを呼び出します。認証リクエストを処理するためには、SSOエージェント・アプリケーションはこのインテントを取得し、OMMobileSecurityService#processSSORequest(intent)
を呼び出す必要があります。SDKは認証リクエストを内部的に処理および検証し、有効な認証コンテキストとともに制御をクライアント・アプリケーションに戻します。
エージェント・アプリケーションのOMMobileSecurityService
オブジェクトがコンストラクタOMMobileSecurityService(Context context, Intent intent, OMMobileServiceCallback callback)
を使用して初期化されていない場合、OMCredentialStoreオブジェクトと次のコード・スニペットに示す詳細を指定します。
OMCredentialStore credentialService = mMobileSecurityService.getCredentialStoreService(); OMMobileSecurityConfiguration cnfg = mMobileSecurityService.getMobileSecurityConfig(); credentialService.putString("sdkInitParams_serverUrl", cnfg.getServerURL().toString()); credentialService.putString("sdkInitParams_serviceDomain", cnfg.getServiceDomain()); credentialService.putString("sdkInitParams_applicationId",appID); //appID is the application ID string
次のコード・スニペットは、クライアントのリクエストを処理する前に、エージェント・アプリケーション内で実行する必要のあるチェックを示しています。
@Override protected void onResume() { super.onResume(); mMobileSecurityService.registerActivity(this); if (!(SSOApplication) getApplication().isSetupCompleted()) { mMobileSecurityService.setup(); } Intent intent = getIntent(); if (intent.getData() != null || intent.getExtras() != null) { try { authView = mMobileSecurityService.processSSORequest(intent); if (authView != null) { setContentView(authView); // The developers have full control on how they want to // display this view in their app. } } catch (OMMobileSecurityException e) { Log.w(TAG, e.getErrorMessage()); } } }
どのような設計のアプローチを使用してもかまわないことに注目してください。このサンプル・コードは、SDKの使用方法を紹介するためのものです。
class SSOAgentCallback implements OMMobileServiceCallback { @Override public void processSetupResponse(OMApplicationProfile profile, OMMobileSecurityException mse) { if (profile != null) { // Setup successful you may go for authentication now ((SSOApplication) getApplication()).setSetupCompleted(true); Toast.makeText(SSOActivity.this, "Setup Done", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(SSOActivity.this, "Setup failed", Toast.LENGTH_LONG).show(); } } @Override public void processAuthenticationResponse( OMAuthenticationContext context, OMMobileSecurityException mse) { /* * Handle post authentication in case of SSO self auth request, i.e. * when the SSO Agent app calls * OMMobileSecurityService#authenticate(). Note: If authentication * request comes from a client application , we will not get this * call back, as the sdk will redirect to the client app after * successful authentication */ } }
次に示すように、エージェントはアプリケーション内に自己認証ロジックを含めることもできます。
@Override public void onClick(View v) { switch (v.getId()) { case R.id.login_button: try { if (!((SSOApplication) getApplication()).isSetupCompleted()) { mMobileSecurityService.setup(); } authView = mMobileSecurityService.authenticate(); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT); relLayout.addView(authView,params); } catch (OMMobileSecurityException e) { e.printStackTrace(); } break; … … } }
このSDKでは、基本的なログイン・ビューおよびナレッジ・ベースの回答ビューがデフォルトで表示されます。カスタムのユーザー定義レイアウトを作成するには、次のようにします。
OMMobileSecurityService
クラスは、次のシグネチャを持つメソッドを提供します。
public void setCredentialCollector(OMAuthenticationServiceType serviceType, OMCredentialCollector viewHandler)
このメソッドを使用して、次のようにカスタム・ビューを設定できます。
mobileSecurityService.setCredentialCollector(OMAuthenticationServiceType.DEVICE_AUTHENTICATION, new MyLoginView(getApplicationContext())); mobileSecurityService.setCredentialCollector(OMAuthenticationServiceType.KBA_AUTHENTICATION, new MyKBAView(getApplicationContext()));
このアプローチに沿って、OMAuthenticationServiceType
でサポートされている任意の認証サービス・タイプ用のカスタム・ビューを設定します。
MyLoginView
は、OMCredentialCollector
インタフェースを実装するカスタム・クラスです。このSDKによって表示されるカスタム・ビューは、このメソッドから返される必要があります。
OMCredentialCollector#processViewRequest(Map<String, String> inputParams, OMCredentialCollectorCallback callback)
このメソッドを記述して、ユーザー名とパスワード、またはセキュリティ・アンサーを収集し、それらの値をSDKに渡します。Map<String, String>
型のオブジェクトに値を格納し、callback.processLoginResponse(Map<String, String>)
を使用してこのオブジェクトをSDKに渡します。
ログイン・ビューのカスタマイズでは、ユーザー名とパスワードの値に次のキーを使用します。
OMSecurityConstants.USERNAME OMSecurityConstants.PASSWORD
KBAビューのカスタマイズでは、セキュリティ・アンサーに次のキーを使用します。
OMSecurityConstants.ANSWER_STR
リクエストで例外が発生すると、SDKは、次のメソッドの入力パラメータであるinputParams
マップに例外を格納します。
OMCredentialCollector#processViewRequest(Map<String, String> inputParams, OMCredentialCollectorCallback callback)
SDKがエラー・メッセージを送信したら、それがビューに表示されるようにカスタム・ビューを設計します。エラー・メッセージを取得するには次のキーを使用します。
OMSecurityConstants.ERROR_MESSAGE
KBAビューの場合は、inputParams
マップの一部として質問を利用できます。次のキーを使用します。
OMSecurityConstants.QUESTION_STR
inputParams
マップから質問を取得し、それをビューに表示するようにOMCredentialCollector#processViewRequest(Map<String, String> inputParams, OMCredentialCollectorCallback callback)
を定義します。
ログイン・ビューのカスタマイズについては、次のサンプル・コードを参照してください。
class MyLoginView implements OMCredentialCollector { ... @Override public View processViewRequest(Map<String, String> inputParams, OMCredentialCollectorCallback callback) { // Create the basic auth view LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); basicAuthView = inflater.inflate(R.layout.mybasicauth, null); ... // You can enable username and password EditText Views, which may be disabled when the log in button is pressed Button button = (Button) basicAuthView.findViewById(R.id.login); button.setOnClickListener(new AuthenticationLoginListener(callback)); Button cancelButton = (Button) basicAuthView.findViewById(R.id.cancel); cancelButton.setOnClickListener(new AuthenticationCancelListener(context, callback)); String errorMsg = inputParams.get(ERROR_MESSAGE); TextView errorMsgTv = (TextView) basicAuthView.findViewById(R.id.errorMsg); if (errorMsg != null && !errorMsg.isEmpty()) { errorMsgTv.setVisibility(View.VISIBLE); errorMsgTv.setText(errorMsg); } else { errorMsgTv.setVisibility(View.INVISIBLE); } inputParams.remove(ERROR_MESSAGE); return basicAuthView; } //------------------------------------------------------------------------- // Inner class which handles the OnClick event //------------------------------------------------------------------------- private class AuthenticationLoginListener implements OnClickListener { OMCredentialCollectorCallback callback; AuthenticationLoginListener(OMCredentialCollectorCallback callback) { this.callback = callback; } @Override public void onClick(View v) { // The developer may show a progress bar and disable the Login and Cancel buttons Map<String, String> outputParams = new HashMap<String, String>(); outputParams.put(USERNAME, username); outputParams.put(PASSWORD, password); basicAuthView.invalidate(); callback.processLoginResponse(outputParams); } } } // This class is a part of the samples for both Login View and KBA View // Customization class AuthenticationCancelListener implements OnClickListener { private OMCredentialCollectorCallback callback; private Context context; AuthenticationCancelListener(Context context, OMCredentialCollectorCallback callback) { this.context = context; this.callback = callback; } @Override public void onClick(View view) { callback.processCancelResponse(); } }
次に、KBAビューのカスタマイズのサンプル・コードを示します。
class KBAView implements OMCredentialCollector { ... @Override public View processViewRequest(Map<String, String> inputParams, OMCredentialCollectorCallback callback) { // Create the view for KBA LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); kbaAuthView = inflater.inflate(R.layout.mykbaview, null); Button button = (Button) kbaAuthView.findViewById(R.id.casubmit); button.setOnClickListener(new AuthenticationLoginListener(callback)); Button cancelButton = (Button) kbaAuthView.findViewById(R.id.cacancel); cancelButton.setOnClickListener(new AuthenticationCancelListener( context, callback)); TextView question = (TextView) kbaAuthView.findViewById(R.id.cques); question.setText(inputParams.get(QUESTION_STR)); return kbaAuthView; } //------------------------------------------------------------------------- // Inner class which handles the OnClick event //------------------------------------------------------------------------- private class AuthenticationLoginListener implements OnClickListener { OMCredentialCollectorCallback callback; AuthenticationLoginListener(OMCredentialCollectorCallback callback) { this.callback = callback; } @Override public void onClick(View v) { // You can show a progress bar and disable the submit and // cancel buttons String answer = chalngAns.getText().toString(); Map<String, String> outputParams = new HashMap<String, String>(); outputParams.put(ANSWER_STR, answer); callback.processLoginResponse(outputParams); } } }
この項では、SDKによって提供される暗号化APIについて説明します。このSDKでは、これらのAPIを使用して、オフライン認証用の資格証明を保護および格納します。APIのメソッドの詳細は、SDKのダウンロードに含まれるAPIのドキュメントを参照してください。
OMCryptoService
は、ハッシング、暗号化、復号化、マッチングなどのすべての機能をサポートするクラスです。このインスタンスは、次のようにOMMobileSecurityService#getCryptoService()
を使用して取得できます。
OMCryptoService cryptoService = mMobileSecurityService.getCryptoService();
次に、この暗号化APIによって提供される機能の概要を示します。
ハッシング
ハッシング機能を使用して、暗号スキーム・アルゴリズムに基づいて平文のハッシュを生成します。ソルト・アルゴリズムの場合は、入力として指定されるソルトの長さを使用します。このAPIの最後のパラメータは、接頭辞としてアルゴリズム名を付加するかどうかを指定します。
出力は次の形式です。
<Algorithm Name><HashedContent><Salt>
ハッシュ化されたコンテンツおよびソルトはBase-64でエンコードされます。
アルゴリズム名を接頭辞として付加するのは、そのように指定された場合のみです。
ソルトが付加されるのは、ソルト・アルゴリズムの場合のみです。
cryptoService.hash(plainText, scheme, 10, true);
対称鍵による暗号化
このAPIは、対称鍵を使用したデータの暗号化および復号化の実行に役立ちます。暗号化で使用されるキーは自動的に生成され、資格証明ストアに格納されます。
暗号化の出力は次の形式です。
<scheme/mode/padding> <Initialization Vector><Encrypted text>:
初期化ベクターおよび暗号化されたテキストは、いずれもBase-64でエンコードされます。初期化ベクターは、後で復号化するときにも使用されます。
cryptoService.encrypt(plainText, scheme, msc.getCryptoMode(), msc.getCryptoPadding(), true);
復号化のキーは資格証明ストアから自動的に取得され、復号化されたテキストは次のメソッドの出力として得ることができます。このキーは、最初にencrypt
メソッドが呼び出されるときに、SDKによって自動的に生成されます。
cryptoService.decrypt(encodedText);
平文と暗号化/ハッシュ化されたテキストのマッチング
次のメソッドは、入力されたエンコード済テキストをチェックし、暗号化またはハッシュの際に使用されたoracle.idm.mobile.crypto.CryptoScheme
を検出します。暗号化されている場合は、エンコードされているテキストを復号化し、平文と比較します。ハッシュされている場合は、平文のハッシングを実行し、エンコードされているテキストと比較します。比較結果に応じて、trueまたはfalseを返します。
cryptoService.match(password, passwordStored, mss.getMobileSecurityConfig().getSaltLength());
SDKのCredentialStoreService
は、機密性の高いデータの格納と取出しを行います。内部では、Android SDKが提供するSharedPreferences
クラスが使用されます。詳細は、次のWebページを参照してください。
mMobileSecurityService
CredentialStoreService
は、OMMobileSecurityService#getCredentialStoreService()
を使用してOMCredentialStore
のインスタンスの参照を取得することから使用を開始します。CredentialStoreService
の参照を取得したら、資格証明ストアで資格証明の追加、更新、削除、読取りを行うことができます。詳細は、SDKのドキュメントを参照してください。
次のサンプル・コード・スニペットは、使用方法を示しています。
OMCredentialStore credentialStore = mss.getCredentialStoreService(); credentialStore.addCredential("sampleKey", "sampleUsername", "samplePassword", "sampleTenantName", properties); // properties is a Map<String, String>. This method will convert all the // parameters like username, password, tenant name and properties into a JSON // string and store the same in CredentialStore OMCredential credential = credentialStore.getCredential("sampleKey"); // This method will retrieve the credential information on supplying the correct // key
この項では、AndroidクライアントSDKによってスローされるエラー・コードおよびメッセージについて説明します。エラー・コードおよびそれに対応するメッセージは列挙としてコード化され、パブリックAPIとして公開されます。
表10-5 Mobile and Social AndroidクライアントSDKのエラー・コードおよびメッセージ
エラー・コード | 説明 |
---|---|
|
SDKがサーバーに接続できない場合、この例外がスローされます。これは、URISyntaxExceptionやIllegalArgumentExceptionなどが原因で発生する可能性があります。 |
|
ナレッジ・ベース認証(KBA)でユーザーがチャレンジ回答を入力しなかった場合、この例外がスローされます。 |
|
サーバーとの間の認証コールの実行前にユーザーがUIでユーザー名およびパスワードを入力しなかった場合、およびサーバーから401 Unauthorizedの応答があった場合、この例外がスローされます。 |
|
サーバーから返されたトークンの中に、リクエストした必要なトークンが存在しない場合、この例外がスローされます。 |
|
サーバーから返された |
|
|
|
信頼されないSSL証明書がユーザーによって拒否された場合、この例外がスローされます。 |
|
モバイル・セキュリティ構成オブジェクトに認証スキームが指定されていない場合、この例外がスローされます。 |
|
指定された認証URLが有効でない場合、この例外がスローされます。 |
|
サーバーからなんらかの内部エラーが返されたためにユーザー認証に失敗した場合、この例外がスローされます。 |
|
Identityドメイン、ユーザー名またはパスワードが正しくないために認証が成功しなかった場合、この例外がスローされます。 |
|
SDKが有効なRPログインURLを構築できない場合、この例外がスローされます。 |
|
ビジネス・アプリケーションがSSOエージェント・アプリケーションを開けない場合、この例外がスローされます。SSOエージェント・アプリケーションがデバイスにインストールされていないことが原因である場合があります。別の原因として、サーバーのSSOエージェントおよびSSOクライアントのアプリケーション・プロファイルに入力されているAndroidアプリケーション・シグネチャが、デバイスにインストールされているSSOエージェントおよびSSOクライアントのシグネチャと一致していないことが考えられます。 |
|
ビジネス・アプリケーションが自己認証を行えない場合またはSSOに参加できない場合、この例外がスローされます。これは、サーバー・コンソールの無効な構成が原因です。 |
|
Mobile & Socialサーバーからアプリケーション・プロファイルをダウンロードできない場合、この例外がスローされます。これは、サーバーURL、アプリケーションIDまたはサービス・ドメインがnullまたは空の場合に発生します。 |
|
認証でSSOエージェント・アプリケーションを呼び出すように構成されているブラウザを通じて保護対象URLにアクセスするときに |
|
SDKの |
|
SSOアプリケーションのサービス・ドメインがSSOクライアント・アプリケーションのサービス・ドメインと一致しない場合、この例外がスローされます。 |
|
ユーザーが認証前に |
|
SSOアプリケーションがコール元のビジネス・アプリケーションのアプリケーション・シグネチャを検証できない場合、この例外がスローされます。 |
|
URLスキームを通じていずれかのアプリケーションが初期化されるときに対象のフィールドへの入力がなかった場合、この例外がスローされます。 |
|
SDKで他のすべての例外が発生した場合は、この例外がスローされます。 |