ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Access Management開発者ガイド
11gリリース2 (11.1.2)
B69537-02
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

9 iOSクライアントSDKを使用したモバイル・サービス・アプリケーションの開発

この章では、iOSクライアントSDKを使用してモバイル・サービス・アプリケーションを開発する方法について説明します。このSDKは、iOS上でセキュアなモバイル・アプリケーションを開発するためのセキュリティ・レイヤーとして機能します。すべてのネイティブなiOSアプリケーションは、Mobile and Socialを使用するために、このSDKを実装する必要があります。この章の内容は次のとおりです。

9.1 iOSクライアントSDKの概要

このSDK (oamms_sdk_for_ios.zip)は、Oracle Access Management配布パッケージに含まれており、Oracle Technical Network (OTN) Webサイトからダウンロードすることもできます。

この開発者ガイドの他に、SDKでは、HTML形式のAPIドキュメントが提供されています。APIクラス、インタフェース、コンストラクタ、メソッドおよびフィールドの説明については、APIドキュメントを参照してください。

IDM Mobile iOSクライアントSDKは、静的ライブラリとして提供されます。次の3つのモジュールが含まれます。


注意:

iOSモバイル・デバイス用のアプリケーションを開発するには、Mac OS X Snow Leopard以降を実行しているIntelベースのMacにXcode IDE (統合開発環境)がインストールされている必要があります。

詳細は、iOS Dev CenterのWebサイトを参照してください。

https://developer.apple.com/devcenter/ios/index.action


9.1.1 XCodeでのiOSクライアントSDKの使用に関する概要

XCode環境を設定するには、次の手順に従ってください。

  1. 次の手順に従って、XCodeにlibIDMMobileSDK.aを追加します。

    1. 使用している開発環境にlibIDMMobileSDK.aをダウンロードし、それをプロジェクト・フォルダに追加します。

    2. XCodeを起動して、プロジェクトを開きます。

    3. プロジェクトをクリックして選択し、ターゲットをクリックして、「Build Phases」タブをクリックします。

    4. 「Link Binary With Libraries」を開き、「+」ボタンをクリックします。

    5. 「Other」を選択し、「libIDMMobileSDK.a」を選択します。

  2. PublicHeaders.zipファイルおよびPublicResources.zipファイルをダウンロードし、解凍します。

    PublicHeaders.zipアーカイブには、IDM Mobile SDKヘッダー・ファイルが含まれています。

    PublicResources.zipアーカイブには、IDM Mobile SDKリソース・バンドルが含まれています。

  3. 「Add Files to Your-Project-Name」を選択し、PublicHeaders.zipのコンテンツおよびPublicResources.zipをプロジェクトに追加します。

    IDM Mobile iOSクライアントSDKを使用してコーディングを開始できるようになりました。


    重要:

    プロジェクトをリンクする前に、プロジェクトに-ObjC-all_load両方のリンカー・フラグを1行として追加します。これらのフラグを使用しない場合、アプリケーションは「selector not recognized」というランタイム例外が発生してクラッシュします。

    libIDMMobileSDKはカテゴリを使用して既存のクラスを拡張するため、リンカーはコア・クラス実装のオブジェクト・コードをカテゴリ実装と関連付ける方法を把握していません。これにより、生成されるアプリケーションで作成されたオブジェクトはカテゴリで定義されたセレクタに応答できません。

    背景情報とプロジェクトにフラグを追加する方法については、次のページを参照してください。

    http://developer.apple.com/library/mac/#qa/qa1490/


9.2 iOSクライアントSDKを使用した認証サービスの起動

この項では、Mobile and Socialサーバーを使用して認証する方法について説明するサンプル・コードを提供します。

この項のサンプル・コードは、JWTAuthentication (JSON Web Token Authentication)サービス・タイプをサポートしています。サービス・プロバイダの構成方法の詳細は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のモバイル・サービスの構成に関する項を参照してください。

手順1: 必須オブジェクトの初期化とエンドポイントの宣言

次のようにOMMobileSecurityServiceクラスを作成し、必要とされるMobile and Socialサーバーの詳細を提供することにより初期化します。

