Oracle® Fusion Middleware Oracle Access Management開発者ガイド 11g リリース2 (11.1.2.2.0) for All Platforms B69537-08 |
|
![]() 前 |
![]() 次 |
この章では、iOSクライアントSDKを使用してモバイル・サービス・アプリケーションを開発する方法について説明します。このSDKは、iOS上でセキュアなモバイル・アプリケーションを開発するためのセキュリティ・レイヤーとして機能します。すべてのネイティブなiOSアプリケーションは、Mobile and Socialを使用するために、このSDKを実装する必要があります。このiOS SDKは、iOS 4.3以上を実行するデバイスをサポートします。この章の内容は次のとおりです。
このSDK (oamms_sdk_for_ios.zip
)は、Oracle Access Management配布パッケージに含まれており、Oracle Technical Network (OTN) Webサイトからダウンロードすることもできます。
この開発者ガイドの他に、SDKでは、HTML形式のAPIドキュメントが提供されています。APIクラス、インタフェース、コンストラクタ、メソッドおよびフィールドの説明については、APIドキュメントを参照してください。
IDM Mobile iOSクライアントSDKは、静的ライブラリとして提供されます。次のモジュールが含まれます。
認証モジュール: ユーザー、デバイスおよびアプリケーションのかわりに認証リクエストを処理します。
セキュア・ストレージ・モジュール: iOS Keychain機能を使用して重要なデータを保存および取得するためのAPIを提供します。
ユーザー・ロール・モジュール: ユーザーおよびアプリケーションが構成されたアイデンティティ・ストアからユーザーおよびグループ詳細を取得できるようにするユーザー・プロファイル・サービスを提供します。
暗号化モジュール: 一般的な暗号化タスクのための直感的なObjective C APIを提供します。
REST Webサービス・ハンドラ・モジュール: Access Managerによって保護されたREST Webサービスへのアクセスを提供します。
注意: iOSモバイル・デバイス用のアプリケーションを開発するには、Mac OS X Snow Leopard以降を実行しているIntelベースのMacにXcode IDE (統合開発環境)がインストールされている必要があります。詳細は、iOS Dev CenterのWebサイトを参照してください。 |
Xcode環境を設定するには、次の手順に従ってください。
使用している開発環境にlibIDMMobileSDK.a
をダウンロードし、それをXcodeに追加します。
oamms_sdk_for_ios.zip
内にあるPublicHeaders
フォルダおよびPublicResources
フォルダをダウンロードします。
PublicHeaders
ディレクトリには、IDM Mobile SDKのヘッダー・ファイルが含まれています。
PublicResources
ディレクトリには、IDM Mobile SDKのリソースが含まれています。
PublicHeaders
およびPublicResources
の内容をプロジェクトに追加します。
次のフレームワークをプロジェクトに追加します。
SystemConfiguration.framework
Security.framework
CoreLocation.framework
重要: プロジェクトをリンクする前に、「Build Settings」の「Other linker flags」に-ObjC および-all_load の2つのフラグを1行で追加します。これらのフラグを使用しない場合、アプリケーションは「selector not recognized」というランタイム例外が発生してクラッシュします。
背景情報とプロジェクトにフラグを追加する方法については、次のページを参照してください。 |
IDM Mobile iOSクライアントSDKを使用してコーディングを開始できるようになりました。
重要: このiOS SDKは、iOS 4.3以上を実行するデバイスをサポートします。 |
この項では、Mobile and Socialサーバーを使用して認証する方法について説明するサンプル・コードを提供します。
サービス・プロバイダの構成方法の詳細は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のモバイル・サービスの構成に関する項を参照してください。
手順1: 必要なオブジェクトの初期化
NSMutableDictionary
オブジェクトを作成し、パラメータを指定します。
NSMutableDictionary *sdkProps = [[NSMutableDictionary alloc] init]; [sdkProps setObject:OM_PROP_AUTHSERVER_OAMMS forKey:OM_PROP_AUTHSERVER_TYPE]; [sdkProps setObject:@"http://oammsurl" forKey:OM_PROP_OAMMS_URL]; [sdkProps setObject:@"myApp" forKey:OM_PROP_APPNAME]; [sdkProps setObject:@"MobileServiceDomain" forKey:OM_PROP_OAMMS_SERVICE_DOMAIN];
次に、OMMobileSecurityService
オブジェクトを作成し、プロパティとしてDictionary
オブジェクトを渡します。
OMMobileSecurityService *mss = [[OMMobileSecurityService alloc] initWithProperties:sdkProps delegate:self];
OM_PROP_OAMMS_URL
プロパティ・キーは、Mobile and Socialサーバーにアクセスするために必要なURL(プロトコル、ホスト名およびポート番号を含む)です。HTTPおよびHTTPSプロトコルのみがサポートされています。
OM_PROP_APPNAME
プロパティ・キーは、アプリケーションを識別する一意の識別子です。この文字列値はMobile and Socialサーバー管理コンソールのアプリケーション・プロファイルのセクションにあるアプリケーション名の値に一致している必要があります。詳細は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のアプリケーション・プロファイルの編集または作成に関する項を参照してください。
OM_PROP_OAMMS_SERVICE_DOMAIN
プロパティ・キーは、このアプリケーションのアプリケーション・プロファイルを保持しているMobile and Socialサーバー内のサービス・ドメインの名前です。
手順2: 設定
次に、OMMobileSecurityService
setup
メソッドをコールします。
[mss setup];
設定メソッドにより、Mobile and Socialサーバーから構成済セキュリティ・ポリシーおよびアプリケーション・プロファイルを取得します。このメソッドは、Mobile and Socialサーバー上で認証、認可およびユーザー・プロファイル・サービスに接続するために必要なサービス・エンドポイント(URL)のリストも取得します。
設定コールは非同期コールであり、完了するとiOSクライアントSDKは次のデリゲート・メソッドをコールします。
mobileSecurityService: (OMMobileSecurityService *)mobileSecurityService didReceiveApplicationProfile:(NSDictionary *)applicationProfile error:(NSError *)error;
注意: アプリケーション開発者によって実装されるデリゲートの名前は、OMMobileServiceDelegateです。 |
このメソッドは、アプリケーション・プロファイルの詳細が格納されたNSDictionary
オブジェクトを返します。
注意: [mss setup] をコールするスレッドは、実行ループが実行されている必要があります。メイン・スレッド以外のスレッドから[mss setup] を呼び出す場合は、実行ループがデフォルト・モードで実行されていることを確認してください。
詳細は、次の場所にある『iOS Developer Library Threading Programming Guide』を参照してください。 |
手順3: 認証プロセスの実行
アプリケーション・プロファイルを受け取ったら、認証プロセスを開始します。次のサンプルに示すように、独自にカスタマイズしたログインおよびKBA(ナレッジ・ベース認証)のビューを認証リクエストに提供します。カスタマイズされたビューが不要な場合は、startAuthenticationProcess
のauthnReq
には0を渡します。カスタマイズされたログイン・ビューが渡されない場合、SDKはデフォルトのログインおよびKBAのビューをスローします。
OMAuthenticationRequest *authnReq = [OMAuthenticationRequest alloc] init]; authnReq.kbaView = myKBAView; authnReq.authView = myLoginView; [[mss startAuthenticationProcess:authnReq presenterViewController:myViewController];
これにより認証プロセスが開始され、iOSクライアントSDKがMobile and Socialサーバーと連携して認証プロセスを実行します。ユーザーがすでに認証されていて、認証トークンがまだ有効な場合、Mobile and Socialサーバーはキャッシュされたトークンを単に返すのみです。それ以外の場合、サーバーはユーザーにログイン資格証明を提供するように要求します。Mobile and Socialサーバーがナレッジベース認証を使用するように構成されている場合、iOSクライアントSDKはその詳細を自動的に処理します。
次に、iOSクライアントSDKはデリゲートのdidFinishAuthentication:error:
メソッドをコールします。このメソッドは、トークンの詳細を持つOMAuthenticationContext
を返します。
OMMobileSecurityService
オブジェクトの[mobileSecurityService authenticationContext]
メソッドを使用して、いつでもOMAuthenticatonContext
を取得します。このメソッドはブール値をとります。true
では、認証コンテキストがまだ有効かをサーバーに確認し、false
では、認証コンテキストをローカルで取得し、まだ有効かどうかを確認しません。OMAuthenticationContext
の詳細は、APIドキュメントを参照してください。
- (void)mobileSecurityService: (OMMobileSecurityService *)mobileSecurityService didFinishAuthentication: (OMAuthenticationContext *)context error: (NSError *)error { if (context == nil || error != nil) { NSString *msg = [[NSString alloc] initWithFormat:@"%@-%d: %@", [error domain], [error code], [error localizedDescription]]; UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"Err" message:msg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alertView show]; [msg release]; [alertView release]; return; } // If successful, proceed with your remaining actions. // This example gets the authenticated user's attributes // and presents it using User Profile Viewer. OMUserRoleProfileService* ups = [mss userRoleProfileService]; OMUserManager *um = [ups getuserManager]; OMUser *user = [um searchUser:context.userName attributes:nil shouldPreFetch:NO error:&error]; self.user = user; }
この時点で、アプリケーションはMobile and Socialサーバーから取得されたトークンを使用して、追加のWebサービス・コールを行うことができます。
注意: OMMobileServiceDelegate には、mobileSecurityService を含むセレクタが含まれるようになります。mobileSecurityService がない古いセレクタも利用可能です。両方が実装された場合、新しいセレクタのみが呼ばれます。 |
手順4: ログアウト
次のメソッドを呼び出して、ユーザーをログアウトします。
[mss logout:false];
Mobile and Socialのログアウト操作には、サーバー内で管理されているトークンを削除するためのREST Webサービスの起動が含まれています。ブール・パラメータのclearRegistrationHandle
がtrueの場合、サービスはキーチェーンに格納されているデバイス登録ハンドルをクリアします。falseの場合は、セッション・トークンのみが削除されます。
Webサービスの呼出しに関連しているため、操作が完了した際にOMMobileServiceDelegate
で次のデリゲートが呼ばれます。
- (void)mobileSecurityService:(OMMobileSecurityService *)mobileSecurityService didFinishLogout:(NSError *)error;
次に、このデリゲートの実装例を示します。
- (void) mobileSecurityService:(OMMobileSecurityService *)mobileSecurityService didFinishLogout:(NSError *)error { NSString *msg = nil; if (error) msg = [NSString stringWithFormat:@"%@-%05ld: %@", [error domain], (long)[error code], [error localizedDescription]]; else msg = [NSString stringWithFormat:@"You are logged out successfully"]; UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Logout" message:msg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alertView show]; [alertView release]; }
注意: iOSクライアントSDKは大量のメモリーを消費しません。SDKは登録ハンドル、認証ハンドル、アプリケーション・プロファイルおよびセキュリティ・プロファイルを格納します。iOSがメモリー量が少ないことを警告する通知を送信すると、SDKはそのキャッシュを永続化し、そのメモリーを解放します。必要に応じて、SDKは適宜ファイルまたはKeyChainItem (後で説明)から永続データを読み取ることができます。 |
URLベースの構成では、SDKを使用して簡単にアプリを構成します。これは、次のような仕組みで動作します。まず、SDK構成プロパティを含むURLを作成します。ユーザーがモバイル・ブラウザでURLを開くと、モバイル・アプリケーションはapplication:openURL:sourceApplication:annotation
デリゲート・メソッドでそのURLを受信します。モバイル・アプリケーションは、このURLをIDM Mobile SDKに渡す必要があります。SDKは構成パラメータの抽出および永続化を行い、永続化が完了すると、アプリケーションはこの構成を以降の認証で再利用できるようになります。こうすることによって、わかりやすくアプリケーションを構成できます。
構成URLは、次のパターンに従う必要があります。
<urlscheme>://[host]?<parameter1>::=<value1>&<parameter2>::=<value2>&...&<parameterN>::=<valueN>
次に例を示します。
wp://settings?AuthServerType::=OAMMSAuthentication&OAMMSURL::=http://host123.us.example.com:14100
&OAMMSServiceDomain::=MobileServiceDomain&ApplicationName::=WhitePages
urlschemeでは、アプリケーションがオープンかどうかを明示します。これは、プロジェクトのInfoセクションで「URL Schemes」を設定することによってXcodeのiOSプロジェクトに追加できます。URLスキームがOAMコンソールでの設定と一致する必要があることに注意してください。コンソールでwp
と定義されたURLスキームは、wp:// in Xcode
と定義する必要があります。URLスキームは一意である必要があります。
アプリケーション内でURLを処理して構成ステップを完了する適切な場所は、アプリケーション・デリゲートです。次にコード・サンプルを示します。
- (BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { /* This snippet assumes "settings" is passed as host in the config URL. Replace it with the actual host passed in the config URL*/ if([host url] isEqualToString:@"settings"]) { NSSet *sdkPropsFilter = [NSSet setWithObjects:OM_PROP_AUTHSERVER_TYPE, OM_PROP_OAMMS_URL, OM_PROP_OAMMS_SERVICE_DOMAIN, OM_PROP_APPNAME,nil]; [OMMobileSecurityService parseConfigurationURL:url persistInUserDefaults:true withKey:nil andFilters:sdkPropsFilter]; } return YES; }
モバイル・アプリケーションでは、URLから受け取った構成にいくつかのフィルタを適用することもできます。前述のコードで、andFilters
パラメータを参照してください。アプリケーションはこのパラメータで許可するSDKパラメータのリストを指定できます。IDM Mobile SDKは、構成URLから抽出したその他のURLパラメータを無視します。構成を受信して永続化した後、OMMobileSecurityService
オブジェクトを初期化できます。withKey
パラメータは、構成パラメータのセットを識別するために使用できます。これを0に設定すると、SDKはデフォルトの構成として取り扱います。
OMMobileSecurityService *mss = [[OMMobileSecurityService alloc] initWithDelegate:self];
これは、NSUserDefaults
に格納されている構成パラメータでOMMobileSecurityService
オブジェクトを作成します。key
に関連する構成を選択するには、次のセレクタを使用します。
- (id)initWithPropertiesAvailableInNSUserDefaultsWithKey:(NSString *)key
これによって、モバイル・アプリケーションで複数の構成パラメータ・セットを管理できます。
SDKの初期化時に次のプロパティを設定できます。
表9-1 iOSクライアントSDKの初期化プロパティ
プロパティ名 | プロパティの値 | 型 |
---|---|---|
|
|
NSString |
|
NSURLオブジェクト、またはNSURLの作成に使用できる有効なNSStringオブジェクト。 このプロパティを使用しない場合は、次のプロパティを指定します。
|
NSStringまたはNSURL |
|
必須プロパティ。NSStringオブジェクトとして渡される任意の有効なサービス・ドメイン名。 |
NSString |
|
必須プロパティ。NSStringオブジェクトとして渡される有効なアプリケーション名。 |
NSString |
|
これはオプション・プロパティですが、これを指定しないとオフライン認証は許可されません。 Mobile and Socialサーバーでも、アプリケーション・プロファイルでこのプロパティを指定できます。サーバーの設定はアプリケーションの設定よりも優先されます。 |
NSString |
|
ユーザーによるログイン試行の最大許容回数。 これはオプション・プロパティです。このプロパティが指定されない場合、許容されるログイン試行回数は1回のみです。 Mobile and Socialサーバーでも、アプリケーション・プロファイルでこのプロパティを指定できます。サーバーの設定はアプリケーションの設定よりも優先されます。 |
NSNumber |
|
このプロパティを使用して、KeyChain Itemの保護レベルを指定します。 次の値のいずれかを指定する必要があります。
これはオプション・プロパティです。これが指定されない場合、このプロパティのデフォルトは最高レベルである |
NSString |
|
これはオプション・プロパティであり、デフォルト値は |
NSString |
|
デバイスの移動距離が指定された距離(メートル)を超えた場合に、ロケーションの更新が送信されます(有効になっている場合)。 このプロパティを使用して、更新の生成頻度を制御します。 Mobile and Socialサーバーでも、「モバイル・カスタム属性」セクションでキー |
NSNumber |
|
これはオプション・プロパティですが、これを指定しないと自動ログイン機能は無効化されます。 |
NSString |
|
これはオプション・プロパティですが、これを指定しないと資格証明の保存機能は無効化されます。 |
NSString |
|
これはオプション・プロパティですが、これを指定しないとユーザー名の保存機能は無効化されます。 |
NSString |
|
これはオプション・プロパティですが、これを指定しないと自動ログイン・ユーザー・プリファレンスのデフォルト値はfalseになります。 |
NSString |
|
これはオプション・プロパティですが、これを指定しないと資格証明の保存ユーザー・プリファレンスのデフォルト値はfalseになります。 |
NSString |
|
これはオプション・プロパティですが、これを指定しないとユーザー名の保存ユーザー・プリファレンスのデフォルト値はfalseになります。 |
NSString |
次のOM_PROP_CRYPTO_SCHEME暗号化プロパティはオプションのプロパティです。アプリケーションでオフライン認証が必要であるにもかかわらずこのプロパティが指定されていない場合、デフォルトの暗号スキームはOM_PROP_CRYPTO_SSHA512
になります。
このプロパティはMobile and Socialサーバー・コンソールを使用しても設定できます。「カスタム設定」→「モバイル・カスタム属性」を選択し、表の最後の2列にある属性名および属性値を使用します。サーバーの設定はアプリケーションの設定よりも優先されます。
Mobile and Social iOSクライアントSDKに含まれる暗号化モジュールの詳細は、第9.12項「暗号化モジュールの使用」を参照してください。
表9-2 iOSクライアントSDKの暗号スキームのプロパティ属性
プロパティ | 値 | 属性名 | 属性値 |
---|---|---|---|
|
|
|
|
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
Mobile and Socialの認証フローではオフライン認証がサポートされています。
startAuthenticationProcess:presenterViewController:
メソッドに渡されるOMAuthenticationRequest
オブジェクトには、connectivityMode
というプロパティがあります。このプロパティは、OMAuthenticationRequest.h
ファイルに定義されている列挙OMConnectivityMode
の値を受け取ります。
それらの値は次のとおりです。
OMConnectivityOnline
: 常にサーバーとの間で認証が行われます。デバイスがインターネットに接続できない場合は失敗します。
OMConnectivityOffline
: キャッシュされた資格証明を使用してローカルで認証が行われます。デバイスがオンラインでサーバーと接続できる場合であっても、オフライン認証が行われます。
OMConnectivityAuto
: サーバーに接続可能な場合はサーバーとの間で認証が行われます。そうでない場合、デバイスがインターネットに接続されていないときには、オフラインで認証が行われます。
オフライン認証はOMAuthenticationRequest
の一部であるため、この設定は現在のリクエストでのみ有効です。オフライン認証で失敗回数がOM_PROP_MAX_LOGIN_ATTEMPTS
で設定されている値を超えた場合(「初期化プロパティ」の項で説明)、ローカルに格納されている資格証明は消去され、オンライン認証が行われるようになります。
注意: オフライン認証は、サーバーでオフライン認証が許可に設定されている場合のみ動作します。詳細は、『Oracle Access Management管理者ガイド』のアプリケーション・プロファイルの編集または削除に関する項を参照してください。 |
ソーシャル・アイデンティティ認証とは、Google、Twitter、Facebookなどのサード・パーティのOpenIdおよびOAuthプロバイダに対する認証を可能にするためのOracle Mobile and Socialサーバーの機能です。詳細は、『Oracle Access Management管理者ガイド』の「ソーシャル・アイデンティティの構成」の章を参照してください。
ソーシャル・アイデンティティ認証(リライイング・パーティ認証とも呼ばれています)では、Mobile and Socialサーバーに対する認証と同じAPIを使用してSDKを呼び出せます。ソーシャル・アイデンティティ・サービスに対する認証を行うようにサービス・ドメインを構成する場合、SDKは自動的にリライイング・パーティ認証のフローに従います。認証が正常に行われると、Mobile and Socialサーバーで構成されているURLスキームを使用して制御がアプリケーションに戻されます。
アプリケーションのUIApplicationDelegate
オブジェクトのapplication:openURL:sourceapplication:annotation
メソッドにこのコード・スニペットを追加し、フローを完了させます。このコードは、サーバーから受け取った情報をSDKに渡して認証が完了したことを伝えるのに役立ちます。
// Called when application in invoked via some URL - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { ... ... NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] initWithCapacity:1]; [userInfo setObject:url forKey:OM_RESPONSE_URL]; //Post the notification to IDM Mobile SDK [[NSNotificationCenter defaultCenter] postNotificationName:OM_PROCESS_URL_RESPONSE object:self userInfo:userInfo]; ... ... return TRUE; }
認証が正常に行われた後は、ディクショナリOMAuthenticationContext.accessTokens
のキーOM_ACCESS_TOKEN
を使用して、プロバイダ(存在する場合)からのトークンにアクセスできます。emailid
が構成されている場合は、OMauthenticationContext.userName
としてアクセス可能です。
この項のコード・サンプルを使用する前に、このSDKに固有ではない情報について、「ユーザー・プロファイル・サービスを使用したアプリケーションの構築」を参照してください。
この項のコード・サンプルは、次の3つのカテゴリに分類されます。
ユーザーの詳細を検索および取得するには、OMMobileSecurityService
オブジェクトからOMUserManager
のハンドルを取得します。OMMobileSecurityService
オブジェクトの詳細は、「iOSクライアントSDKを使用した認証サービスの起動」を参照してください。
OMUserManager
では、ユーザーの詳細を検索および取得するための同期および非同期APIを提供します。
すべての非同期操作はOMAsyncOpHandle
オブジェクトを返します。このオブジェクトを使用して、完了前に操作を取り消すことができます。完了後に操作を取り消しても、操作は取り消されません。
- (id)getAttribute: (NSString *)attrName returningError: (NSError **)error;
- (NSArray *)searchUsersWithFilter: (NSDictionary *)filter isSimpleSearch: (BOOL)simpleSearch attributesToBeFetched: (NSArray *)attributesToFetch pageSize: (NSInteger)pageSize pagePosition: (NSInteger)pagePosition error: (NSError **)error;
- (OMAsyncOpHandle *)getAttributeAsynchronously: (NSString *)attrName;
- (OMAsyncOpHandle *)searchUsersAsynchronouslyWithFilter:(NSDictionary *)filter isSimpleSearch:(BOOL)simpleSearch attributesToBeFetched:(NSArray *)attributesToFetch pageSize:(NSInteger)pageSize pagePosition:(NSInteger)pagePosition; - (OMUser *)searchUser: (NSString *)user attributes: (NSArray *)attributes shouldPreFetch: (BOOL)preFetch error: (NSError **)error;
- (OMAsyncOpHandle *)searchUserAsynchronously: (NSString *)user attributes: (NSArray *)attributes shouldPreFetch: (BOOL)preFetch error: (NSError **)error; - (OMAsyncOpHandle *)searchAsynchronouslyUser: (NSString*)user attributes: (NSArray *)attributes shouldPreFetch: (BOOL)preFetch;
- (NSError *)deleteUser: (NSString *)userName;
- (OMAsyncOpHandle *)deleteAsynchronouslyUser:(NSString*)userName;
- (NSError *)createUserWithAttributes: (NSDictionary *)attributes;
- (OMAsyncOpHandle *)createUserAsynchronouslyWithAttributes:(NSDictionary *)attributes;
- (OMAsyncOpHandle *)modifyAsynchronouslyUser: (NSString*)user attributes: (NSDictionary *)attributes;
グループの詳細を検索および取得するには、OMMobileSecurityService
オブジェクトからOMRoleManager
のハンドルを取得します。OMMobileSecurityService
オブジェクトの詳細は、「iOSクライアントSDKを使用した認証サービスの起動」を参照してください。
OMRoleManager
では、グループの検索、メンバーのグループへの追加およびグループからのメンバーの削除を行うための同期および非同期APIを提供します。
すべての非同期操作はOMAsyncOpHandle
オブジェクトを返します。このオブジェクトを使用して、完了前にいつでも操作を取り消すことができます。完了後に操作を取り消しても、操作は取り消されません。
- (OMRole *)getRoleByName: (NSString *)roleName error: (NSError **)error;
- (OMAsyncOpHandle *)getAsynchronouslyRoleByName: (NSString *)roleName;
- (NSError *)deleteRoleByName: (NSString *)roleName;
- (OMAsyncOpHandle *)deleteAsynchronouslyRoleByName:(NSString*)name;
- (OMUser *)getUserInfo: (NSString *)userName fromRole: (NSString *)roleName error: (NSError **)error;
- (OMAsyncOpHandle *)getAsynchronouslyUserInfo:(NSString *)user fromRole:(NSString *)roleName;
- (NSError *)deleteMember: (NSString *)memberName fromRole: (NSString *)roleName;
- (OMAsyncOpHandle *)deleteAsynchronouslyMember:(NSString *)memberName fromRole:(NSString*)roleName; - (OMAsyncOpHandle *)createAsynchronouslyRoleWithAttributes:(NSArray*)attributes withValues:(NSArray*)values;
- (OMAsyncOpHandle *)modifyAsynchronouslyRole:(NSString*)role attributes:(NSArray*)attributes values:(NSArray*)values;
- (OMAsyncOpHandle *)addUserAsynchronouslyToRole:(NSString *)roleName withAttributes:(NSArray*)attributes withValues:(NSArray*)values;
次のAPIを使用して、マネージャやその部下に関する情報をリクエストします。
ユーザーのマネージャの取得
次のAPIはOMUser
で使用可能です。
- (OMUser *)getManager: (NSError **)error; - (OMAsyncOpHandle *)getManagerAsynchronously;
指定されたユーザーの部下の取得
次のAPIはOMUser
で使用可能です。
- (NSArray *)getReporteesWithAttributes: (NSArray *)attributes returningError: (NSError **)error; - (OMAsyncOpHandle *)getReporteesAsynchronouslyWithAttributes:(NSArray *)attributes;
次の手順に従って、ユーザー・プロファイル・サービスの非同期APIを使用します。
コール元のクラスは、OMEntityDelegate
を実装する必要があります。
デリゲート・メソッド-didReceiveEntities:from:withAsynchronousHandle:
を実装します。
次のコード・スニペットで、ユーザー検索操作を示します。
OMUserManager *userManager = [[mss userRoleProfileService] getUserManager]; userManager.delegate = self; //class that implements OMEntityDelegate [userManager searchUsersAsynchronouslyWithFilter:filter isSimpleSearch:YES attributesToBeFetched:attributes pageSize:pageSize pagePosition:pagePosition]; // This method receives the asynchronous operation result -(void)didReceiveEntities:(id)entities error:(NSError *)error from:(id)omObject withAsynchronousHandle:(OMAsyncOpHandle *)asyncHandle
この項では、iOSクライアントSDKを使用してモバイル・シングル・サインオン・エージェント・アプリケーションと連携する方法について説明します。Mobile and Socialでのモバイル・シングル・サインオンに関する概念情報は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のモバイル・シングル・サインオン(SSO)機能の概要に関する項およびMobile and Socialの理解に関する項を参照してください。
Webアプリケーションは、モバイルSSOエージェントによって提供されるシングル・サインオン認証機能を使用することもできます。この機能にはAccess Managerが必要です。
Oracle Access Management管理コンソールにログインします。
「起動パッド」が開きます。
「Access Manager」で、「認証スキーム」をクリックし、「認証スキームの作成」ボタンをクリックします。
認証スキームの作成タブが開きます。
次のようにフォームに入力して、新しい認証スキームを作成します。
名前: MobileSSOScheme
認証レベル: 2
チャレンジ・メソッド: FORM
チャレンジ・リダイレクトURL: /oam/server/
認証モジュール: LDAP
チャレンジURL: /mobilesso?serviceDomain=
MobileServiceDomain
ここで、MobileServiceDomainは、シングル・サインオン用に構成されるドメインの名前です。
コンテキスト・タイプ: customWar
コンテキストの値: /oic_rest
Oracle Access Management管理コンソールで、次の手順を実行します。
アプリケーション・ドメインで新しい認証スキームを作成します。
認証スキーム: MobileSSOScheme
(MobileSSOSchemeは、手順1で作成されたスキームです。)
/mobileapp
などのHTTPリソースを作成し、作成された認証スキーム(MobileSSOScheme)を使用してそのリソースを保護します。これは、モバイルWebブラウザ(iOS用モバイル版Safari)からアクセスでき、WebGateによって保護されるURIです。
Mobile and Social SDKを使用して、Mobile and SocialサービスによりAccess Managerに対して認証できます。Access Managerに対して認証すると、SDKはトークンを取得し、それをCookieストアで永続化して、Access Managerで保護されたアプリケーションが埋め込まれたWebブラウザを使用できるようにします。ただし、Access Managerで保護されているREST Webサービスは、Webブラウザを使用してアクセスできません。
Mobile and Social SDKでは、Access Managerによって保護されているREST WebサービスにアクセスするためにOMRESTRequest
クラスを提供しています。まず最初に、SDKを使用し、Mobile and SocialサービスによりOAMサーバーに対して認証します。
次に、OMMobileSecurityService
オブジェクトおよびデリゲート・オブジェクトを渡すことによって、OMRESTRequest
オブジェクトを初期化します。次のいずれかのメソッドを使用できます。
executeRESTRequest: convertDataToJSON: isJsonRepresentation returningResponse: error:
- または -
executeRESTRequestAsynchronously: convertDataToJSON:
前者は同期コールで、後者は非同期コールです。非同期コールは次のOMRESTRequestDelegate
メソッドにより結果を戻します。
didFinishExecutingRESTRequest: data: urlResponse: error: asyncHandle:
次の例は、OMRESTRequest
オブジェクトの非同期APIを示しています。
- (void)someMethod { OMMobileSecurityService *mss = ...; ... //Initialize OMRESTRequest object. In this example, instead of using //"initWithMobileSecurityService: delegate:" method, we use init method //and set the properties OMRESTRequest *restReq = [[OMRESTRequest alloc] init]; restReq.delegate = self; restReq.mobileService = mss; NSURL *url = [[NSURL alloc] initWithString:@"http://myresturl.example.com/resturl"]; NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] initWithCapacity:1]; // It is important to set the User-Agent to the values configured in the OAM 11g R2 // WebGate user defined parameters. // We need to configure OAM 11g R2 WebGate with these parameters: // i) OAMAuthUserAgentPrefix=<Prefix for User-Agent HTTP header> (Example: OIC) // ii) OAMAuthAuthenticationServiceLocation=<OIC Server URL> (Example: // http://host123.us.example.com:14100/oic_rest/rest/mobileoamauthentication) [dictionary setObject:@"OAMMS-Agent" forKey:@"User-Agent"]; NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] initWithURL:url]; [urlRequest setAllHTTPHeaderFields:dictionary]; [url release]; [dictionary release]; [urlRequest setHTTPMethod:@"GET"]; OMAsyncOpHandle *opHandle = [restReq executeRESTRequestAsynchronously:urlRequest convertDataToJSON:FALSE]; [urlRequest release]; OMLog(@"%@", opHandle); } -(void) didFinishExecutingRESTRequest:(OMRESTRequest *)RESTRequest data:(id)data urlResponse:(NSURLResponse *)urlResponse error:(NSError *)error asyncHandle:(OMAsyncOpHandle *)handle { if (error) { //In case of error, show the error message UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"REST Request Error" message:[error localizedDescription] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alertView show]; [alertView release]; } else { //Show the result in the UIAlertView NSString *disp = nil; if ([data isKindOfClass:[NSDictionary class]]) { NSDictionary *dict = (NSDictionary *)data; disp = [[dict OMJSONRepresentation] retain]; } else { disp = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; } UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Received" message:disp delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [disp release]; [alertView show]; [alertView release]; } }
注意: OMRESTRequest は、REST WebサービスがOracle Access Management 11g R2 WebGateを使用して保護されている場合のみ、Access Managerから必須トークンを取得できます。
Access Management 11g R2 WebGateのユーザー定義パラメータには、
|
次の手順では、OMRESTRequest
APIの内部フローについて説明します。
1. OMRESTRequest
APIがモバイル・アプリケーションによって提供されるURLを呼び出します。
2. Oracle Access Management 11g R2 WebGateが次のような詳細で401エラーを返します。
HTTP/1.1 401 Authorization Required WWW-Authenticate: OAM-Auth realm="<WebGateName>:<AuthenticationLevel> <RelativeRESTURL>", request-ctx="<RequestContext>"
3. Mobile and Social SDKは、アプリケーションの有効期間中に取得したアクセス・トークンのキャッシュを保持します。このWebGateのアクセス・トークンがすでにキャッシュに存在する場合、SDKはアプリケーション・リクエストにアクセス・トークンを挿入します。
4. Mobile and Social SDKキャッシュでWebGate用アクセス・トークンが使用できない場合、RESTリクエストをMobile and Socialサーバーに送信してWebGate用アクセス・トークンを取得します。
5. リクエストが有効な場合、Mobile and Socialはレスポンスでアクセス・トークンを返します。
6. Mobile and Social SDKは、Mobile and Socialサーバーによって返されるトークンを挿入します。
この項には、モバイル・シングル・サインオン・アプリケーションの作成またはアプリケーションのモバイル・シングル・サインオン・アプリケーションへの変換を開始するための情報が含まれています。モバイル・シングル・サインオン・エージェントとして機能するには、アプリケーションは他のアプリケーション(モバイルSSOクライアント)からの認証リクエストを処理するロジックを含んでいる必要があります。次の手順に従って、SDKを初期化し構成します。
OMMobileServiceDelegate
を実装するクラスに次のインスタンス変数を導入します。
BOOL _setupDone; //Indicates if the application profile was downloaded successfully NSString *_ssoAppBundleID; //Store the bundle ID of the SSO client app NSURL *_ssoRequestURL; // Stores the request URL sent by the client app BOOL _profileError; //Indicates if an error occurred in the profile download NSDictionary *_queryParams; // Stores query parameters from the SSO request URL
同じクラスに次のメソッドを追加します。
/* This method is the entry point to handle SSO requests. If the app Profile is not downloaded, it starts the download or it starts by processing the request. The App profile download can be triggered from this function if it is not being checked every time the app becomes active. */ - (void) handleRequestWithURL:(NSURL *)url bundleID:(NSString *)appBundleID { if (!_setupDone) { self.ssoRequestURL = url; self.ssoAppBundleID = appBundleID; return; } [self ssoRequestWithURL:url fromApp:appBundleID]; } /* This function invokes the SDK to process the SSO request. */ - (void)ssoRequestWithURL:(NSURL *)url fromApp:(NSString *)appBundleID { if(_profileError) { _profileError = FALSE; self.ssoAppBundleID = nil; self.ssoRequestURL = nil; return; } NSDictionary *params = [self.mobileServices parseURL:url fromApp:appBundleID]; self.ssoRequestURL = nil; self.ssoAppBundleID = nil; self.queryParams = params; /* If this is an SSO request coming from either a native app or a browser * then do the SSO flow. Else do application specific logic. */ if ([self.mobileServices isSSORequest:self.queryParams]) { [self.mobileServices processSSORequest:self.queryParams presenter:self]; //It is assumed that the class also extends UIViewController. } }
didReceiveApplicationProfile:error
メソッドに次のコードを追加します。
if (error) { _profileError = TRUE; } else { _setupDone = TRUE; } if(self.ssoRequestURL != nil && self.ssoAppBundleID != nil) { [self ssoRequestWithURL:self.ssoRequestURL fromApp:self.ssoAppBundleID]; return; }
didFinishAuthentication:error
メソッドに次のコードを追加します。
if([self.mobileServices isSSORequest:self.queryParams]) { [self dismissModalViewControllerAnimated:NO]; [error retain]; [self performSelector:@selector(completeSSOAuthentication:) withObject:(id)error afterDelay:0]; /* This is required because the SSO Agent app starts the client app registration after authentication. The registration should occur in the next run loop cycle.*/ return; } - (void)completeSSOAuthentication:(id)object { NSError *error = (NSError *)object; [self.mobileServices completeSSORequest:self.queryParams presenter:self error:error]; }
didFinishRegistration:error
メソッドに次のコードを追加します。
[registrationHandle retain]; [self dismissModalViewControllerAnimated:true]; [self.mobileServices sendSSOResponseWithHandles:registrationHandle error:loginError params:self.queryParams]; [registrationHandle release];
UIApplicationDelegate
のapplication:openURL:sourceApplication:annotation
メソッドに次を追加します。
/* This starts the SSO request handle process. You can check the request URL to make sure it is an SSO request. */ [<object of class implementing handleRequestWithURL:bundleID method> handleRequestWithURL:url bundleID:sourceApplication];
次に示すのが、application:openURL:sourceApplication:annotation
の実装例です。
- (BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { self.viewController.isConfigUpdate = false; NSString *queryString = [url query]; NSString *host = [url host]; if ([queryString hasPrefix:@"oamconfig=true&"]) { //do something } else if([host isEqualToString:@"settings"]) { //do Something } else { [self.viewController handleRequestWithURL:url bundleID:sourceApplication]; } return YES; }
サンプルのモバイルSSOエージェント・アプリケーション
Mobile and Socialでは、必要なロジックを示すサンプルのSSOエージェント・アプリケーションを提供します。このロジックを任意のビジネス・アプリケーションに適用して、アプリケーションがモバイルSSOエージェントとして機能できるようにします。開始するには、OICSSOAPP.zip
を開きます。
iOSモバイルSSOアプリケーションのアプリケーション・デリゲートがopenURL
メソッドを実装して、他のアプリケーションからのSSOリクエストを処理する必要があることに注意してください。また、URLスキームはiOSアプリケーションとMobile and Socialサーバーで定義される必要があります。最後に、アプリケーション・プロファイルをMobile and Socialサーバー上のサービス・ドメインに追加する際、モバイル・シングル・サインオン(SSO)構成属性(シングル・サインオンへの参加およびエージェント優先度)を構成します。
注意: Mobile and Socialサーバー上でのiOS固有の設定の詳細は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』の次のトピックを参照してください。
|
ログインおよびナレッジベース認証(KBA)情報をユーザーより取得するために、カスタム・ビューを作成できます。SDKは、必要に応じてこのビューをユーザーに表示します。それ以外の場合は、SDKはデフォルトのネイティブ・ビューを表示します。
カスタム・ネイティブ・ビューは、OMAuthView
をサブクラス化し、この項で後から説明するように、一部のメソッドをオーバーライドする必要があります。
ネイティブ・ビューを作成する場合は、次のようにします。
OMAuthView
をサブクラス化します。
viewLoaded
メソッドをオーバーライドします。資格証明の保存機能が一部でも有効化されている場合、authData
ディクショナリにはこの機能のための資格証明およびユーザー・プリファレンスが含まれます。
retrieveAuthData
メソッドをオーバーライドします。このメソッドで、authdata
ディクショナリにユーザーの入力を移入する必要があります。
サンプル・コード
MyLoginView.h file @interface MyLoginView : OMAuthView //Declare properties required for getting user input @end MyLoginView.m file @implementation MyLoginView -(void) viewLoaded { // Get credentials and user preferences from self.authData } -(NSDictionary *) retrieveAuthData { // Populate self.authData with user input } @end
ネイティブ・ビューをSDKに渡す場合は、次のようにします。
OMAuthenticationRequest
オブジェクトを作成します。
authView
およびkbaView
プロパティにカスタム・ネイティブ・ビュー・オブジェクトを設定します。
mss.startAuthenticationProcess:presentViewController
メソッドにOMAuthenticationRequest
オブジェクトを渡します。
サンプル・コード
// Initialize mss object OMMobileSecurityService *mss = [[OMMobileSecurityService alloc] initWithProperties:sdkProps delegate:self]; [mss setup]; //Wait for setup to complete //Create authentication request OMAuthenticationRequest *authnReq = [OMAuthenticationRequest alloc] init]; MyLoginView *loginView = [[MyLoginView alloc] init]; MyKBAView *kbaView = [[MyKBAView alloc] init]; authReq.authView = loginView; authReq.kbaView = kbaView; [mss startAuthenticationProcess:authnReq presenterViewController:myPresenter];
進行状況ビューは、ログイン画面がカスタマイズできた後に表示されます。パターンは、ログイン・ビューのカスタマイズと同様です。アプリケーションは、OMAuthProgressView
クラスの拡張およびOMAuthenticationRequest
でアプリケーションの実装のインスタンスの登録を行う必要があります。次にコード・スニペットを示します。
OMAuthenticationRequest *authReq = [[OMAuthenticationRequest alloc] init]; MyProgressView *myProgressView = [[MyProgressView alloc] initWithFrame:self.view.frame]; authReq.authProgressView = myProgressView; [myProgressView release];
iOSによって提供されている暗号化APIはCのAPIであり、使いにくいものです。Mobile and Social iOSクライアントSDKでは、一般的な暗号化タスクを実行するためのシンプルで使いやすい直感的なObjective CのAPIが提供されます。このSDKでは、ここに記載されているAPIを使用して、オフライン認証用の資格証明を保護および格納します。APIのメソッドの詳細は、SDKのダウンロードに含まれるAPIのドキュメントを参照してください。
次に、この暗号化モジュールによって提供される機能の概要を示します。
ハッシング
ハッシング機能を使用して、自動生成されたランダム・ソルト付きの文字列(通常はパスワード)のハッシュ値を取得します。また、次のAPIは出力結果にソルトを追加し、接頭辞としてアルゴリズム名を付加します。これは、ネットワークを介した保存や転送に適しています。生成されたソルトは、必要に応じてoutSalt
パラメータを使用して抽出できます。
NSString *secret = "mypassword"; NSString *outSalt; NSError *error; NSString *hashValue = [OMCryptoService SHA256HashAndBase64EncodeData:[secret dataUsingEncoding: NSUTF8StringEncoding] withSaltOfBitLength:24 outSalt:&outSalt outError:&error];
このハッシング機能で提供される機能は次のとおりです。
SHA1、SHA224、SHA256、SHA384、SHA512の各アルゴリズムを使用したハッシングを実行するための便利なAPIが提供されます。
同様の機能を持ち、ソルトなしで動作するAPIのセットも提供されます。
ソルトを個別に保存する必要がある場合にもランダム・ソルト生成メソッドを利用できます。
生成されるハッシュ値をオプションでBase64でエンコードできます。
オプションで出力結果にアルゴリズム名を接頭辞として付加できます。
便利なAPIに加えて、すべての値のカスタマイズが可能なより洗練されたメソッドも提供されます。
hashData:withSalt:algorithm:appendSaltToOutput:base64Encode:prefixOutputWithAlgorithmName:outError:
対称鍵による暗号化/復号化
このAPIは、対称鍵を使用したデータの暗号化および復号化の実行に役立ちます。次の例は、自動生成されたランダムな対称鍵を使用し、AESアルゴリズムとPKCS7パディングを使用して任意のデータを暗号化するのに役立ちます。
NSData *plainText = ... NSString *outKey; NSError *error; NSString *cipherText = [OMCryptoService encryptData:plainText withSymmetricKeyOfLength:24 outSymmetricKey:&outKey outError:&error];
前述の暗号テキストを復号化するには、次のAPIを使用できます。
NSString *plainText = [OMCryptoService decryptData:cipherText withSymmetricKey:outKey outError:&error];
サポートされるアルゴリズムは、AES128 (キー・サイズは16、24、32)、DES (キー・サイズは8)、3DES (キー・サイズは24)です。
セキュアな対称鍵生成APIが利用可能です。
生成される暗号化テキストをオプションでBase64でエンコードできます。
オプションで出力結果にアルゴリズム名を接頭辞として付加できます。
アルゴリズムの指定、ベクターの初期化、パディングなどが可能な、より洗練されたメソッドが利用可能です。
encryptData:withSymmetricKey:initializationVector:algorithm:padding:mode:base64EncodeOutput:prefixOutputWithAlgorithmName:outError: decryptData:withSymmetricKey:initializationVector:algorithm:padding:mode:isInputPrefixedWithAlgorithmName:isInputBase64Encoded:outError:
非対称鍵による暗号化
非対称鍵による暗号化のためのAPIはOMCryptoService
の一部として提供され、次の操作に役立ちます。
鍵ペアの生成およびキー・チェーンへの保存
キー・チェーン内の鍵に対する署名および検証操作
キー・チェーン内の鍵に対するラップおよびアンラップ操作
キー・チェーンからの公開鍵の抽出
キー・チェーン内の鍵ペアの削除
Mobile and Social iOSクライアントSDKは、ユーザー資格証明を安全に格納し、それをユーザー操作の有無にかかわらずログイン・サーバーに対して再生できるAPIを提供します。この機能をセキュリティが極端に重要ではないアプリケーションにデプロイすると、ユーザーが簡単にログインできるようになります。この機能には、バージョン11.1.2.2.0以上のMobile and SocialクライアントSDKが必要です。
ユーザーがログイン画面上にある最大3つまでのオプション・ボックスから1つを選択すると、この機能を使用できます。(アプリケーションで、1つ、2つまたは3つ全部のオプションを有効化することを選択できます。)2つ以上のオプションが選択された場合、優先度の高い機能が優先されます。オプションの優先度は、次のとおりです。
そのため、たとえば自動ログインおよび資格証明の保存が選択されている場合、自動ログインが優先されます。
次は、3つのオプションの説明です。
自動ログイン - Mobile and Social iOSクライアントSDKがユーザーの資格証明を安全にキャッシュし、ログイン画面に自動的に提供します。このオプションが指定されると、ログインの際にユーザーの操作が必要なくなります。認証を行う間、ユーザーにフィードバックを提供する進行状況画面が表示されます。
資格証明の保存 - Mobile and Social iOSクライアントSDKがユーザーの資格証明を安全にキャッシュし、自動的にログイン画面のユーザー名およびパスワード・フィールドを設定します。ユーザーは、ログイン・ボタンをクリックして認証プロセスを進める必要があります。必要に応じて、ユーザーは異なる資格証明を入力したり、オプション・ボックスを変更することができます。
ユーザー名のみ保存 - Mobile and Social iOSクライアントSDKがユーザー名を安全にキャッシュし、自動的にログイン画面のユーザー名を設定します。ユーザーは、パスワードを入力してログイン・ボタンをクリックし、認証プロセスを進める必要があります。必要に応じて、ユーザーは異なるユーザー名を入力したり、オプション・ボックスを変更することができます。
機能の有効化
これは、デプロイにあたってサーバー構成を必要としないクライアント側のみの機能です。前述の機能を有効化するには、次のSDK構成パラメータをコードに追加する必要があります。
表9-3 自動ログインおよび資格証明の保存機能の有効化に使用する構成パラメータ
パラメータ | 説明 |
---|---|
|
自動ログイン機能を有効化/無効化するブール値 |
|
資格証明の保存機能を有効化/無効化するブール値 |
|
ユーザー名のみ保存機能を有効化/無効化するブール値 |
ユーザー・プリファレンスの処理
mss
オブジェクトの初期化中に次のプロパティを渡して、オプション・ボックスにデフォルト値を事前移入します。trueにできるのは、次のオプションの中の1つのみです。すべてのオプション・ボックスがfalseの場合、ログイン画面のすべてのオプション・ボックスが空になります。
表9-4 オプション・ボックスのデフォルト値設定に使用する構成パラメータ
パラメータ | 説明 |
---|---|
|
「自動ログイン」オプション・ボックスのデフォルト値を指定するブール値 |
|
「資格証明の保存」オプション・ボックスのデフォルト値を指定するブール値 |
|
「ユーザー名のみ保存」オプション・ボックスのデフォルト値を指定するブール値 |
オプション・ボックスの状態をキーと値のペアとしてNSUserDefaults
に永続化します。各ログイン接続用のユーザー・プリファレンスが一意に識別されるように、サーバーURLおよびアプリケーションの識別子の組合せをキーとして使用します。
モバイル・デバイスからの資格証明およびプリファレンスの消去
ユーザーの資格証明が最終ログイン以降に変更された場合や、ネットワークやサービスの問題でモバイル・デバイスが認証サービスにアクセスできない場合、認証が失敗することがあります。保存されている資格証明で認証が失敗した場合、SDKはキーチェーンから保存されているパスワード(存在する場合)を削除します。その後ログイン・ページは、ユーザー名のみ保存機能に戻るか、OMMobileService
デリゲートを使用して制御がモバイル・アプリケーションに戻されるかのどちらかになります。この決定は、OM_PROP_MAX_LOGIN_ATTEMPTS
という名前のSDKレベルのパラメータに基づきます。このパラメータは、制御がモバイル・アプリケーションに戻される前に何回の正しくない認証の試行が許可されるかを保存する数値です。
次のシナリオでは、保存されたユーザーのパスワードがSDKによってモバイル・デバイスから消去されます。
ユーザー認証に失敗した(たとえば、サーバーのパスワードが有効でなくなった、ユーザーがブロックされている、または別の理由でユーザー認証が失敗した)場合
Mobile and Social iOSクライアントSDKのlogout
メソッドが呼ばれた場合
セッション・タイムアウトが検知された場合
次のシナリオでは、保存されたユーザー名、パスワードおよびオプション・ボックスの状態がSDKによってモバイル・デバイスから消去されます。
clearRegistrationHandles
パラメータをTRUE
に設定してMobile and Social iOSクライアントSDKのlogoutメソッドが呼ばれた場合
カスタム・ログイン画面の作成
SDKが提供する基本ログイン・ビューを使用するのではなくカスタム・ログイン画面を作成する場合は、デフォルト・ビューでなくカスタム・ビューが認証に使用されるように、OMAuthView
をサブクラス化してそのオブジェクトを現在の認証リクエスト・オブジェクトに追加する必要があります。Mobile and Social iOSクライアントSDKは、認証データ・ディクショナリを使用してユーザー資格証明およびオプション・ボックスの状態を設定します。この認証データ・ディクショナリは、すべてのOMAuthView
のサブクラスでプロパティとして使用できます。必ずこの値を読み込み、正しくUI要素に表示するようにしてください。同様に、ユーザー資格証明を送信する場合には、必ずUI要素から値を読み込み、正しく認証データ・ディクショナリに設定するようにしてください。
次の表に、認証データ・ディクショナリ内の資格証明プロパティにアクセスするために使用する必要があるキーを示します。
表9-5 資格証明プロパティへのアクセスに使用するデータ・ディクショナリのキー
キー | 説明 |
---|---|
|
自動ログイン機能を有効化/無効化するブール値 |
|
資格証明の保存機能を有効化/無効化するブール値 |
|
ユーザー名のみ保存機能を有効化/無効化するブール値 |
|
自動ログイン機能に関するユーザーのプリファレンスを指定するブール値 |
|
資格証明の保存機能に関するユーザーのプリファレンスを指定するブール値 |
|
ユーザー名のみ保存機能に関するユーザーのプリファレンスを指定するブール値 |
|
ユーザーのユーザー名を指定する文字列値 |
|
ユーザーのパスワードを指定する文字列値 |
資格証明ストア・サービスでは、iOS Keychain Servicesを使用して重要なデータを保存および取得するためのAPIを提供します。
OMMobileSecurityService
オブジェクトから開始して、OMCredentialStore
ハンドルを取得します。OMCredentialStore
を使用して、KeyChainItem
.から重要なデータへの書込みおよび重要なデータの取得を行います。
次のコード・スニペットは、OMCredentialStore
の使用方法を示しています。
ユーザー名およびパスワードの追加
この例では、KeyChainItem
で指定されたキーにユーザー名とパスワードを追加します。
- (void)addCredential:(NSString *)userName pwd:(NSString *)password url:(NSString *)key;
ユーザー名、パスワードおよびテナント名の追加
これは前のaddCredential
機能のバリエーションです。
- (void)addCredential:(NSString *)userName pwd:(NSString *)password tenantName:(NSString *)tenantName url:(NSString *)key;
資格証明の削除
この例では、KeyChainItemから資格証明を削除します。真の削除操作はないため、かわりに、ユーザー名およびパスワードがnullに設定されます。
- (void)deleteCredential:(NSString*)key;
ユーザー名およびパスワードの更新
この例では、ユーザー名とパスワードが指定されると、ユーザーおよびキーの値を更新します。真の更新操作はないため、updateCredential
はaddCredential
をコールします。
- (void)updateCredential:(NSString*)userName pwd:(NSString*)password url:(NSString*)key;
ユーザー名、パスワードおよびテナント名の更新
これは前のupdateCredential
機能のバリエーションです。
- (void)updateCredential:(NSString *)userName pwd:(NSString *)password tenantName:(NSString *)tenantName url:(NSString *)key;
ユーザー名およびパスワードの取得
この例では、指定のキーのユーザー名、パスワードおよびテナント名を取得します。
- (OMCredential *)getCredential:(NSString*)key;
KeyChainItemでのプロパティの格納
この例では、KeyChainItem
でプロパティを格納します。
- (void)storeProperty: (NSString *)property withKey: (NSString *)key;
KeyChainItemでの複数のプロパティの格納
これは前のstoreProperty
機能のバリエーションです。
- (void)storeProperty: (NSString *)property withKey: (NSString *)key withLabel: (NSString *)label withDescription: (NSString *)description;
KeyChainItem内のプロパティの削除
KeyChainItem
内の指定したプロパティ・ストアを削除します。プロパティとともに保存されているすべての詳細が削除されます。
- (NSError *)deletePropertyWithKey:(NSString *)key
プロパティの取得
KeyChainItem
からプロパティを返します。
- (id)getPropertyForKey:(NSString *)key