Oracle® Fusion Middleware Oracle Access Management開発者ガイド 11gリリース2 (11.1.2) B69537-02 |
|
![]() 前 |
![]() 次 |
この章では、インターネット・アイデンティティ・サービス・クライアントSDKを使用して、Mobile and Socialを、サポートされるWebおよびモバイル・アプリケーションと統合する方法について説明します。この章の内容は次のとおりです。
この章を読み始める前に、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のMobile and Socialの理解に関する項をお読みください。この開発者ガイドは、Mobile and Socialの用語と概念について熟知し、理解していることを前提としています。
この項では、一般的にインターネット・アイデンティティ・サービス・アプリケーションの開発に適用される概念および要件について説明します。
インターネット・アイデンティティ・サービスは、次の統合シナリオをサポートします。
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インスタンスを登録し、コンシューマ・キーとシークレット値を取得する必要があります。 |
インターネット・アイデンティティ・サービス・クライアント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
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サーバーが受け取る必須およびオプションの構成プロパティをリストしています。すべてのプロパティは文字列で、別途記載がないかぎり、オプションです。
表10-1 RPClientクラスで必要とされる構成プロパティ
プロパティ名 | 必須 | 説明 | コメント |
---|---|---|---|
|
必須 |
Mobile and Socialサーバーにアクセスするために必要なURL(プロトコル、ホスト名およびポート番号を含む)。HTTPおよびHTTPSプロトコルのみがサポートされています。 |
|
|
必須 |
アイデンティティ・プロバイダ・サービスにアクセスするために必要な相対パス。 |
現在のサービス・パス: /oic_rp/rest/ identityproviders このパスは、 |
|
必須 |
リライイング・パーティ(RP)サービスにアクセスするために必要な相対パス。 |
現在のサービス・パス: /oic_rp/ RPInitServlet |
|
サーバーが応答を停止した場合の接続が中断されてからの経過時間(ミリ秒)。Nullまたは空は無限を意味します(タイムアウトなし)。 |
||
|
必須 |
サーバーと安全に通信するために使用されるシークレット。 |
BASE64でエンコードされた文字列。 |
|
サーバーと安全に通信するために使用されるアルゴリズム。省略される場合は、デフォルトで |
サポートされる値は次のとおりです。
|
|
|
キーの暗号化に使用されるキーの長さ。省略される場合は、デフォルトで |
||
|
暗号化のタイプ。省略される場合は、デフォルトで対称。 |
||
|
暗号化キーを含むファイル名。 |
||
r |
キーストアのタイプを決定します。 |
||
|
キーストア・パスワード。 |
||
|
秘密鍵の別名。 |
||
|
公開鍵の別名。 |
||
|
秘密鍵のパスワード。 |
||
|
Certインタフェースを実装するクラス名。 |
||
|
プロキシ・サーバーで使用するプロトコル。 |
サポートされる値は次のとおりです。 http socks direct |
|
|
プロキシ・サーバーのホスト名。 |
||
|
プロキシ・サーバーのポート番号。 |
||
|
プロキシ・サーバーで認証するために必要なユーザー名。 |
||
|
プロキシ・サーバーで認証するために必要なパスワード。 |
次のサンプル・コードは、使用可能なインターネット・アイデンティティ・プロバイダおよびその対応する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()
関数は、ローカル・ファイルが見つからない場合にデフォルトのプロパティ・ファイルを作成します。ただし、必要な値を提供する必要があります。詳細は、表10-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); } }
インターネット・アイデンティティ・サービスSDKは、Java互換のアプリケーション・サーバー上で実行しているポータル・サイトやコンシューマ主導のWebサイトなどのWebアプリケーションをサポートしています。
インターネット・アイデンティティ・サービスをWebアプリケーションと統合するには、まず、Mobile and Socialサーバー上でWebアプリケーションを定義し、インターネット・アイデンティティ・サービス・ログイン・ページをWebアプリケーションと統合します。次に、ユーザー登録を構成し(オプション)、最終的な返信レスポンスを処理します。
この項の項目は次のとおりです。
Mobile and Socialシステム管理コンソールを使用して、Mobile and Socialサーバー上のWebアプリケーションを定義します。このタスクの実行の詳細は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』のアプリケーション・プロファイルの編集または作成に関する項を参照してください。
次に、Mobile and Socialサーバー上で構成する必要があるアイテムの一部の簡単な説明を示します。
アプリケーション名: Webアプリケーションのコンテキスト名を指定します。
Mobile and Socialアプリケーション戻りURL: 認証レスポンスを返すためにMobile and Socialが使用するURLを指定します。
共有シークレット: WebアプリケーションとMobile and Socialサーバーがセキュアな通信を容易に実現するために共有するセキュリティ・シークレットを指定します。共有シークレットは、ユーザー登録時にも必要です。
必須のアイデンティティ・プロバイダ: アプリケーションへの認証にエンドユーザーが選択できるアイデンティティ・プロバイダを選択します。
アプリケーション・ユーザー・プロファイル属性マッピング: アイデンティティ・プロバイダが返すユーザー・プロファイル属性を、アプリケーションに対してローカルのユーザー・プロファイル属性にマップします。
ユーザー登録および登録URL: システムがローカル・アカウントのないユーザーに登録を促す必要があるかどうかを示します。サービス・プロバイダの完了時に、サーバーが認証後にユーザーをリダイレクトするURLを指定します。
インターネット・アイデンティティ・サービスを統合するには、インターネット・アイデンティティ・サービス・クライアントSDK(oic_clientssdk.jar
)を使用し、そのログイン・ページ(login.jsp
)を変更します。
インターネット・アイデンティティ・サービス・ログイン・ページをWebアプリケーションと統合するには、(1)Mobile and Socialサーバー上でホストされる事前作成されたログイン・ページをHTML <iframe>
タグを使用してWebアプリケーションに追加する、または(2)Mobile and Socialで提供されるインターネット・アイデンティティ・プロバイダ・データを使用してカスタム・ログイン・ページを構築するという2通りの方法があります。
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番目のパラメータが形成されます。(詳細は、第10.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を使用しているサンプル・ログイン画面を示します。このページは、ローカル・ユーザー認証とインターネット・アイデンティティ・プロバイダ認証の両方をサポートするように構成されています。
次のスクリーン・キャプチャは、前の例と同様で、インターネット・アイデンティティ・プロバイダ・サポートのみが有効なページを示しています。この例では、Webアプリケーションはそのローカル・ユーザー認証メカニズムを個別に実装します。
ログイン・ページをより一層柔軟に構築する必要がある場合は、この項で説明される方法を使用してください。
次の例のコードは、インターネット・アイデンティティ・サービス・クライアント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>
ローカル・エンドユーザー・アカウントの作成を容易にするために、Mobile and Socialではユーザーがローカル・アカウントを作成するよう促すことができます。ユーザーがアイデンティティ・プロバイダで認証された後で、Mobile and Socialはカスタム・ユーザー登録ページ、またはMobile and Socialサーバーに含まれる組込み登録ページにリダイレクトできます。
この項では、次の両方の方法について説明します。
この項の情報を使用して、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_clientsdk
でRPClient
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では、アイデンティティ・プロバイダ認証に基づいたユーザー・トークンを作成し、それをアプリケーションに戻します。
この項の情報を使用して組込みユーザー登録ページを有効にします。このページを図10-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にリダイレクトします。
ユーザー認証後、およびオプションでユーザー登録後、Mobile and Socialは再度アプリケーションにリダイレクトします。
ユーザーがローカルでログインするか、アイデンティティ・プロバイダを使用してログインするかによって、返信レスポンスはわずかに異なります。
ローカル・ログイン返信レスポンス
ユーザーがローカルにログインする場合は、Mobile and SocialはsaeToken
パラメータを使用して、再度アプリケーションの戻りURLにリダイレクトします。saeToken
には、共有シークレットを使用して暗号化された、Mobile and Socialで生成されたユーザー・トークン・データが含まれます。
oic_clientsdk
でRPClient
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}
レスポンス属性の詳細は、第10.4.4.1項「Secured Attribute Exchange (SAE)トークン・レスポンス属性」を参照してください。
アイデンティティ・プロバイダ・ログイン返信レスポンス
ユーザーがアイデンティティ・プロバイダを使用してログインする場合、Mobile and Socialは再度アプリケーションの戻りURLにリダイレクトします(HTTP POSTを使用)。レスポンスにはsaeToken
パラメータが含まれ、共有シークレットを使用して暗号化されたMobile and Socialで生成されたリライイング・パーティ・ユーザー・トークン・データおよびアイデンティティ・プロバイダによって戻されたユーザー・プロファイル・データが含まれます。
oic_clientsdk
でRPClient
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=}
レスポンス属性の詳細は、第10.4.4.1項「Secured Attribute Exchange (SAE)トークン・レスポンス属性」を参照してください。
次の表は、saeToken
レスポンス属性を示しています。これらの属性は、必要に応じてコードで使用できます。
表10-2 Secured Attribute Exchange (SAE)トークン・レスポンス属性
属性 | 説明 |
---|---|
|
Mobile and Socialがホストするログイン・ページ上でローカル・ログインを完了したユーザーのユーザーID。 |
|
ユーザーが選択したログインのタイプ。例: |
|
ユーザーが選択したアイデンティティ・プロバイダ。例: |
|
ローカルにログインするユーザーの、Mobile and Socialで生成されたユーザー・トークン。自身のアプリケーションでこのユーザー・トークンを使用して、Mobile and Socialのユーザー・プロファイルおよび他のRESTサービスにアクセスできます。 |
|
アイデンティティ・プロバイダを使用してログインするユーザーの、Mobile and Socialで生成されたユーザー・トークン。自身のアプリケーションでこのユーザー・トークンを使用して、Mobile and Socialのユーザー・プロファイルおよび他のRESTサービスにアクセスできます。 |
Access Managerと統合されているWebアプリケーションとインターネット・アイデンティティ・サービスを統合するためのコードを記述する必要はありません。この統合を実行するには、Mobile and SocialとAccess Managerシステム管理コンソールを使用します。詳細は、『Oracle Fusion Middleware Oracle Access Management管理者ガイド』の「インターネット・アイデンティティ・サービスの構成」の章を参照してください。
モバイル・ブラウザを使用してMobile and Socialサーバーでホストされるログイン・ページを表示する場合は、インターネット・アイデンティティ・サービスにより、モバイル・フレンドリなログイン・ページが提供されます。Mobile and Socialは、モバイル・デバイスを自動的に検出し、適切なページを表示します。詳細な構成は必要ありません。
ネイティブのモバイル・アプリケーションでインターネット・アイデンティティ・サービス・ログイン・ページを統合する場合は、ホストされているログイン・ページまたはデバイス上にインストールされているカスタム・ログイン・ページのいずれかを使用できます。どのアイデンティティ・プロバイダが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サーバーがセキュアな通信を容易に実現するために共有するセキュリティ・シークレットを指定します。
必須のアイデンティティ・プロバイダ: アプリケーションへの認証にエンドユーザーが選択できるアイデンティティ・プロバイダを選択します。
ユーザー属性マッピング: アイデンティティ・プロバイダが返すユーザー・プロファイル属性を、アプリケーションに対してローカルのユーザー・プロファイル属性にマップします。