OMMobileSecurityService *mss = [[OMMoblieSecurityService alloc] initWithURL: mobileSocialServerURL]
                                                                    appName: applicationName
                                                                     domain: domainName
                                                                   delegate: self];

initWithURL引数は、Mobile and Socialサーバーにアクセスするために必要なURL(プロトコル、ホスト名およびポート番号を含む)です。HTTPおよびHTTPSプロトコルのみがサポートされています。

appName引数は、アプリケーションを識別する一意の識別子です。この文字列値はMobile and Socialサーバー管理コンソールのアプリケーション・プロファイルのセクションにあるアプリケーション名の値に一致している必要があります。詳細は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のアプリケーション・プロファイルの編集または作成に関する項を参照してください。

domain引数は、Mobile and Socialサーバーが存在する場所内のインターネット・ドメインの名前です。

delegate引数は、selfに設定する必要があります。

次に、OMMobileSecurityService setupメソッドをコールします。

[mss setup];

設定メソッドにより、Mobile and Socialサーバーから構成済セキュリティ・ポリシーおよびアプリケーション・プロファイルを取得します。このメソッドは、Mobile and Socialサーバー上で認証、認可およびユーザー・プロファイル・サービスに接続するために必要なサービス・エンドポイント(URL)のリストも取得します。

設定コールは、非同期コールで、iOSクライアントSDKは指定されたデリゲート用の次のメソッドをコールします。

didReceiveApplicationProfile: (NSDictionary *)applicationProfile error: (NSError *)error 

このメソッドは、クライアント登録を処理するOMRegistrationServiceオブジェクトを返します。


注意:

[mss setup]をコールするスレッドは、実行ループが実行されている必要があります。メイン・スレッド以外のスレッドから[mss setup]を呼び出す場合は、実行ループがデフォルト・モードで実行されていることを確認してください。

詳細は、次の場所にある『iOS Developer Library Threading Programming Guide』を参照してください。

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html


手順2: 認証プロセスの実行

OracleMobileSecurityServiceオブジェクトは現在のセッションに関する詳細のすべてを維持します。サービスに接続するために必要なアプリケーション・プロファイルおよびURLを受け取ったら、認証プロセスを開始します。次のメソッドをコールします。

NSError *error = nil;
//startAuthenticationProcess API triggers the authentication process.
error = [self.mss startAuthenticationProcess:nil
presenterViewController:loginController];
if (error)
{
   UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"Authentication process failed"
   message:[error localizedDescription]
   delegate:self
   cancelButtonTitle:@"OK"
   otherButtonTitles:nil];
   [alertView show];
   [alertView release];
   return;
}

最後の行で認証プロセスが開始され、iOSクライアントSDKがMobile and Socialサーバーと連携して認証プロセスを実行します。ユーザーがすでに認証されていて、認証トークンがまだ有効な場合、Mobile and Socialサーバーはキャッシュされたトークンを単に返すのみです。それ以外の場合、サーバーはユーザーにログイン資格証明を提供するように要求します。Mobile and Socialサーバーがナレッジベース認証を使用するように構成されている場合、iOSクライアントSDKはその詳細を自動的に処理します。

次に、iOSクライアントSDKはデリゲートのdidFinishAuthentication: error:メソッドをコールします。このメソッドは、トークンの詳細を持つOMAuthenticationContextを返します。

OMMobileSecurityServiceオブジェクトの[mobileSecurityService authenticationContext]メソッドを使用して、いつでもOMAuthenticatonContextを取得します。OMAuthenticationContextの詳細は、APIドキュメントを参照してください。

- (void)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;
 [detailPaneController showProfileButton];

この時点で、アプリケーションはMobile and Socialサーバーから取得されたトークンを使用して、追加のWebサービス・コールを行うことができます。


注意:

iOSクライアントSDKは大量のメモリーを消費しません。SDKは登録ハンドル、認証ハンドル、アプリケーション・プロファイルおよびセキュリティ・プロファイルを格納します。iOSがメモリー量が少ないことを警告する通知を送信すると、SDKはそのキャッシュを永続化し、そのメモリーを解放します。必要に応じて、SDKは適宜ファイルまたはKeyChainItem (後で説明)から永続データを読み取ることができます。


9.3 iOSクライアントSDKを使用したHTTP Basic認証の起動

