プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Access Management開発者ガイド
11gリリース2 (11.1.2.3.0) for All Platforms
E67354-04
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

11 ソーシャル・アイデンティティ・クライアントSDKを使用したアプリケーションの開発

この章では、ソーシャル・アイデンティティ・クライアントSDKを使用して、Mobile and Socialを、サポートされるWebおよびモバイル・アプリケーションと統合する方法について説明します。(バージョン11.1.2.2より前は、ソーシャル・アイデンティティはインターネット・アイデンティティ・サービスと呼ばれていました。)この章の内容は次のとおりです。

11.1 始める前に

この章を読み始める前に、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のMobile and Socialの理解に関する項をお読みください。この開発者ガイドは、Mobile and Socialの用語と概念について熟知し、理解していることを前提としています。

11.2 ソーシャル・アイデンティティ・アプリケーションの開発の概要

この項では、一般的にソーシャル・アイデンティティ・アプリケーションの開発に適用される概念および要件について説明します。

ソーシャル・アイデンティティは、次の統合シナリオをサポートします。

  • Javaベースのアプリケーション・サーバー上で実行されるWebサイトとの統合

  • Access ManagerやSSOサービスなど、Oracle Access Managementサービスを使用するWebアプリケーションとの統合

  • iOSモバイル・デバイス上で実行されるアプリケーションとの統合

Mobile and Socialは、ソーシャル・アイデンティティ用に事前作成されたログイン・ページを特徴としています。このページは、既存のアカウントを持つユーザーがログインできるようにローカル認証をサポートしており、また、新しいユーザーまたは既存のユーザーが、Yahoo、Google、Facebook、LinkedIn、Twitterなどのインターネット・アイデンティティ・プロバイダを使用して認証できるようにインターネット・アイデンティティ・プロバイダ・サポートを提供しています。アプリケーションのローカル・ユーザー認証メカニズムを保ちながら、ローカル・ユーザー認証とインターネット・アイデンティティ・プロバイダ認証の両方のために事前作成されたログイン・ページを使用するか、またはインターネット・アイデンティティ・プロバイダ認証専用のMobile and Socialログイン・ページを使用するかを選択できます。事前作成されたログイン・ページのルック・アンド・フィールは、必要に応じてカスタマイズできます。

エンドユーザー・アカウントの作成を容易にするために、インターネット・アイデンティティ・プロバイダを使用して認証するエンドユーザーに、ローカル・アカウントの作成を促すことができます。Mobile and Socialは、アイデンティティ・プロバイダからエンドユーザーのプロファイルを取得し、組込みユーザー登録機能により、ユーザーのデータを事前に移入します。


注意:

Facebook、Twitter、LinkedInなどのOAuthプロバイダでは、アプリケーションが各Mobile and Socialインスタンスを登録し、コンシューマ・キーとシークレット値を取得する必要があります。

11.2.1 ソーシャル・アイデンティティ・クライアントSDKについて

ソーシャル・アイデンティティ・クライアントSDKでの作業時に使用するプライマリJavaパッケージは、oracle.security.idaas.rp.clientパッケージです。("rp"はリライイング・パーティを表します。)

また、次のライブラリは、コンパイルおよび実行フェーズ中に使用可能になる必要があります。これらのライブラリは、クライアント・コードがWebコンテナによって実行時にコンパイルされる可能性のあるWebアプリケーションに含まれている場合に、アプリケーション・サーバーのクラス・パスで使用可能になる必要もあります。これらのライブラリは、製品パッケージoamms_sdk_for_java.zipで提供されます。

次のライブラリは、ライセンス情報およびAPIドキュメントとともに、oamms_sdk_for_java.zipに含まれています。

Mobile and Socialライブラリ

  • oic_clientsdk.jar

  • oic_common.jar

  • oic_sae.jar

  • ojdl.jar

サード・パーティ・アーカイブ

  • jersey-archive-1.9.1

11.3 アプリケーション用のアイデンティティ・プロバイダのリストの取得

oracle.security.idaas.rp.clientパッケージにあるRPClientクラスは、アプリケーション用に構成されたインターネット・アイデンティティ・プロバイダのリストを取得するために必要です。

RPClientクラスは、applicationIDおよびpropertiesの2つのパラメータを取得します。

最初のパラメータ、applicationIDは、アプリケーションを識別する一意の識別子です。この文字列値はMobile and Socialサーバー管理コンソールのアプリケーション・プロファイルのセクションにあるアプリケーション名の値に一致している必要があります。詳細は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』の「ソーシャル・アイデンティティの構成」の章を参照してください。

2番目のパラメータは、プロパティ・ファイルにマップするURIです。このプロパティ・ファイルは、アプリケーションとMobile and Socialサーバーが接続して、データを安全に交換するために必要な構成プロパティをリストします。プロパティ・ファイルは、実行時にアプリケーションにアクセス可能な場所にある必要があります。

次の表は、Mobile and Socialサーバーが受け取る必須およびオプションの構成プロパティをリストしています。すべてのプロパティは文字列で、別途記載がないかぎり、オプションです。

表11-1 RPClientクラスで必要とされる構成プロパティ

プロパティ名 必須 説明 コメント

rp.server.hosturl

必須

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


rp.server.idp.service

必須

アイデンティティ・プロバイダ・サービスにアクセスするために必要な相対パス。

現在のサービス・パス:

/oic_rp/rest/
identityproviders