この項では、HTTP Basic認証を実装するためのサンプル・コードを提供します。この認証モデルはMobile and Socialサーバーを必要としません。

HTTP Basic認証スキームは次の機能をサポートしています。

次に、HTTP Basic認証のサンプル・コードを示します。

OMMobileSecurityConfiguration *conf = [[OMMobileSecurityConfiguration alloc]
    initWithApplicationID:@"TestApp" 
    maxFailureAttempts:3 
    authenticationScheme:OM_HTTP_BASIC_AUTH_SCHEME];
    
/* Initialize OMMobileSecurityService by passing in ADFMobileSecurityConfiguration */
OMMobileSecurityService *service = 
[[OMMobileSecurityService alloc]initWithAppProfileConfiguration:conf delegate:self];
    
/* Create an authentication request object that will hold all the inputs for one particular session*/
OMAuthenticationRequest *request = [[[OMAuthenticationRequest alloc]init]];
    [request setLogoutURL:@"http://hostName.example.com:14100/oam/server/logout"];
    [request setSessionExpiryInSecs:30];
    [request setIdleTimeInSecs:12];
    [request setIsOnlineMode:true];
    NSMutableArray *array = [[[NSMutableArray alloc]init];
    [array addObject:@"OAM_ID"];
    [request setRequiredTokens:array];
    [request setAuthenticationURL:@"http://hostName.example.com:7777/index.html"];
    [request setAuthenticationScheme:OM_HTTP_BASIC_AUTH_SCHEME];
     NSError *error = nil;
    UINavigationController *viewController = [service getAuthenticationViewController:request error:nil];
    if (viewController != nil)
       [self presentModalViewController:viewController animated:true];
    else if (error != nil)
    {
        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Could not authenticate" 
                                                           message:[error localizedDescription] 
                                                          delegate:self 
                                                 cancelButtonTitle:@"OK" 
                                                 otherButtonTitles:nil];
        [alertView show];
        [alertView release];
    }

認証プロセスが完了すると、コードは、デリゲートのdidFinishAuthentication: error:メソッドをコールします。

9.4 iOSクライアントSDKを使用したユーザー・プロファイル・サービスの起動

この項のコード・サンプルを使用する前に、このSDKに固有ではない情報について、「ユーザー・プロファイル・サービスを使用したアプリケーションの構築」を参照してください。

この項のコード・サンプルは、次の3つのカテゴリに分類されます。

9.4.1 ユーザーの使用

ユーザーの詳細を検索および取得するには、OMMobileSecurityServiceオブジェクトからOMUserManagerのハンドルを取得します。OMMobileSecurityServiceオブジェクトの詳細は、「iOSクライアントSDKを使用した認証サービスの起動」を参照してください。

OMUserManagerでは、ユーザーの詳細を検索および取得するための同期および非同期APIを提供します。

すべての非同期操作はOMAsyncOpHandleオブジェクトを返します。このオブジェクトを使用して、完了前に操作を取り消すことができます。完了後に操作を取り消しても、操作は取り消されません。

- (NSArray *)searchUsersWithFilter: (NSDictionary *)filter
                                          isSimpleSearch: (BOOL)simpleSearch
                                   attributesToBeFetched: (NSArray *)attributesToFetch
                                                pageSize: (NSInteger)pageSize
                                            pagePosition: (NSInteger)pagePosition
                                                   error: (NSError **)error;
- (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;

9.4.2 グループの使用

グループの詳細を検索および取得するには、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;

9.4.3 組織の使用

次のAPIを使用して、マネージャやその部下に関する情報をリクエストします。

ユーザーのマネージャの取得

次のAPIはOMUserで使用可能です。

- (OMUser *)getManager: (NSError **)error;
- (OMAsyncOpHandle *)getManagerAsynchronously;

指定されたユーザーの部下の取得

次のAPIはOMUserで使用可能です。

- (NSArray *)getReporteesWithAttributes: (NSArray *)attributes returningError: (NSError **)error;
- (OMAsyncOpHandle *)getReporteesAsynchronouslyWithAttributes:(NSArray *)attributes;

9.5 資格証明ストア・サービス(KeyChain)の使用

資格証明ストア・サービスでは、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;

ユーザー名およびパスワードの更新

この例では、ユーザー名とパスワードが指定されると、ユーザーおよびキーの値を更新します。真の更新操作はないため、updateCredentialaddCredentialをコールします。

- (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;

9.6 モバイル・シングル・サインオン・エージェント・アプリケーションの起動

この項では、iOSクライアントSDKを使用してモバイル・シングル・サインオン・エージェント・アプリケーションと連携する方法について説明します。Mobile and Socialでのモバイル・シングル・サインオンに関する概念情報は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のモバイル・シングル・サインオン(SSO)機能の概要に関する項およびMobile and Socialの理解に関する項を参照してください。

9.6.1 Webブラウザからのモバイル・シングル・サインオン・エージェント・アプリケーションの起動

Webアプリケーションは、モバイルSSOエージェントによって提供されるシングル・サインオン認証機能を使用することもできます。この機能にはAccess Managerが必要です。

  1. Oracle Access Management管理コンソールにログオンして、「ポリシー構成」タブをクリックします。

  2. 「共有コンポーネント」で、「認証スキーム」をクリックし、「作成」ボタンをクリックします。

    認証スキームの作成タブが開きます。

  3. 次のようにフォームに入力して、新しい認証スキームを作成します。

    • 名前: MobileSSOScheme

    • 認証レベル: 2

    • チャレンジ・メソッド: FORM

    • チャレンジ・リダイレクトURL: /oam/server/

    • 認証モジュール: LDAP

    • チャレンジURL: /mobilesso?serviceDomain=MobileServiceDomain

      ここで、MobileServiceDomainは、シングル・サインオン用に構成されるドメインの名前です。

    • コンテキスト・タイプ: customWar

    • コンテキストの値: /oic_rest

  4. Oracle Access Management管理コンソールで、次の手順を実行します。

    1. アプリケーション・ドメインで新しい認証スキームを作成します。

      認証スキーム: MobileSSOScheme

      (MobileSSOSchemeは、手順1で作成されたスキームです。)

    2. /mobileappなどのHTTPリソースを作成し、作成された認証スキーム(MobileSSOScheme)を使用してそのリソースを保護します。これは、モバイルWebブラウザ(iOS用モバイル版Safari)からアクセスでき、Webgateによって保護されるURIです。

9.7 Webgateで保護されたリソースの起動

Mobile and Social SDKを使用して、Mobile and SocialサービスによりAccess Managerに対して認証できます。Access Managerに対して認証すると、SDKはトークンを取得し、それをクッキー・ストアで永続化して、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 value configured in OAM 11g R2
    //Webgate user defined parameters.
    [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のユーザー定義パラメータには、User-Agentプロパティが含まれている必要があります。同じUser-Agentプロパティの値は、そのヘッダーでモバイル・アプリケーションによって指定されている必要があります。

OMRESTRequestは、OMMobileSecurityServiceを使用しないで初期化することもできます。この場合、OMRESTRequest APIはURL値を戻すのみです。


9.7.1 OMRESTRequest APIフローの理解

次の手順では、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. Webgate用アクセス・トークンがMobile and Social SDKキャッシュで使用できない場合、RESTリクエストをMobile and Socialサーバーに送信してWebgate用アクセス・トークンを取得します。

5. リクエストが有効な場合、Mobile and Socialはレスポンスでアクセス・トークンを返します。

6. Mobile and Social SDKは、Mobile and Socialサーバーによって返されるトークンを挿入します。

9.8 iOS SDKを使用したカスタム・モバイル・シングル・サインオン・エージェント・アプリケーションの作成

この項には、モバイル・シングル・サインオン・アプリケーションの作成を開始するための情報が含まれています。

モバイル・シングル・サインオン・エージェントとして機能するには、アプリケーションは他のアプリケーション(モバイル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管理者ガイド』の次のトピックを参照してください。

  • 固有のiOSアプリケーション設定の詳細は、アプリケーション・プロファイルの編集または作成に関する項を参照してください。

  • モバイルSSOエージェントまたはモバイルSSOクライアントのいずれかとしてSSO対応アプリケーションを構成する方法の詳細は、サービス・ドメインの編集または作成に関する項を参照してください。