このパスは、rp.server.hosturlプロパティに追加されます。

rp.server.init.service

必須

リライイング・パーティ(RP)サービスにアクセスするために必要な相対パス。

現在のサービス・パス:

/oic_rp/
RPInitServlet

rp.server.connection.timeout


サーバーが応答を停止した場合の接続が中断されてからの経過時間(ミリ秒)。Nullまたは空は無限を意味します(タイムアウトなし)。


rp.server.connection.sae.sharedsecret

必須

サーバーと安全に通信するために使用されるシークレット。

BASE64でエンコードされた文字列。

rp.server.connection.sae.algorithm


サーバーと安全に通信するために使用されるアルゴリズム。省略される場合は、デフォルトでSAE

サポートされる値は次のとおりです。

SAE: Secured Attribute Exchange.。

DES: データ暗号化規格。

rp.server.connection.sae.keystrength


キーの暗号化に使用されるキーの長さ。省略される場合は、デフォルトで128


rp.server.connection.sae.cryptotype


暗号化のタイプ。省略される場合は、デフォルトで対称。


rp.server.connection.sae.keystorefile


暗号化キーを含むファイル名。


rp.server.connection.sae.keystoretype


キーストアのタイプを決定します。


rp.server.connection.sae.keystorepass


キーストア・パスワード。


rp.server.connection.sae.privatekeyalias


秘密鍵の別名。


rp.server.connection.sae.publickeyalias


公開鍵の別名。


rp.server.connection.sae.privatekeypass


秘密鍵のパスワード。


rp.server.connection.sae.certclass


Certインタフェースを実装するクラス名。


proxy.protocol


プロキシ・サーバーで使用するプロトコル。

サポートされる値は次のとおりです。

http

socks

direct

proxy.host


プロキシ・サーバーのホスト名。


proxy.port


プロキシ・サーバーのポート番号。


proxy.username


プロキシ・サーバーで認証するために必要なユーザー名。


proxy.password


プロキシ・サーバーで認証するために必要なパスワード。



次のサンプル・コードは、使用可能なインターネット・アイデンティティ・プロバイダおよびその対応するURLを出力する単一クラスで構成されます。このコードを使用して、インターネット・アイデンティティ・サービス・プラットフォーム構成を確認できます。必須のapplicationId入力パラメータを提供します。

まず、次のクラス依存性をインポートします。

// Java imports
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.MalformedURLException;
 
// Mobile and Social imports
import oracle.security.idaas.rp.client.RPClient;
import oracle.security.idaas.rp.client.RPClientConfigUtil;
import oracle.security.idaas.rp.client.RPClientException;

次に、次の定数を定義します。

public class SampleOicClient {
    // Define the default properties file name
    private static final String PROP_FILE_NAME = "SampleOicClient.properties";
    // Pre-define the Client SDK properties
    private final static String PEOPLE_SERVICE = "/oic_rest/rest/userprofileservice/people";
    private final static String TOKEN_SERVICE = "/oic_rest/rest/tokenservice1/tokens";

createPropertiesFile()関数は、ローカル・ファイルが見つからない場合にデフォルトのプロパティ・ファイルを作成します。ただし、必要な値を提供する必要があります。詳細は、表11-1を参照してください。

    private static void createPropertiesFile() {
        try {
 
            // Create file 
            FileWriter fstream = new FileWriter(PROP_FILE_NAME);
            BufferedWriter out = new BufferedWriter(fstream);
            out.write("");
            out.write("rp.server.hosturl=http://hostcomputer.example.com:18001\n");
            out.write("rp.server.idp.service=/oic_rp/rest/identityproviders\n");
            out.write("rp.server.init.service=/oic_rp/RPInitServlet\n");
 
            out.write("rp.server.connection.timeout=60000\n");
            out.write("rp.server.connection.sae.sharedsecret=sharedSecret1\n");
            out.write("rp.server.connection.sae.algorithm=AES\n");
            out.write("rp.server.connection.sae.keystrength=128\n");
            out.write("rp.server.connection.sae.cryptotype=symmetric\n");
            out.write("rp.server.connection.sae.keystorefile=\n");
            out.write("rp.server.connection.sae.keystoretype=\n");
            out.write("rp.server.connection.sae.keystorepass=\n");
            out.write("rp.server.connection.sae.privatekeyalias=\n");
            out.write("rp.server.connection.sae.publickeyalias=\n");
            out.write("rp.server.connection.sae.privatekeypass=\n");
            out.write("rp.server.connection.sae.sigvalidityduration=\n");
            out.write("rp.server.connection.sae.certclass=\n");
 
            out.write("#proxy configuration\n");
            out.write("proxy.host=\n");
            out.write("proxy.port=\n");
            out.write("#http|socks|direct\n");
            out.write("proxy.protocol=\n");
            out.write("proxy.username=\n");
            out.write("proxy.password=\n");
 
            out.close();
        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        }
    }

次のコードは、提供される必要なapplicationID識別子に基づいて使用可能なインターネット・アイデンティティ・プロバイダを出力します。

 public static void main(String[] args) {
        RPClient client = null;
        int exitStatus = 0;
        String ret = null;
        File prop = new File(PROP_FILE_NAME);
        String applicationName = null;

        //Check the arguments: applicationID is mandatory
        if (args.length < 1 || args[0].isEmpty()) {
            System.err.println("Invalid number of arguments. Specify the name of the application 
(the applicationID) to be used to connect to the Mobile and Social Server.\n");
            exitStatus = 1;
        } else {
            applicationName = args[0];

            // Check if a properties file is available
            if (prop.exists()) {
                RPClientConfigUtil conf = null;

                // Read the configuration using the provided utility class
                try {
                    conf = new RPClientConfigUtil(prop.toURI().toURL());
                } catch (MalformedURLException e) {
                    System.err.println("Malformed URL:" + e.getMessage());
                    exitStatus = 1;
                } catch (IOException ioe) {
                    System.err.println("IO Exception:" + ioe.getMessage());
                    exitStatus = 1;
                }
                System.out.println("RPClient :\n=========\n");
                try {

                    // Initiate the interface with the Mobile and Social Server using 
                    // the configuration properties and the applicationID.
                    client = new RPClient(applicationName, conf);
                    
                    ret = "The application name is [" + applicationName + "]\n";
                    ret += "The retrieved IDP information is:\n\n";
                    for (String idp : client.getIDPList()) {
                        // Display the IDP name
                    ret += "    IDP name : " + idp + "\n";
                        // DISPLAY the IDP reference URL
                    ret += "    IDP Href : " + client.getHrefByIdpName(idp);
                        ret += "\n";
                    }
                } catch (RPClientException rpce) {
                    System.err.println("Client Exception:" + rpce.getMessage());
                    exitStatus = 1;
                }
                System.out.println(ret);
                System.out.println("\nClient SDK :\n============\n");
                System.out.println("    CreateToken :\n    =============\n");
                new CreateToken(conf.get("rp.server.hosturl") + TOKEN_SERVICE);
                System.out.println("\n    People :\n    ========\n");
                new CreateUser(conf.get("rp.server.hosturl") + PEOPLE_SERVICE);
            } else {
                //No properties file is available, so create a default one
                createPropertiesFile();
                System.out.println("The " + PROP_FILE_NAME + " properties file has not been found.
 A default one has been created at this location.");
                System.out.println("Please edit the file and provide the required values. Then 
 restart this utility.\n");
                exitStatus = 2;
            }
        }
        System.exit(exitStatus);
    }
}

11.4 ソーシャル・アイデンティティとサーバー上で実行されるWebアプリケーションとの統合

ソーシャル・アイデンティティSDKは、Java互換のアプリケーション・サーバー上で実行しているポータル・サイトやコンシューマ主導のWebサイトなどのWebアプリケーションをサポートしています。

ソーシャル・アイデンティティをWebアプリケーションと統合するには、まず、Mobile and Socialサーバー上でWebアプリケーションを定義し、ソーシャル・アイデンティティ・ログイン・ページをWebアプリケーションと統合します。次に、ユーザー登録を構成し(オプション)、最終的な返信レスポンスを処理します。

この項の内容は次のとおりです。

11.4.1 Mobile and Socialサーバー上のWebアプリケーションの定義

Mobile and Socialシステム管理コンソールを使用して、Mobile and Socialサーバー上のWebアプリケーションを定義します。このタスクの実行の詳細は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のアプリケーション・プロファイルの編集または作成に関する項を参照してください。

次に、Mobile and Socialサーバー上で構成する必要があるアイテムの一部の簡単な説明を示します。

  • アプリケーション名: Webアプリケーションのコンテキスト名を指定します。

  • アプリケーション戻りURL: 認証レスポンスを返すためにMobile and Socialが使用するURLを指定します。

  • 共有シークレット: WebアプリケーションとMobile and Socialサーバーがセキュアな通信を容易に実現するために共有するセキュリティ・シークレットを指定します。共有シークレットは、ユーザー登録時にも必要です。

  • 必須のアイデンティティ・プロバイダ: アプリケーションへの認証にエンドユーザーが選択できるアイデンティティ・プロバイダを選択します。

  • アプリケーション・ユーザー・プロファイル属性マッピング: アイデンティティ・プロバイダが返すユーザー・プロファイル属性を、アプリケーションに対してローカルのユーザー・プロファイル属性にマップします。

  • ユーザー登録および登録URL: システムがローカル・アカウントのないユーザーに登録を促す必要があるかどうかを示します。サービス・プロバイダの完了時に、サーバーが認証後にユーザーをリダイレクトするURLを指定します。

11.4.2 ソーシャル・アイデンティティ・ログイン・ページとWebアプリケーションとの統合

ソーシャル・アイデンティティを統合するには、ソーシャル・アイデンティティ・クライアントSDK (oic_clientssdk.jar)を使用し、そのログイン・ページ(login.jsp)を変更します。ソーシャル・アイデンティティ・クライアントSDKは、以前はインターネット・アイデンティティ・サービス・クライアントSDKと呼ばれていました。

ソーシャル・アイデンティティ・ログイン・ページをWebアプリケーションと統合するには、(1) Mobile and Socialサーバー上でホストされる事前作成されたログイン・ページをHTML <iframe>タグを使用してWebアプリケーションに追加する、または(2) Mobile and Socialで提供されるインターネット・アイデンティティ・プロバイダ・データを使用してカスタム・ログイン・ページを構築するという2通りの方法があります。

11.4.2.1 事前作成されたソーシャル・アイデンティティ・ログイン・ページの追加

Mobile and Socialサーバー上でホストされるログイン・ページをWebアプリケーションに追加するには、まず、SDKを使用してセキュア・トークンを取得します。Webアプリケーションは、WebアプリケーションとMobile and Socialサーバーで認識される共有シークレットに基づく、Secured Attribute Exchange (SAE)トークンを必要とします。

次のサンプル・コードは、インターネット・アイデンティティ・サービス・クライアントSDKを初期化し、saeTokenを取得する方法を示しています。このコードは、JSPページ(例: login.jsp)に追加できます。

RPClientクラスは、applicationIDおよびpropertiesの2つのパラメータを取得します。

RPClient rpClient = new RPClient("sampleapp",properties);
Map<String, String> attrs = new HashMap<String, String>();
attrs.put("applicationID","sampleapp");
String saeToken = rpClient.getSaeToken(attrs,properties.getProperty("rp.server.connection.sae.sharedsecret"),
properties.getProperty("rp.server.connection.sae.sharedsecret"));

getSaeTokenメソッドは、アプリケーション用のSAEトークンを取得します。

プロパティ・ファイルからのsae.sharedsecretプロパティにより、rpClient.getSaeTokenメソッドの2番目および3番目のパラメータが形成されます。(詳細は、第11.3項「アプリケーション用のアイデンティティ・プロバイダのリストの取得」を参照してください。) 「SAEシークレット」の最初のインスタンスは、属性の署名に使用され、2番目のインスタンスはそれらの暗号化に使用されます。「SAEシークレット」の2番目のインスタンス(つまり、メソッドの3番目のパラメータ)がnullの場合、属性は署名されますが、暗号化されません。

次にHTML <iframe>タグを使用して、インターネット・アイデンティティ・サービス・ログイン・ページを埋め込みます。

<iframe
src="http://oc.example.com:24666/oic_rp/login.jsp?applicationID=sampleapp&saeToken=<%=saeToken%>"
scrolling="no"
frameBorder="no"
allowtransparency="true"
style="width:720px;height:440px;">
</iframe>

次のスクリーン・キャプチャは、Mobile and Socialサーバー上でホストされる事前作成されたログイン・ページを統合するためにiframeを使用しているサンプル・ログイン画面を示します。このページは、ローカル・ユーザー認証とインターネット・アイデンティティ・プロバイダ認証の両方をサポートするように構成されています。

図11-1 事前作成されたローカル・ログイン・サポートのあるログイン画面

サンプルの事前作成されたログイン画面。

次のスクリーン・キャプチャは、前の例と同様で、インターネット・アイデンティティ・プロバイダ・サポートのみが有効なページを示しています。この例では、Webアプリケーションはそのローカル・ユーザー認証メカニズムを個別に実装します。

図11-2 事前作成されたローカル・ログイン・サポートのないログイン画面

サンプルの事前作成されたログイン画面。

11.4.2.2 カスタム・ログイン・ページの構築

ログイン・ページをより一層柔軟に構築する必要がある場合は、この項で説明される方法を使用してください。

次の例のコードは、インターネット・アイデンティティ・サービス・クライアントSDKを初期化し、RESTエンドポイントを起動して、アイデンティティ・プロバイダ・データを取得し、HTML表を使用してログイン・ページを構築して、アイデンティティ・プロバイダのロゴを表の行に表示します。

String ret =" ";
RPClient client = null;
try { 
     client = new RPClient("sampleportal", "rpclient.properties");
     for (String idp: client.getIDPList()){
        ret += "\n<TR><TD><a href='" + client.getHrefByIdpName(idp)
                + "'><img src='images/" + idp.toLowerCase()
                + ".gif' alt=" + idp + " title=" + idp
                + "border='0'></img></a></TD></TR>";
}
} catch(Exception e){
      e.printStackTrace();
}

Mobile and Socialサーバーからの出力は次のように表示されます。

<table cellpadding="6" cellspacing="6" align="center">
<th colspan=2>Sign in with any Account</th>
<TR>

<td>
<a href='http://rp.example.com:24666/oic_rp/init?applicationID=sampleportal
&saeToken=RU5DUllQVEVENjIwODgxM0ZCNTAxOEZENUZBRTA2MzYxOTJBQzM3MDIwQjc5NEE1RDdFMjczREYxNUYw
Mzk0NjQwRjRFRTQwNzBCMzc0OEMyRUVENTkyOTVCMkI5NUU0MzM2QTk5MzYyRjJCQjg5MDJDNDcwNDlFNTFFMTIzMU
Q5OTY1RTZBMjA3QzM3N0FCNDlBMDlFQjVFQUI2RDlDRTU1RERGOTExNEIyMThFNzBGMjYzRkI3MkRGNEIwMjlENTBFQ
zFEMTM1RkUzRjU5RjcxQkMxQTg2QkNBNzAzQTUwOTBCRUJBOEY3REM5RUU3RjIyQjEwQ0Q5QzNCQjA0RDVDRDBGQUNF
NkM1M0ZGQzJCNDk4NERBRDNGNkI4REY0QkU3QzZCMDU4QTRBREQxNTI4NzdCMTkxRkU4MTdGRTYzNEQ0OTdFN0MxQzk
3M0MzQkFFOEVCQzEwQzg0NDIzMDQ1NDAyNUZCRQ=='><img src='images/facebook.gif' alt=Facebook
title=Facebook border='0'></img></a></td>
<td>
<a href='http://rp.example.com:24666/oic_rp/init?applicationID=sampleportal
&saeToken=RU5DUllQVEVENjIwODgxM0
xNUYwMzk0NjQwRjRFRTQwNzBCMzc0OEMyZCNTAxOEZENUZBRTA2MzYxOTJBQzM3MDIwQjc5NEE1RDdFMjczREYRUVENT
RUVENTkyOTVCMkI5NUU0MzM2QTk5MzYyOTM3REY0NzJFQTIzQTVDNDY4RjRCREJFRTM4OEU2RDI2QUI3QTc4QjE3RUNDO
DY4NDU2MDZCQjk4Q0IyNjg3QTNFMUQzOTVENTM5NjEzRTZDMTM3RjVBNDJFRUZENzUzOERDOEVDQkUzOEY5NEM5QjU2Qz
E4NjVGRTA2MzVCMDBBNUYyNTgzRDU0OEI4ODE4RUI4ODgxMkUyMEM3RDU3RUIwQjMyRTk2RkI3ODc5RkI1MzU5QjhFNDU1
RjZDQzZEQTlEQTVCRDkwQjIxQzEyRDUzNEIzNTMyNTgwRTZCOTM3NzZDM0UyNTg2QTE3MTZFMDc3MTJFNDAxMDI3OTg1Qw=='>
<img src='images/twitter.gif' alt=Twitter title=Twitter border='0'></img></a></td>
</TR><TR>
<td> 
<a href='http://rp.example.com:24666/oic_rp/init??applicationID=sampleportal
&saeToken=RU5DUllQVEVENjIwODgxM0ZCNTAxOEZENUZBRTA2MzYxOTJBQzM3MDIwQjc5NEE1RDdFMjczREYxNUYwMzk
0NjQwRjRFRTQwNzBCMzc0OEMyRUVENTkyOTVCMkI5NUU0MzM2QTk5MzYyNThGRDM1MjRDRDQ2QTQ5RTRFMEZEMTY3OEEyQ
TAxM0Y4NDQ1MjUwODkxRTlBRDgzMDdBNDRDRjEzMkE4MEJCNkU5ODhCMjcyRkNBNUMwREJFRjA4MDAzQkMwRTAzQzNGNkUy
OEJEMzMxMDcwNTlEMDdGQjREMzFEQjdCRjRDM0YxNUQ4OTI2QTY4OUM1NDIwNjk5MDY3RUM0M0YyNjA0QjBBRDc3MkZGOThB
QjUxRTJDQUFFOEYwOEQ0QTE3Njc4MDM1NjYxNzY5MzY4Mjk0MjVFRDFGNDhEMDAzQTFBMjU1MEQ1QUE1RkM3MkNDMUNGMjUwN0J
CMEI1NDkzM0Q5NQ=='><img src='images/linkedin.gif' alt=LinkedIn title=LinkedIn border='0'></img>
</a></td>
<td>
<a href='http://rp.example.com:24666/oic_rp/init??applicationID=sampleportal
&saeToken=RU5DUllQVEVEMDI5M0FFNjIzMEVEOUZEQkEzMEU0QzAxMDlCOTg1ODlDQ0I5QkQxM0JGQjhGQkY5QzAzNDZER
EZGN0I1RDBBMjQ3NzkxNjdBOERFNTUzN0IxMzk0QTdENUUyNDQxOTdBNkE4MDEwOTlGOEJDNTIyQTQwMEU3OTM3OUUxQTRFR
UYyNjY0MDc3Nzc0OEMzNDJCMzhCOUJDREZBQzdCNENFQkI5NTBCNDRCOTQyQjU5NkYwMEQ2MUY3MUMxNkJEOUIyQzk5MTk1R
DRGNzQ4OTg0QzFDMjFEMzQwOUQ0RUIxQTRFOTZGMTFBN0ExODg3MTZCQTc5QUE2QTU5RDk3MUMzOUQ1MkY1NEM2Q0I1OUFCNz
FBOTQ3M0VBQkE3QzUzQzc0MzM4ODk3RUY3NEJFQkJFODg2QjE4QkU5RUFGQURFRDE3NUMyRTg0NjRDRjNDQzJGN0Y1QTU4RDlD
OTIzMDM5OQ=='><img src='images/google.gif' alt=Google title=Google border='0'></img></a></td>
</TR><TR>
<td>
<a href='http://rp.example.com:24666/oic_rp/init??applicationID=sampleportal
&saeToken=RU5DUllQVEVEMDI5M0FFNjIzMEVEOUZEQkEzMEU0QzAxMDlCOTg1ODlDQ0I5QkQxM0JGQjhGQkY5QzAzNDZEREZGN
0I1RDBBMjQ3NzkxNjdBOERFNTUzN0IxMzk0QTdENUUyNDQxOTdBMDQ5MjMxQUJDMUZDMzVFNjI5NkVBREZBNzk0MUJDQTY2OTE3
RkRCQTUyRUFERTVGNEIyN0NCMzMzMThBQTM2MDlGOTE5NDY4OTBCN0EyNzdGRUY2Qjc1RTBENjY4MDEyNTVGOTA3Mzc5MTZGQkU
1MkM0RkQwMEJFQjAzOUQ4NEQyOEYyNDU4MDRDMjUzQjg2ODlGRkM1MkFGRTEwOTAwMDM2NDExRDIwMzkyMDBBMzYxMkZGRjU4Rj
VNkFBQ0QwQTgyMzA2NDA2REEyMzkxMzU2NjAzNDIzNzE5MDdDM0RFRURGNTE5NjI4MzQ2RTVCNzZCOTg5Q0NFMkM2RTkwMQ=='>
<img src='images/yahoo.gif' alt=Yahoo title=Yahoo border='0'></img></a></td></TR>
<!-­--­-End Providers-­--­->
</table>

11.4.3 ユーザー登録の処理

ローカル・エンドユーザー・アカウントの作成を容易にするために、Mobile and Socialではユーザーがローカル・アカウントを作成するよう促すことができます。ユーザーがアイデンティティ・プロバイダで認証された後で、Mobile and Socialはカスタム・ユーザー登録ページ、またはMobile and Socialサーバーに含まれる組込み登録ページにリダイレクトできます。

この項では、次の両方の方法について説明します。

11.4.3.1 カスタム・ユーザー登録ページの使用方法

この項の情報を使用して、Mobile and Socialで使用するためのカスタム・ユーザー登録ページを構成します。

サーバー上でのユーザー登録プロパティの構成

Mobile and Socialシステム管理コンソールを使用して、アプリケーション用の次のユーザー登録プロパティを構成します。

  • ユーザー登録(「有効」を選択)

  • 登録URL

  • 属性(「アプリケーション・ユーザー属性」セクションにある)

  • 属性マッピング(「アプリケーション・ユーザー属性マッピングを使用した登録サービス詳細」セクションにある)

各フィールドの詳細は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のアプリケーション・プロファイルの編集または作成に関する項を参照してください。

saeTokenの復号化

ユーザー登録がアプリケーション用に有効になっている場合、Mobile and Socialは、構成された登録URLにリダイレクトします。Mobile and Socialは、URLにPOSTを実行し、共有シークレットで暗号化されたユーザー・プロファイル・データを含むsaeTokenと、アプリケーション名であるApplicationの2つのパラメータを含めます。

oic_clientsdkRPClient APIを使用して、saeTokenを復号化します。

次に例を示します。

String saeToken = request.getParameter("saeToken");
Map<String, UserAttribute> regAttrMap = null;
if (saeToken != null) {    Map<String, String> saeAttrs = client.getAttrFromSaeToken(saeToken,
                                   "shared secret value","shared secret value");
    System.out.println("register: saeAttrs :" + saeAttrs);
        String regAttrs = saeAttrs.get ("reg_attrs");
    String selectedIDP = saeAttrs.get ("oicInternetIdentityProvider");
    String state = saeAttrs.get ("return_url");
}

次のブロックは、saeTokenのすべての属性を示しています。

saeAttrs :{readonly_fields=uid,mail, password_field=password,
registerReadOnlyToken=RU5DUllQVEVEODk4QjlGQzU0RjNDNTQyNTY0NTU1MzMzOTU3RDU3QjkwNzd
EMTBGREJDMTlBQjM4NDIzNTFFRkI0OUNDQjg1M0JFREQ1NTdCM0I5RkY4MEYyNjFDMEE1NUFBRjhDQjA4
QTQ1M0IyMDg0MzFCNzgxQjg4Nzg4QzJFNEU5MzJFNUM0MjgxMEQxNjEzNkFERjE1MUE0QTMzM0E3MTMyN
zM5NUExN0U3MzA2MjZCRjZDQzgxN0I2MjIwNzEyNEQ2REVE, 
reg_attrs=uid:UserId:example@gmail.com:,mail:Email Address::,
timezone:Time Zone::,postaladdress:Country:US:,preferredlanguage:Language:en-US:,
lastname:Last Name:doe:,commonname:First Name:john:,password:Password::,,
username_attr=uid, mandatory_fields=uid,mail,password,password,
state=f166f9aa12edaaeffce703276de2d73c30dbddd0,
oicInternetIdentityProvider=Google, 
return_url=http://host.example.com:18001/oic_rp/popup?state=f166f9aa12edaaeffce703276de2d73c30dbddd0}

アプリケーションは、reg_attrsの値を処理する必要があります。他のsaeToken属性は無視する必要があります。

reg_attrs=uid:UserId:example@gmail.com:,mail:Email Address::,
timezone:Time Zone::,postaladdress:Country:US:,preferredlanguage:Language:en-US:,
lastname:Last Name:doe:,commonname:First Name:john:,password:Password::,,

値はカンマで区切られた{User Attribute Name:User Attribute Label:User Attribute Value}セットです。

アプリケーションは、oicUserRegister=doneをURLに追加して、Mobile and Social戻りURLにリダイレクトできます。

次に例を示します。

response.sendRedirect(http://oic.host.com:18001/oic_rp/popup?state=f166f9aa12edaaeffce703276de2d73c
30dbddd0&oicUserRegister=done);

Mobile and Socialでは、アイデンティティ・プロバイダ認証に基づいたユーザー・トークンを作成し、それをアプリケーションに戻します。

11.4.3.2 Mobile and Social組込みユーザー登録ページの使用方法

この項の情報を使用して組込みユーザー登録ページを有効にします。このページを図11-3に示します。

サーバー上でのユーザー登録プロパティの構成

Mobile and Socialシステム管理コンソールを使用して、アプリケーション用の次のユーザー登録プロパティを構成します。

  • ユーザー登録(「有効」を選択)

  • 登録URL(デフォルトのMobile and Socialソーシャル・アイデンティティ・アプリケーション、OAMApplicationで提供されるURLに設定)。例: http://host.example.com:port/oic_rp/register.jsp

  • 属性(「アプリケーション・ユーザー属性」セクションにある)

  • 属性マッピング(アプリケーション・ユーザー属性マッピングを使用した登録サービス詳細セクションにある)

各フィールドの詳細は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のアプリケーション・プロファイルの編集または作成に関する項を参照してください。

ユーザー登録がアプリケーション用に有効になっている場合、Mobile and Socialは、組み込まれたMobile and Socialユーザー登録ページにリダイレクトします。ユーザーはフォームに記入して登録するか(Access Managerがリソースを保護している場合は必須)、登録をスキップできます。Mobile and Socialは、アプリケーションの構成済戻りURLにリダイレクトします。

図11-3 Mobile and Social組込みユーザー登録ページ

組込みユーザー登録ページ

11.4.4 最終的な返信レスポンスの処理

ユーザー認証後、およびオプションでユーザー登録後、Mobile and Socialは再度アプリケーションにリダイレクトします。

ユーザーがローカルでログインするか、アイデンティティ・プロバイダを使用してログインするかによって、返信レスポンスはわずかに異なります。

ローカル・ログイン返信レスポンス

ユーザーがローカルにログインする場合は、Mobile and SocialはsaeTokenパラメータを使用して、再度アプリケーションの戻りURLにリダイレクトします。saeTokenには、共有シークレットを使用して暗号化された、Mobile and Socialで生成されたユーザー・トークン・データが含まれます。

oic_clientsdkRPClient APIを使用して、saeTokenを復号化します。

次に例を示します。

String saeToken = request.getParameter("saeToken");
if (saeToken != null) {
    Map<String, String> saeAttrs = client.getAttrFromSaeToken(saeToken,
                                   "shared secret value","shared secret value");
    System.out.println("register: saeAttrs :" + saeAttrs);
    String uid = saeAttrs.get ("uid");
    String authType = saeAttrs.get ("authType");
    String oicUserToken = saeAttrs.get ("oicLocalLoginUserToken ");
}

次のブロックは、saeTokenレスポンス属性を示しています。

{uid=weblogic, authType=local,
oicLocalLoginUserToken=eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCIsImtpZCI6ImJhc2VfZG9tYW
luIn0.eyJleHAiOjEzMzkwODkzMzAxMTgsImF1ZCI6InJlc3Rfc2VydmVyIiwiaXNzIjoiSW50ZXJuZXR
JZGVudGl0eUF1dGhlbnRpY2F0aW9uIiwicHJuIjoid2VibG9naWMiLCJqdGkiOiIyZTVhZmJhZS03ZTQz
LTQwYmMtODIwZS1mODVhN2MyODE2ZWUiLCJvcmFjbGUub2ljLnRva2VuLnR5cGUiOiJVU0VSVE9LRU4iL
CJpYXQiOjEzMzkwODU3MzAxMTgsIm9yYWNsZS5vaWMudG9rZW4udXNlcl9kbiI6InVpZD13ZWJsb2dpYy
xvdT1wZW9wbGUsb3U9bXlyZWFsbSxkYz1iYXNlX2RvbWFpbiJ9.UIZuur_e_uWyFzoig
_mBolPXKIz5BnmmszmB65zsAVNISQ9dui0PRd6F85N-0ZBPKQMf8Xnch0c_mjIt6eXwUD6YD_
Wo0f44svmzM43X74Q2VkMgkH2xM1-3lZEMQb03zZ55CrR5UXpsDKvF54bSa6-jbg2ODZAb2ralEqKiVd0}

レスポンス属性の詳細は、第11.4.4.1項「Secured Attribute Exchange (SAE)トークン・レスポンス属性」を参照してください。

アイデンティティ・プロバイダ・ログイン返信レスポンス

ユーザーがアイデンティティ・プロバイダを使用してログインする場合、Mobile and Socialは再度アプリケーションの戻りURLにリダイレクトします(HTTP POSTを使用)。レスポンスにはsaeTokenパラメータが含まれ、共有シークレットを使用して暗号化されたMobile and Socialで生成されたリライイング・パーティ・ユーザー・トークン・データおよびアイデンティティ・プロバイダによって戻されたユーザー・プロファイル・データが含まれます。

oic_clientsdkRPClient APIを使用して、saeTokenを復号化します。

次に例を示します。

String saeToken = request.getParameter("saeToken");
if (saeToken != null) {
    Map<String, String> saeAttrs = client.getAttrFromSaeToken(saeToken,
                                   "shared secret value","shared secret value");
    System.out.println("register: saeAttrs :" + saeAttrs);
    String uid = saeAttrs.get ("uid");
    String authType = saeAttrs.get ("oicInternetIdentityProvider ");
    String oicUserToken = saeAttrs.get ("internet_identity_user_token");
}

次のブロックは、saeTokenレスポンス属性を示しています。

{uid=example@gmail.com, mail=, timezone=, postaladdress=US, 
internet_identity_user_token=eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCIsImtpZCI6ImJhc2dn
VfZG9tYWluIn0.eyJleHAiOjEzMzkwODk4OTM4NjQsIm9yYWNsZS5vaWMudG9rZW4ucnAuaWRwX3VyaSI
6Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vYWNjb3VudHMvbzgvaWQiLCJvcmFjbGUub2ljLnRva2VuLnJw
LnVzZXJfaWRfdXJpIjoibWFpbHRvOm9pY3VzZXIxMDFAZ21haWwuY29tIiwiYXVkIjoicmVzdF9zZXJ2Z
XIiLCJpc3MiJJbnRlcm5ldElkZW50aXR5QXV0aGVudGljYXRpb24iLCJwcm4iOiJtYWlsdG86b2ljdXNl
cjEwMUBnbWFpbC5jb20iLCJqdGkiOiI0ZTQxNzhkYy1hOWRhLTQxODMtODVkMi1hNDM0MDM5YmZhNzUiL
CJvcmFjbGUub2ljLnRva2VuLnR5cGUiOiJVU0VSVE9LRU4iLCJpYXQiOjEzMzkwODYyOTM4NjQsIm9yYW
NsZS5vaWMudG9rZW4udXNlcl9kbiI6Im1haWx0bzpvaWN1c2VyMTAxQGdtYWlsLmNvbSBodHRwczovL3d
3dy5nb29nbGUuY29tL2FjY291bnRzL284L2lkIn0.K4d_gewCE6N61Ng8DsB31BIEEG1S1wMHWpt5CC8u
yfdMgtpEjzs77yFYzNz5vS6x6lsa8fH2FrSgOlxoyoiOnRF8UfJgCzk3VJIDNoDd_2BsYrBQVLGQzWTbs
avO5x09macq6rmOOT1Jbg9napfol8plqgTHPZgm3CH7Rt7jmxA, preferredlanguage=en-US,
lastname=doe, commonname=johndoe, oicInternetIdentityProvider=Google, password=}

レスポンス属性の詳細は、第11.4.4.1項「Secured Attribute Exchange (SAE)トークン・レスポンス属性」を参照してください。

11.4.4.1 Secured Attribute Exchange (SAE)トークン・レスポンス属性

次の表は、saeTokenレスポンス属性を示しています。これらの属性は、必要に応じてコードで使用できます。

表11-2 Secured Attribute Exchange (SAE)トークン・レスポンス属性

属性 説明

uid

Mobile and Socialがホストするログイン・ページ上でローカル・ログインを完了したユーザーのユーザーID。

authType

ユーザーが選択したログインのタイプ。例: authType=local

oicInternetIdentityProvider

ユーザーが選択したアイデンティティ・プロバイダ。例: oicInternetIdentityProvider=Google

oicLocalLoginUserToken

ローカルにログインするユーザーの、Mobile and Socialで生成されたユーザー・トークン。自身のアプリケーションでこのユーザー・トークンを使用して、Mobile and Socialのユーザー・プロファイルおよび他のRESTサービスにアクセスできます。

internet_identity_user_token

アイデンティティ・プロバイダを使用してログインするユーザーの、Mobile and Socialで生成されたユーザー・トークン。自身のアプリケーションでこのユーザー・トークンを使用して、Mobile and Socialのユーザー・プロファイルおよび他のRESTサービスにアクセスできます。


11.5 Access Managerで保護されているWebアプリケーションとの統合

Access Managerと統合されているWebアプリケーションとソーシャル・アイデンティティを統合するためのコードを記述する必要はありません。この統合を実行するには、Mobile and SocialとAccess Managerシステム管理コンソールを使用します。手順は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』の「ソーシャル・アイデンティティの構成」を参照してください。

11.6 ソーシャル・アイデンティティとモバイル・アプリケーションの統合

モバイル・ブラウザを使用してMobile and Socialサーバーでホストされるログイン・ページを表示する場合は、インターネット・アイデンティティ・サービスにより、モバイル・フレンドリなログイン・ページが提供されます。Mobile and Socialは、モバイル・デバイスを自動的に検出し、適切なページを表示します。詳細な構成は必要ありません。

ネイティブのモバイル・アプリケーションでソーシャル・アイデンティティ・ログイン・ページを統合する場合は、ホストされているログイン・ページまたはデバイス上にインストールされているカスタム・ログイン・ページのいずれかを使用できます。どのアイデンティティ・プロバイダがMobile and Socialサーバー上で有効になっているかを、モバイル・デバイスで実行されているコードが認識する必要はありません。モバイル・デバイス上で実行されるコードを更新する必要なしに、サーバー上でアイデンティティ・プロバイダを追加および削除できます。

11.6.1 Mobile and Socialサーバー上のモバイル・アプリケーションの定義

Mobile and Socialシステム管理コンソールを使用して、Mobile and Socialでモバイル・アプリケーション用のアプリケーション・プロファイルを定義します。このタスクの実行の詳細は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のアプリケーション・プロファイルの編集または作成に関する項を参照してください。

次に、Mobile and Socialサーバー上で構成する必要があるアイテムの一部の簡単な説明を示します。

  • アプリケーション名: アプリケーションの名前を指定します。

  • モバイル・アプリケーション戻りURL: モバイル・アプリケーションの戻りURLを指定します。Mobile and Socialは、このURLを使用して認証レスポンスを送信します。

  • 共有シークレット: モバイル・アプリケーションとMobile and Socialサーバーがセキュアな通信を容易に実現するために共有するセキュリティ・シークレットを指定します。

  • 必須のアイデンティティ・プロバイダ: アプリケーションへの認証にエンドユーザーが選択できるアイデンティティ・プロバイダを選択します。

  • ユーザー属性マッピング: アイデンティティ・プロバイダが返すユーザー・プロファイル属性を、アプリケーションに対してローカルのユーザー・プロファイル属性にマップします。