6 .NETを使用したアイデンティティ・コネクタの開発

Identity Connector Framework (ICF)およびOracle Identity Managerメタデータを使用して、.NETにアイデンティティ・コネクタを開発できます。

この章は、Identity Connector Framework(ICF)とOracle Identity Managerメタデータを使用して.NETでアイデンティティ・コネクタを開発するのに必要な手順全体を確認するチュートリアルとなります。ここには、重要なICFクラスとインタフェース、コネクタ・バンドルおよびコネクタ・サーバーについての情報と、フラット・ファイル.NETアイデンティティ・コネクタの実装のコード例や、ユーザー・プロビジョニングとリコンシリエーションのプロセス用にOracle Identity Managerメタデータを作成するコード例が含まれています。

この章の構成は、次のとおりです。

6.1 フラット・ファイル.NETコネクタの開発

フラット・ファイル.NETコネクタを開発するには、Microsoft Visual Studioにプロジェクトを設定し、AbstractConfiguration、PoolableConnector、AbstractFilterTranslatorの各クラスを実装し、プロジェクトをビルドします。

この項では、フラット・ファイル.NETコネクタを開発する手順の概要をコード・サンプルとともに示します。

次の項目が含まれます。

6.1.1 フラット・ファイル.NETコネクタの開発の概要

フラット・ファイル・コネクタは、構成インタフェースの実装を開発し、その後、コネクタ・クラスを実装するという手順で開発します。

このドキュメントでは、作成、削除、更新および検索操作のフラット・ファイル・コネクタのサンプル実装について説明します。実装およびドキュメントを単純化するために、コネクタによってサポートされる構成プロパティおよびスキーマは最小限に維持されています。このコネクタの実装は、実際のコネクタの作成に役立つサンプルとしてのみ使用してください。

コネクタの実装を単純にするために、フラット・ファイルには名前、性別、資格、年齢属性のみが含まれていると仮定します。2つの構成ファイルの場所およびデリミタがあります。残りの構成は、サンプルにハードコードされています。

6.1.2 フラット・ファイル.NETコネクタの開発

フラット・ファイル.NETコネクタを開発するには、Microsoft Visual Studioにプロジェクトを設定し、AbstractConfiguration、PoolableConnector、AbstractFilterTranslatorの各クラスを実装し、プロジェクトをビルドします。

フラット・ファイル.NETコネクタを開発するには:

  1. Microsoft Visual Studioでコネクタを使用して、プロジェクトを設定します。

    1. タイプ・ライブラリの新しいVisual Studioプロジェクトを作成します。

    2. 参照として次のdllが追加されていることを確認します。

      - Common.dll

      - Framework.dll

      - FrameworkInternal.dll

      - System.dll

      - System.Core.dll

      これらのdllは、.NETコネクタ・サーバーで使用可能である必要があります。

  2. Org.IdentityConnectors.Framework.Spi.AbstractConfigurationベース・クラスを拡張して、フラット・ファイル・コネクタ用の構成クラスを実装します。AbstractConfigurationの実装については、AbstractConfigurationの実装を参照してください。

  3. 異なるSPIインタフェースOrg.IdentityConnectors.Framework.Spiを実装することで、フラット・ファイル・コネクタにコネクタ・クラスを作成します。PoolableConnectorの実装については、PoolableConnectorの実装を参照してください。

  4. このコネクタは、CreateEqualsExpression操作のみをサポートします。CreateEqualsExpressionを実装します。Org.IdentityConnectors.Framework.Common.Objects.Filters.AbstractFilterTranslator<T>の実装については、AbstractFilterTranslatorの実装を参照してください。

  5. 異なるクラスを実装します(ステップ2、3および4を参照)。

  6. プロジェクトのAssemblyInfo.csに存在するAssemblyVersionをノートにとります。サンプルAssemblyInfo.csファイルについては、サンプルAssemblyInfo.csファイルを参照してください。

  7. プロジェクトをビルドします。プロジェクトは、コネクタDLLを作成する必要があります。

6.1.3 AbstractConfigurationの実装

Org.IdentityConnectors.Framework.Spi.AbstractConfigurationベース・クラスは、フラット・ファイル・コネクタ用の構成クラスを実装するように拡張できます。

次のコード・サンプルは、AbstractConfigurationの実装を示しています。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Org.IdentityConnectors.Framework.Spi;?
using Org.IdentityConnectors.Framework.Common.Exceptions;?
using System.IO;
 
namespace Org.IdentityConnector.FlatFileConnector?
{
    /// <summary>
    /// Configuration class for flat file connector representing target system information?
    /// </summary>
    public class FlatFileConfiguration : AbstractConfiguration?
    {
        #region FileName
        /// <summary>
        /// Target file name
        /// </summary>
        /// <value>
        /// File name with complete path. As for executing the .NET Connector bundle we need .NET Connector Server, hence the file should reside
        /// on the machine where the connector server is present.
        /// </value>
        [ConfigurationProperty(Required = true, Order = 1)]
        public String FileName { get; set; }
        #endregion
 
        #region Delimiter
        /// <summary>
        /// Delimiter used within the target flat file
        /// </summary>
        /// <value>
        /// Delimter
        /// </value>
        [ConfigurationProperty(Required = true, Order = 2)]
        public String Delimiter { get; set; }
        #endregion
                
        #region
        /// <summary>
        /// Validates if the configuration properties provided are as requiered, if not throw ConfigurationException
        /// </summary>
        public override void Validate()
        {
            if (this.FileName == null || this.FileName.Length == 0)
            {
                throw new ConfigurationException("Configuration property FileName cannot be null or empty");
            }
            if (!File.Exists(this.FileName))
            {
                throw new ConfigurationException("Target file " + this.FileName + " does not exist");
            }
            if (this.Delimiter == null || this.Delimiter.Length == 0)
            {
                throw new ConfigurationException("Configuration property Delimiter cannot be null or empty");
            }
        }
        #endregion
    }
}

6.1.4 PoolableConnectorの実装

Org.IdentityConnectors.Framework.Spiインタフェースは、フラット・ファイル・コネクタのコネクタ・クラスを作成するように実装できます。

次のコード・サンプルでは、PoolableConnector,CreateOp,SchemaOp,TestOp,DeleteOp,UpdateOp,SearchOp<String>インタフェースを実装するため、すべてのCRUD操作をサポートします。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Org.IdentityConnectors.Framework.Spi;
using System.IO;
using Org.IdentityConnectors.Framework.Common.Exceptions;
using System.Security.AccessControl;
using Org.IdentityConnectors.Framework.Spi.Operations;
using Org.IdentityConnectors.Framework.Common.Objects;
using Org.IdentityConnectors.Common;
 
namespace Org.IdentityConnector.FlatFileConnector
{
    /// <summary>
    /// FlatFileConnector showing implementation of SchemaOp, test, create, delete, update and search operations.
    /// </summary>
    [ConnectorClass("FlatFileConnector_DisplayNameKey",typeof(FlatFileConfiguration))]
    public class FlatFileConnector : PoolableConnector,CreateOp,SchemaOp,TestOp,DeleteOp,UpdateOp,SearchOp<String>
    {
 
        /// <summary>
        /// Flat file configuration instance. This instance has the target system information.
        /// </summary>
        private FlatFileConfiguration config;
 
 
        #region Init
        /// <summary>
        /// Create a connection to target and store it for later use. But here we just set attributes of target file
        /// name to Normal
        /// </summary>
        /// <param name="config">Configuration Object</param>
        public void Init(Configuration config)
        {
            this.config = (FlatFileConfiguration)config;
            File.SetAttributes(this.config.FileName, FileAttributes.Normal);
        }
        #endregion
 
 
 
        #region CreateOp Members
        /// <summary>
        /// This creates a new row in the target file with the data as sent in the 'attrs'
        /// </summary>
        /// <param name="objClass">The ObjectClass. Here we support only Account</param>
        /// <param name="attrs">Attributes of this Account that need to be created on target</param>
        /// <param name="options">Will always be empty</param>
        /// <returns>Unique id Uid, representing the Account which was just created</returns>
        public Uid Create(ObjectClass objClass, ICollection<ConnectorAttribute> attrs, OperationOptions options)
        {            
            ConnectorAttribute NameAttribute = ConnectorAttributeUtil.Find(Name.NAME, attrs);
            ConnectorAttribute AgeAttribute = ConnectorAttributeUtil.Find("Age", attrs);
            ConnectorAttribute QualificationAttribute = ConnectorAttributeUtil.Find("Qualification", attrs);
            ConnectorAttribute GenderAttributute = ConnectorAttributeUtil.Find("Gender", attrs);
            StreamWriter writer = File.AppendText(this.config.FileName);
            writer.WriteLine("\nName:" + ConnectorAttributeUtil.GetAsStringValue(NameAttribute) + this.config.Delimiter + "Age:" + ConnectorAttributeUtil.GetAsStringValue(AgeAttribute) + this.config.Delimiter + "Qualification:" + ConnectorAttributeUtil.GetAsStringValue(QualificationAttribute) + this.config.Delimiter + "Gender:" + ConnectorAttributeUtil.GetAsStringValue(GenderAttributute));
            writer.Flush();            
            writer.Dispose();
            writer.Close();
            return new Uid(ConnectorAttributeUtil.GetAsStringValue(NameAttribute));
        }
        #endregion
 
 
        
        #region DeleteOp Members
        /// <summary>
        /// Deletes an entity from target flat file. We support only ACCOUNT object class.
        /// If the Uid (user name) is not found then UnknownUidException is thrown
        /// </summary>
        /// <param name="objClass"></param>
        /// <param name="uid"></param>
        /// <param name="options"></param>
        public void Delete(ObjectClass objClass, Uid uid, OperationOptions options)
        {
            String[] allLines = File.ReadAllLines(this.config.FileName);            
            String[] newLines = new String[allLines.Length];            
            Boolean userExisted = false;            
            for (int i = 0; i < allLines.Length; i++)
            {                
                char[] separator = new char[] { '$' };
                String[] thisLineSplit = allLines[i].Split(separator);                
                
                String name = "";
                foreach (String str in thisLineSplit)
                {
                    if (str.StartsWith("Name"))
                    {
                        name = str;
                        break;
                    }
                }                
                if (!name.Equals("Name" + ":" + uid.GetUidValue()))
                {
                    newLines[i] = allLines[i];
                }
                else
                {
                    userExisted = true;
                }
                
            }
            if (userExisted)
            {                
                File.WriteAllText(this.config.FileName, String.Empty);
                File.WriteAllLines(this.config.FileName, newLines);
            }
            else
            {
                throw new UnknownUidException("Uid "+uid.GetUidValue()+" not found");
            }            
        }
        #endregion
                
        #region UpdateOp Members
        /// <summary>
        /// Updates information of an existing user on the target flat file
        /// </summary>
        /// <param name="objclass">The ObjectClass. Here we support only user</param>
        /// <param name="uid">Unique id of the user using which we can find out the user on target. This is the returned vaue by CreateOp implementation</param>
        /// <param name="replaceAttributes">Updated attributes of user which should replace all existing user information on target</param>
        /// <param name="options">This will always be empty</param>
        /// <returns>Updated uid. It can be the same value which was provided to this method.</returns>
        public Uid Update(ObjectClass objclass, Uid uid, ICollection<ConnectorAttribute> replaceAttributes, OperationOptions options)
        {
            String uidValue = uid.GetUidValue();
            String[] allLines = File.ReadAllLines(this.config.FileName);
            String[] updatedLines = new String[allLines.Length];
            Boolean userExists = false;
            Uid updatedUid = uid;
            for(int i = 0; i < allLines.Length; i++)
            {
                String[] thisLineSplit = allLines[i].Split(new char[] { '$' });
                String name = "";
                foreach (String str in thisLineSplit)
                {
                    if (str.StartsWith("Name"))
                    {
                        name = str;
                        break;
                    }
                }
                String nameToBeUpdated = "Name:" + uidValue;
                if (!name.Equals(nameToBeUpdated))
                {
                    updatedLines[i] = allLines[i];
                }
                else
                {
                    ConnectorAttribute NameAttribute = ConnectorAttributeUtil.Find(Name.NAME, replaceAttributes);
                    ConnectorAttribute AgeAttribute = ConnectorAttributeUtil.Find("Age", replaceAttributes);
                    ConnectorAttribute QualificationAttribute = ConnectorAttributeUtil.Find("Qualification", replaceAttributes);
                    ConnectorAttribute GenderAttribute = ConnectorAttributeUtil.Find("Gender", replaceAttributes);
                    updatedLines[i] = "Name:"+NameAttribute.Value.First().ToString()+this.config.Delimiter+
                                      AgeAttribute.Name+":"+AgeAttribute.Value.First().ToString()+this.config.Delimiter+
                                      QualificationAttribute.Name+":"+QualificationAttribute.Value.First().ToString()+this.config.Delimiter+
                                      GenderAttribute.Name+":"+GenderAttribute.Value.First().ToString();
                    userExists = true;
                    updatedUid = new Uid(NameAttribute.Value.First().ToString());
                }
 
            }
            File.WriteAllText(this.config.FileName, String.Empty);
            File.WriteAllLines(this.config.FileName, updatedLines);
            if (!userExists)
            {
                throw new UnknownUidException("User "+uid.GetUidValue()+" not found");
            }
            return updatedUid;
        }
 
        #endregion
 
        #region SearchOp<string> Members
 
        /// <summary>
        /// Returns a filter translator used by ExecuteQuery. The functionality of filter translator is to translate any filters provided by calling application (OIM/OW/OPAM) to native queries.
        /// </summary>
        /// <param name="oclass">The ObjectClass. We support only ACCOUNT</param>
        /// <param name="options">Options</param>
        /// <returns>FilterTranslator instance</returns>
 
        public Org.IdentityConnectors.Framework.Common.Objects.Filters.FilterTranslator<string> CreateFilterTranslator(ObjectClass oclass, OperationOptions options)
        {
            return new FlatFileFilterTranslator();
        }
 
        /// <summary>
        /// Performs search on target based on query. Uses the handler instance to return back the searched result.
        /// </summary>
        /// <param name="oclass">The ObjectClass. This tells if we have to search for user (ACCOUNT) or group (GROUP). We support only user</param>
        /// <param name="query">Query as returned by FilterTranslator</param>
        /// <param name="handler">handler to return back result to caller</param>
        /// <param name="options">Options containing what attributes of entity to return back</param>
        public void ExecuteQuery(ObjectClass oclass, string query, ResultsHandler handler, OperationOptions options)
        {

            String[] results = GetResults(query);
            foreach (String result in results)
            {
                Console.WriteLine("Result = "+result);
                String result1 = result.Trim();
                if (result1.Length > 0)
                {
                    Console.WriteLine("Submitting result = " + result1);
                    SubmitConnectorObject(result1, handler);
                }
            }
        }
 
        #region SchemaOp Members
        /// <summary>
        /// Defines the schema supported by this connector
        /// </summary>
        /// <returns>Schema</returns>
        public Schema Schema()
        {
            SchemaBuilder schemaBuilder = new SchemaBuilder(SafeType<Connector>.Get(this));
            ICollection<ConnectorAttributeInfo> connectorAttributeInfos = new List<ConnectorAttributeInfo>();
            connectorAttributeInfos.Add(ConnectorAttributeInfoBuilder.Build("Name"));
            connectorAttributeInfos.Add(ConnectorAttributeInfoBuilder.Build("Age"));
            connectorAttributeInfos.Add(ConnectorAttributeInfoBuilder.Build("Qualification"));
            connectorAttributeInfos.Add(ConnectorAttributeInfoBuilder.Build("Gender"));
            schemaBuilder.DefineObjectClass(ObjectClass.ACCOUNT_NAME, connectorAttributeInfos);
            return schemaBuilder.Build();
        }
 
        #endregion
 
        #region TestOp Members
        /// <summary>
        /// Should ideally test the connecttion with target. But here we just print something as we have assumed that target file is on same machine
        /// </summary>
        public void Test()
        {
            Console.Write("Tested connection!");
        }
 
        #endregion
 
 
        #region CheckAlive
        /// <summary>
        /// Check connection to target system is alive or not. But here we just check if target file name
        /// provided in the FlatFileConfiguration is available or not.
        /// </summary>
        public void CheckAlive()
        {
            if (!File.Exists(this.config.FileName))
            {
                throw new ConnectorException("Target file " + this.config.FileName + " does not exist");
            }
        }
        #endregion
 
 
 
        #region Dispose
        /// <summary>
        /// Remove connection from target, dispose any of the resources used. But here we just chill.
        /// </summary>
        public void Dispose()
        {
            //chill :)
        }
        #endregion
 
        private void SubmitConnectorObject(String result, ResultsHandler handler)
        {
            ConnectorObjectBuilder cob = new ConnectorObjectBuilder();
            String[] resultSplit = result.Split(new char[]{'$'});
            ICollection<ConnectorAttribute> attrs = new List<ConnectorAttribute>();
            foreach (String str in resultSplit)
            {
                ConnectorAttributeBuilder cab = new ConnectorAttributeBuilder();
                cab.AddValue(str.Split(new char[] { ':' })[1]);
                if (str.StartsWith("Name"))
                {
                    cob.SetName(Name.NAME);
                    cob.SetUid(str.Split(new char[] { ':' })[1]);
                    cab.Name = Name.NAME;                    
                }
                else
                {
                    cab.Name = str.Split(new char[] { ':' })[0];
                }
                attrs.Add(cab.Build());
            }
            cob.AddAttributes(attrs);
            handler(cob.Build());
        }
 
        private String[] GetResults(String query)
        {
            String[] allLines = File.ReadAllLines(this.config.FileName);
            String[] results = allLines;
if (query != null)
            {
                for (int i = 0; i < allLines.Length; i++)
                {
                    String[] thisLineSplit = allLines[i].Split(new char[]{'$'});
                    Boolean foundResult = false;
                    foreach (String str in thisLineSplit)
                    {
                        if (str.StartsWith("Name") && str.Equals(query))
                        {
                            foundResult = true;
                            break;
                        }
                    }
                    if (foundResult)
                    {
                        return new String[] {allLines[i]};
                    }
                }
            }
 
            return results;
        }
 
        #endregion
    }
}

6.1.5 AbstractFilterTranslatorの実装

Org.IdentityConnectors.Framework.Common.Objects.Filters.AbstractFilterTranslator<T>インタフェースは、CreateEqualsExpression操作用に実装できます。

次のコード・サンプルに、フィルタ操作を定義するOrg.IdentityConnectors.Framework.Common.Objects.Filters.AbstractFilterTranslator<T>のサンプル実装を示します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Org.IdentityConnectors.Framework.Common.Objects.Filters;
using Org.IdentityConnectors.Framework.Common.Objects;
 
namespace Org.IdentityConnector.FlatFileConnector
{
    /// <summary>
    /// FlatFileFilterTranslator. This translator converts the equalsFilter provided by the calling application to native query which can be used by the connector while searching.
    /// The implementation shown supports only equals filter. i.e it has provided implementation for only CreateEqualsExpression, this means that if any other filter is provided 
    /// by the calling application, it would not be translated as a native query and search implementation gets all users and filtering will be done by ICF with all results.
    /// 
    /// </summary>
    public class FlatFileFilterTranslator : AbstractFilterTranslator<String>
    {
        /// <summary>
        /// Creates a native query for equals filter and returns it only if equals filter is constructed for Name attribute and not for any other attributes.
        /// </summary>
        /// <param name="filter">Filter provided by calling application</param>
        /// <param name="not"></param>
        /// <returns></returns>
        protected override string CreateEqualsExpression(EqualsFilter filter, bool not)
        {
            ConnectorAttribute attr = filter.GetAttribute();
            if (attr.Name.Equals(Name.NAME))
            {
                return "Name:" + attr.Value.First().ToString();
            }
            return null;
        }
    }
}

6.1.6 サンプルAssemblyInfo.csファイル

AssemblyInfo.csプロジェクト・ファイルには、AssemblyVersionが含まれています。

サンプルAssemblyInfo.csファイルの内容は、次のとおりです。

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
 
// General Information about an assembly is controlled through the following 
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("FlatFileConnector")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Oracle Corporation")]
[assembly: AssemblyProduct("FlatFileConnector")]
[assembly: AssemblyCopyright("Copyright © Oracle Corporation 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
 
// Setting ComVisible to false makes the types in this assembly not visible 
// to COM components.  If you need to access a type in this assembly from 
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(true)]
 
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("79eec317-62bd-49a5-9512-88d61135684c")]
 
// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

6.2 .NETコネクタ・サーバーでのアイデンティティ・コネクタ・バンドルのデプロイ

.NETに実装されているすべてのコネクタで、コネクタを実行する.NETコネクタ・サーバーを持つ必要があります。

コネクタ・バンドルはOracle Identity Manager内にデプロイすることはできません。したがって、ICF .NETアイデンティティ・コネクタとOracle Identity Managerを統合するために次の手順を実行する必要があります。

6.2.1 .NETコネクタ・サーバーへのコネクタ・バンドルの登録

コネクタ・バンドルを.NETコネクタ・サーバーに登録するには、CONNECTOR_SERVER_HOMEの場所でコネクタDLLをコピーします。

.NETコネクタ・サーバーでコネクタ・バンドルを登録またはデプロイするには、次のステップを実行します。

  1. .NETコネクタ・サーバーをインストールします。.NETコネクタ・サーバーのインストールの詳細は、.NETコネクタ・サーバーのインストールを参照してください。
  2. コネクタ・サーバーを停止します。コネクタ・サーバー・サービスが実行していないことを確認してください。
  3. CONNECTOR_SERVER_HOMEの場所でコネクタDLLをコピーします。CONNECTOR_SERVER_HOMEは、.NETコネクタ・サーバーのインストール後に、ConnectorServer.exeおよびファイルに関連するその他のコネクタ・サーバーが存在する場所です。
  4. .NETコネクタ・サーバーを起動します。

6.2.2 基本的なアイデンティティ・コネクタ・メタデータの作成

基本的なアイデンティティ・コネクタ・メタデータ構成は、プロビジョニングとリコンシリエーションの両方で必要となります。構成には、ITリソース・タイプ定義、リソース・オブジェクトおよび参照の作成が含まれます。

この項では、Design Consoleを使用して基本的なアイデンティティ・コネクタ・メタデータ構成を実行する方法について説明します。次の項目が含まれます。

6.2.2.1 ITリソース・タイプ定義の作成

ITリソース・タイプ定義は、リソースの接続情報の表現です。ITリソース・タイプ定義内の構成パラメータは、コネクタ・バンドルの構成パラメータと一致する必要があります。ITリソース内のパラメータの値は、バンドル構成で設定されます。

ノート:

バンドル構成によって使用されないパラメータを含めることができます。これらは、バンドル操作に悪影響は与えません。

ITリソース・タイプ定義を作成するには:

  1. Oracle Identity Manager Design Consoleにログインします。
  2. 「リソース管理」の下で、ITリソース・タイプ定義をクリックします。
  3. 「サーバー・タイプ」をFlat Fileとして定義して、新しいITリソース・タイプ定義を作成します。
  4. 図6-1に示すように、次のパラメータを追加します。
    • Configuration Lookupは、リソース用のメインの構成参照のマーカーです。パラメータの名前は、Configuration Lookupである必要があります。「デフォルトのフィールド値」に値を追加することをお薦めします。

    • デリミタは、バンドル構成のデリミタ・パラメータにマップします。このパラメータの値が渡されます。

    • FileNameは、バンドル構成のFileNameパラメータにマップします。このパラメータの値が渡されます。

    • Connector Server Nameは、.NETコネクタ・サーバーが実行中のコネクタ・サーバーのITリソース名を指定します。

      図6-1 Design ConsoleのITリソース・タイプ定義

      図6-1の説明が続きます
      「図6-1 Design ConsoleのITリソース・タイプ定義」の説明
6.2.2.2 リソース・オブジェクトの作成

リソース・オブジェクトは、Oracle Identity Managerでのリソースの表現です。コネクタ・バンドルは、リソース・オブジェクトに関連付けられています。

リソース・オブジェクトを作成するには:

  1. Oracle Identity Manager Design Consoleにログインします。
  2. 「リソース管理」の下の「リソース・オブジェクト」をクリックします。
  3. Flat Fileという名前で新しいリソース・オブジェクトを作成します。

    リソース・オブジェクトはターゲット・リソースであるため、図6-2に示すように、「信頼できるソース」ボックスは選択しません。

    図6-2 Design Consoleの「リソース・オブジェクト」

    図6-2の説明が続きます
    「図6-2 Design Consoleの「リソース・オブジェクト」」の説明
6.2.2.3 参照の作成

コネクタ・バンドルでサポートされている様々なオブジェクトに対して個別の参照を定義する必要があります。この参照には、これらのオブジェクトのプロビジョニングおよびリコンシリエーションに関連する情報を含めることができます。メインの構成参照は、これらの参照へのポインタが含まれているため、オブジェクト固有の参照のルートになります。次の項では、参照の作成方法について説明します。

6.2.2.3.1 メインの構成参照の作成

(ITリソース・タイプ定義の作成で定義した)構成参照には、接続情報とはみなされないコネクタ・バンドル構成が保持されます。ITリソース・タイプ定義で構成パラメータが見つからない場合、Oracle Identity Managerは構成参照を検索します。メインの構成参照には、バンドル・プロパティおよびバンドル構成が含まれています。バンドル・プロパティ・パラメータは、正しいバンドルの識別に必要であるため、必須です。ITリソース・タイプ定義の一部として定義されていないバンドル構成(ITリソース・タイプの定義の作成を参照)は、ここで宣言できます。

ノート:

コード・キーの値は、図と完全に一致する必要があります。デコードの値は、コネクタ・バンドルに固有です。

メインの構成参照を作成するには:

  1. Oracle Identity Manager Design Consoleにログインします。
  2. 「管理」の下の「参照定義」をクリックします。
  3. 新しい参照を作成し、Lookup.FlatFile.Configurationをコードの値として追加します。
  4. 図6-3に示すように、次の参照コード情報を追加します。
    • AssemblyVersionを必須バンドル・バージョンとして追加します。

    • FlatFile.Connectorを必須バンドル名として追加します。バンドル名は、コネクタのdll名から識別できます。コネクタDLLは、BUNDLE_NAME.dll形式です。

    • Org.IdentityConnector.FlatFileConnector.FlatFileConnectorを必須コネクタ名として追加します。

    • OBJECT_TYPE_NAME Configuration Lookupは、特定のオブジェクト・タイプの構成参照です。この例では、User Configuration Lookupが定義されているため、オブジェクト・タイプはUserになります。

    図6-3 Design Consoleの「参照定義」

    図6-3の説明が続きます
    「図6-3 Design Consoleの「参照定義」」の説明
6.2.2.3.2 オブジェクト・タイプの構成参照の作成

オブジェクト・タイプの構成参照には、特定のオブジェクト・タイプに固有のパラメータが含まれています。オブジェクト・タイプは、アイデンティティ・コネクタが動作するエンティティです。ICF ObjectClassにマップされます。メインの構成参照の作成でUser Configuration Lookupが参照されているため、Userがオブジェクト・タイプとなり、この場合はObjectClass.ACCOUNTにマップされています。(RolesとUserJobDataが、その他の2つのオブジェクト・タイプです。)オブジェクト・タイプ名は、アイデンティティ・コネクタ・バンドルでサポートされているオブジェクト・クラス名と一致する必要があります。Userオブジェクト・タイプは事前定義済のObjectClass.ACCOUNTにマップされ、Groupオブジェクト・タイプは事前定義済ObjectClass.GROUPにマップされます。アイデンティティ・コネクタが複数のオブジェクトをサポートしている場合、このステップをそれぞれに対して繰り返す必要があります。

ノート:

これらのユースケースは基本機能のみを対象としているため、この構成は必須属性として保持されます。

オブジェクト・タイプの構成参照を作成するには:

  1. Oracle Identity Manager Design Consoleにログインします。
  2. 「管理」の下の「参照定義」をクリックします。
  3. 新しい参照を作成し、Lookup.FlatFile.UM.Configurationをコードとして追加します。
  4. 図6-4に示すように、次の属性を設定します。

    ノート:

    このチュートリアルは、アイデンティティ・コネクタの実行に最低限必要な構成に焦点を当てています。

    • プロビジョニング属性マップの値はLookup.FlatFile.UM.ProvAttrMapとします。この参照には、Oracle Identity Managerフィールドとアイデンティティ・コネクタ属性との間のマッピングが含まれています。このマッピングは、プロビジョニング時に使用されます。

    • リコンシリエーション属性マップの値はLookup.FlatFile.UM.ReconAttributeMapとします。この参照には、Oracle Identity Managerリコンシリエーション・フィールドとアイデンティティ・コネクタ属性との間のマッピングが含まれています。このマッピングは、リコンシリエーション時に使用されます。

      図6-4 Design Consoleの2番目の「参照定義」

      図6-4の説明が続きます
      「図6-4 Design Consoleの2番目の「参照定義」」の説明

6.2.3 プロビジョニング・メタデータの作成

フラット・ファイル・プロビジョニング用にOracle Identity Managerを構成するには、プロビジョニング・メタデータを作成します。そのためには、プロセス・フォーム、アダプタ、プロセス定義およびプロビジョニング属性マッピング参照を作成します。

次の項は、フラット・ファイル・プロビジョニング用にOracle Identity Managerを構成するために実行する必要があります。

6.2.3.1 プロセス・フォームの作成

プロセス・フォームは、Oracle Identity Managerでのオブジェクト属性の表現として使用されます。

この項では、プロセス・フォームとプロセス・フォームを作成する方法について説明します。次の項目が含まれます。

6.2.3.1.1 プロセス・フォームについて

プロセス・フォームは、Oracle Identity Managerでのオブジェクト属性の表現として使用されます。これにより、操作のためにオブジェクト属性がコネクタ・バンドルに渡される前に、ユーザーが設定を容易に入力できます。

プロセス・フォームで定義された属性は、規則ではありません。このフォームは、アイデンティティ・コネクタに渡される必要がある属性に対するチャレンジの方法です。一般的に、アイデンティティ・コネクタのサポートされている各属性に対して属性を定義します。

ノート:

アイデンティティ・コネクタ属性で1対1のマッピングを設定することをお薦めします。

対応するITリソース・タイプ定義に関連付ける必要があるITリソースを問い合せるためのフィールドが存在する必要があります。各フィールドの変数タイプは、オブジェクト属性のタイプにマップする必要があります。

6.2.3.1.2 プロセス・フォームの作成

プロセス・フォームを作成するには:

  1. Oracle Identity Manager Design Consoleにログインします。
  2. 「開発ツール」の下の「フォーム・デザイナ」をクリックします。
  3. 図6-5に示すように、「表名」がUD_FLATFILEである新しいフォームを作成します。

    図6-5 Design Consoleの「フォーム・デザイナ」

    図6-5の説明が続きます
    「図6-5 Design Consoleの「フォーム・デザイナ」」の説明
  4. コネクタ・スキーマの属性に示されているように、コネクタ・スキーマで定義されている属性を追加します。
  5. 「プロパティ」タブをクリックします。
  6. 図6-6に示しているように、次のプロパティをServer(ITResourceLookupField)に追加します。
    • Required = true

    • Type = Flat File

    図6-6 Design Consoleの「フォーム・デザイナ」のプロパティ

    図6-6の説明が続きます
    「図6-6 Design Consoleの「フォーム・デザイナ」のプロパティ」の説明
  7. フォームを保存します。
  8. 「Make Version Active」をクリックします
6.2.3.1.3 コネクタ・スキーマの属性

表6-1に、コネクタ・スキーマに定義されている属性をリストします。

表6-1 「フォーム・デザイナ」のフィールド

名前 バリアント フィールド・ラベル フィールド・タイプ

UD_FLATFILE_NAME

文字列

名前

TextField

UD_FLATFILE_AGE

文字列

年齢

TextField

UD_FLATFILE_QUALIFICATION

文字列

資格情報

TextField

UD_FLATFILE_GENDER

文字列

性別

LookupField

UD_FLATFILE_RETURNIDQ

文字列

Return Id

DOField

UD_FLATFILE_ITRESOURCE

Long

ITリソース

ITResourceLookup

ノート:

フラット・ファイルの列名は、FirstName、ChangeNo、EmailID、Server、LastNameおよびAccountIDです。

6.2.3.2 アダプタの作成

コネクタ・バンドルでサポートされているすべての操作(作成、更新、削除など)に対してアダプタを作成する必要があります。

アダプタを作成するには:

  1. Oracle Identity Manager Design Consoleにログインします。

  2. 「開発ツール」の下の「アダプタ・ファクトリ」をクリックします。

  3. 新しいアダプタを作成して、アダプタ名として、フラット・ファイルの作成ユーザーを追加します。

  4. 「アダプタ・タイプ」として「プロセス・タスク」を追加します。

  5. アダプタを保存します。

  6. 図6-7に示すように、「変数リスト」タブをクリックして、次の変数を追加します。

    • 「タイプ」が「文字列」で、マップが実行時に解決であるobjectType。

    • 「タイプ」が「ロング」で、マップが実行時に解決であるprocessInstanceKey。

    • 「タイプ」が「文字列」で、マップが実行時に解決であるitResourceFieldName。

    図6-7 Design Consoleの「アダプタ・ファクトリ」の変数リスト

    図6-7の説明が続きます
    「図6-7 Design Consoleの「アダプタ・ファクトリ」の変数リスト」の説明
  7. 図6-8に示すように、次のサブ手順を実行して、Java機能タスクをアダプタに追加します。

    1. アダプタ・タスク・タブをクリックします。

    2. アダプタを選択し、「追加」をクリックします。

    3. タスク・オプションからJavaを選択します。

    4. APIソースから「icf-oim-intg.jar」を選択します。

    5. APIソースとして「oracle.iam.connetors.icfcommon.prov.ICProvisioninManager」を選択します。

    6. タスクのメソッドとして「createObject」を選択します。

    7. 構成を保存します。

    8. (すでに変数リストに追加した)変数を、適切なメソッド入力および出力にマップします。

    9. 構成パラメータを、適切なメソッド入力および出力にマップします。

      データベース参照はデータベース参照(アダプタ参照)にマップし、戻り変数は戻り変数(アダプタ変数)にマップします。

    図6-8 Design Consoleの「アダプタ・ファクトリ」

    図6-8の説明が続きます
    「図6-8 Design Consoleの「アダプタ・ファクトリ」」の説明
  8. アダプタを保存してビルドします。

6.2.3.3 プロセス定義の作成

プロセス定義では、特定の操作用のコネクタ・バンドルの動作を定義します。すべての操作には、関連付けられている対応タスクがあります。

次の手順では、作成操作のプロセス定義、およびプロセス・タスクの統合を構成します。

  1. Oracle Identity Manager Design Consoleにログインします。
  2. 「プロセス管理」タブの「プロセス定義」をクリックします。
  3. 図6-9に示すように、新しいプロセス定義を作成し、それにFlat Fileという名前を付けます。

    図6-9 Design Consoleの「プロセス定義」

    図6-9の説明が続きます
    「図6-9 Design Consoleの「プロセス定義」」の説明
  4. プロセスのタイプとして「プロビジョニング」を選択します。
  5. アイデンティティ・コネクタのリソース・オブジェクト名を指定します(この例ではフラット・ファイル)。
  6. プロセス・フォームの表名を指定します(この例ではUD_FLATFILE)。
  7. プロセス・タスクを追加してCreate Userという名前を付けます。
  8. 図6-10に示すように、「Create User」をダブルクリックして、編集します。

    図6-10 Design Consoleのタスクの編集画面

    図6-10の説明が続きます
    「図6-10 Design Consoleのタスクの編集画面」の説明
  9. 統合タブをクリックします。
  10. 図6-11に示すように、「追加」をクリックして、リストからadpFLATFILECREATEUSERアダプタを選択します。

    このアダプタは、コンパイルされた後にのみ使用できます。

    図6-11 Design Consoleの「統合」タブ

    図6-11の説明が続きます
    「図6-11 Design Consoleの「統合」タブ」の説明
  11. 次のように変数をマップして、アイデンティティ・コネクタによって返されるレスポンス・コードを設定します。
    • Adapter Return Variable - レスポンス・コード

    • Object Type - [Literal:String] User(オブジェクト・タイプの名前)

    • Process Instance Key - [Process Data] プロセス・インスタンス

    • IT Resource Field Name - [Literal:String] UD_FLATFILE_ITRESOURCE (ITリソース情報が含まれたフォーム・フィールド名)

  12. 図6-12に示すように、「レスポンス」タブをクリックして、レスポンスを構成します。
    • UNKNOWNを、ステータスがR(拒否)の不明なレスポンスの受信として指定できます。

    • SUCCESSを、ステータスがC(完了)の操作の完了として指定できます。

    • ERRORを、ステータスがRのエラーの発生として指定できます。

    図6-12 Design Consoleでのレスポンスの構成

    図6-12の説明が続きます
    「図6-12 Design Consoleでのレスポンスの構成」の説明
  13. タスクのオブジェクト・ステータス・マッピング・タブをクリックします。
  14. 図6-13に示すように、オブジェクト・ステータスをステータスがCのProvisionedに更新します。

    図6-13 タスクとオブジェクトのステータス・マッピング

    図6-13の説明が続きます
    「図6-13 タスクとオブジェクトのステータス・マッピング」の説明
  15. プロセス・タスクを保存します。
6.2.3.4 プロビジョニング属性マッピング参照の作成

プロビジョニング属性マッピング参照には、アイデンティティ・コネクタ・バンドル属性へのOracle Identity Managerフィールドのマッピングが含まれます。

この項では、プロビジョニング属性マッピング参照を作成する方法について説明します。次の項目が含まれます。

6.2.3.4.1 プロビジョニング属性マッピング参照について

プロビジョニング属性マッピング参照には、アイデンティティ・コネクタ・バンドル属性へのOracle Identity Managerフィールドのマッピングが含まれます。プロビジョニング属性マッピング参照の説明を次に示します。

  • コード・キーは、プロセス・フォームのフィールド・ラベルです。

  • デコードは、アイデンティティ・コネクタ・バンドル属性です。

  • 子フォーム属性は、入力での埋込みオブジェクトとして構成できます。

  • アイデンティティ・コネクタのプロビジョニング操作は、レスポンスでUIDを返します。これは、アイデンティティ・コネクタ・バンドル属性に対してコーディングして、フォーム・フィールドに設定できます。

6.2.3.4.2 プロビジョニング属性マッピング参照の作成

プロビジョニング属性マッピング参照を作成する手順は、次のとおりです。

  1. Oracle Identity Manager Design Consoleにログインします。
  2. 「管理」タブの「参照定義」をクリックします。
  3. 新しい参照を作成し、Lookup.FlatFile.UM.ProvAttrMapという名前を付けます。

    参照の名前は、オブジェクト・タイプの構成参照から参照されます。オブジェクト・タイプの構成参照の作成を参照してください。

  4. 図6-14に示すように、フォーム・フィールド・ラベルをコード・キーとして追加し、アイデンティティ・コネクタ・バンドル属性をデコードとして追加します。
    • Name: __NAME__

    • Gender: Gender

    • Return Id: __UID__

    • Age: Age

    • Qualification: Qualification

    図6-14 参照コード・マッピング

    図6-14の説明が続きます
    「図6-14 参照コード・マッピング」の説明
6.2.3.4.3 プロビジョニング属性マップで使用されるフィールド・フラグ

ノート:

これらのプロパティは、高度なオプションで、コネクタの現在の実装では省略できます。

プロビジョニング属性マッピングの場合、次のフィールド・フラグをコード・キーに追加できます。

  • LOOKUP: これは、参照リコンシリエーション・ジョブの実行によって値が取得されるすべてのフィールドに指定する必要があります。参照リコンシリエーション・ジョブから取得された値には、ITリソース名/キーが追加されています。このフラグを指定すると、追加された値をバンドルに渡す直前にICF統合で削除するのに役立ちます。たとえば、ラベルがDatabaseで、参照リコンシリエーション・ジョブの実行により値が取得されたフィールドのコード・キーは、Database[LOOKUP]のようになります。

    ノート:

    LOOKUPフラグは、プロビジョニングとリコンシリエーション両方の属性マップに指定できます。プロビジョニングの場合、ITリソース名/ITリソース・キー接頭辞を削除する必要があります。リコンシリエーションの場合、ITリソース名/ITリソース・キー接頭辞を追加する必要があります。

  • IGNORE: これは、値が無視され、バンドルに送信されないすべてのフィールドに指定する必要があります。たとえば、ラベルがDatabaseで、値をバンドルに送信する必要がないフィールドのコード・キーは、Database[IGNORE]のようになります。

  • WRITEBACK: これは、作成操作または更新操作の直後に値をプロセス・フォームに書き戻す必要があるすべてのフィールドに指定する必要があります。このフラグを追加すると、ICF統合レイヤー・コールICF Get APIが、WRITEBACKフラグのマークがある属性の値を取得するようになります。たとえば、ラベルがDatabaseで、作成/更新の直後に値がプロセス・フォームに書き戻される必要があるフィールドのコード・キーは、Database[WRITEBACK]のようになります。これが機能するには、コネクタはGetApiOpインタフェースを実装し、ConnectorObject getObject(ObjectClass objClass、Uid uid、OperationOptionsオプション)APIに実装を提供する必要があります。このAPIは、Uidが渡されたUidと同じであるアカウントのターゲットを検索し、プロセス・フォームに書き戻されるすべての属性(およびその値)が含まれたコネクタ・オブジェクトをビルドします。

    ノート:

    コネクタがGetApiOpインタフェースを実装していない場合、WRITEBACKフラグは機能せず、エラーが生成されます。

  • DATE: これは、タイプがDateと見なされる必要があるフィールドに指定する必要があり、これがない場合、値は標準の文字列と見なされます。たとえば、ラベルがTodayで、値が日付形式で表示される必要があるフィールドのコード・キーは、Today[DATE]のようになります。

  • PROVIDEONPSWDCHANGE: これは、パスワード更新が発生した場合に、バンドル(ターゲット)に提供する必要があるすべてのフィールドに指定する必要があります。一部のターゲットは、追加の属性がすべてのパスワード変更で指定されると予測します。PROVIDEONPSWDCHANGEフラグを指定することで、パスワード変更がリクエストされた場合は必ずすべての追加フィールドまたは属性を送信するようICF統合に伝えます。たとえば、ラベルがExtra Attribute Needed for Password Changeで、パスワード更新時に値をバンドル(ターゲット)に提供する必要があるフィールドのコード・キーは、Extra Attribute Needed for Password Change[PROVIDEONPSWDCHANGE]のようになります。

6.2.4 リコンシリエーション・メタデータの作成

フラット・ファイルからレコードのリコンシリエーションを構成できます。

この項では、フラット・ファイルのレコードのリコンシリエーションを構成する手順について説明します。ターゲット・リコンシリエーションを例として使用しますが、信頼できるリコンシリエーションも同様の方法で構成できます。

リストされている順序で手順を実行してください。

6.2.4.1 リコンシリエーション・スケジュール済タスクの作成

デフォルトでは、リコンシリエーションはコネクタ・バンドルで検索操作を使用します。この操作は、Oracle Identity Managerを使用して構成されたスケジュール・タスクで呼び出されます。この手順は、次のサブ手順で構成されています。

6.2.4.1.1 スケジュール済タスクの定義

スケジュール済タスクを定義するには:

  1. 次の例に示すように、スケジュール済タスク詳細が含まれたデプロイメント・マネージャXMLファイルを作成します。データベースの値を、使用しているデータベースに必ず更新してください。
    <?xml version = '1.0' encoding = 'UTF-8'?>
    <xl-ddm-data version="2.0.1.0" user="XELSYSADM" database="jdbc:oracle:thin:@localhost:5524/estView.regress.rdbms.dev.mycompany.com" exported-date="1307546406635" description="FF">
    <scheduledTask repo-type="MDS" name="Flat File Connector User Reconciliation" mds-path="/db" mds-file="Flat File Connector User Reconciliation.xml">
        <completeXml>
            <scheduledTasks xmlns="http://xmlns.oracle.com/oim/scheduler">
                <task>
                <name>Flat File Connector User Reconciliation</name>
                <class>oracle.iam.connectors.icfcommon.recon.SearchReconTask</class>
                <description>Flat File Connector User Reconciliation</description>
                <retry>0</retry>
                <parameters>
                  <string-param required="false" encrypted="false" helpText="Filter">Filter</string-param>
                  <string-param required="false" encrypted="false" helpText="Incremental Recon Date Attribute">Incremental Recon Date Attribute</string-param>
                  <string-param required="false" encrypted="false" helpText="IT Resource Name">IT Resource Name</string-param>
                  <string-param required="false" encrypted="false" helpText="Object Type">Object Type</string-param>
                  <string-param required="false" encrypted="false" helpText="Latest Token">Latest Token</string-param>
                  <string-param required="false" encrypted="false" helpText="Resource Object Name">Resource Object Name</string-param>
                </parameters>
              </task>
            </scheduledTasks>
        </completeXml>
    </scheduledTask>
    </xl-ddm-data>
    
  2. このファイルをFlat File Connector User Reconciliation.xmlとして保存します。
  3. Identity System Administrationにログインします。「システム管理」の下で、「インポート」をクリックします。
  4. Flat File Connector User Reconciliation.xmlファイルを選択し、「インポート」をクリックします。
  5. ウィザードのステップを完了します。
6.2.4.1.2 スケジュール済ジョブの作成

この手順では、スケジュール済タスクの作成方法について説明します。

  1. Oracle Identity Manager拡張管理にログインします。
  2. 「システム管理」タブの「スケジューラ」をクリックします。
  3. 「新規」をクリックして、新しいスケジュール済ジョブを作成します。その後、ジョブ名をFlat Fileとして指定し、「タスク」フィールドで、参照から値をフラット・ファイル・コネクタ・ユーザー・リコンシリエーションとして選択します。ジョブの作成後、図6-15に示すようにジョブに値を指定します。スケジュール済タスクを追加して、図6-15に示すように、タイプにフラット・ファイル・コネクタ・ユーザー・リコンシリエーションを追加します。

    図6-15 拡張コンソールの「スケジュール済タスク」画面

    図6-15の説明が続きます
    「図6-15 拡張コンソールの「スケジュール済タスク」画面」の説明
  4. パラメータを次のように設定します。
    • 「ITリソース名」の値はFlat Fileとします。

    • リソース・オブジェクト名の値はFLATFILEとします。

    • 「オブジェクト・タイプ」の値は「ユーザー」とします。

  5. 「適用」をクリックします。
6.2.4.2 リコンシリエーション・プロファイルの作成

リコンシリエーション・プロファイルでは、リコンシリエーション時のオブジェクト属性の構造を定義します。リコンシリエーション・プロファイルには、リコンシリエーションをサポートしているすべての属性が含まれている必要があります。

リコンシリエーション・プロファイルを作成するには:

  1. Oracle Identity Manager Design Consoleにログインします。
  2. 「リソース管理」の下の「リソース・オブジェクト」をクリックします。
  3. 「Flat File」リソース・オブジェクトを開きます。
  4. 図6-16に示すように、オブジェクト・リコンシリエーション・タブをクリックします。

    図6-16 Design Consoleのオブジェクト・リコンシリエーション

    図6-16の説明が続きます
    「図6-16 Design Consoleのオブジェクト・リコンシリエーション」の説明
  5. 次のリコンシリエーション・フィールドを追加します。
    • Return Id [String]、必須

    • Name [String]、必須

    • Gender [String]

    • Age [String]

    • Gender [String]

    • ITリソース名 [IT Resource]、必須

  6. 構成を保存します。
6.2.4.3 リコンシリエーション・アクション・ルールの設定

リコンシリエーション・アクション・ルールでは、リコンシリエーションの動作を定義します。この手順では、一致が見つかった場合に行われるアクションを定義します。この手順では、Oracle Identity Manager Design Consoleにログインしていることを前提にしています。

  1. 「Flat File」リソース・オブジェクトを開きます。
  2. 「Object Reconciliation」タブをクリックします。
  3. 図6-17に示すように、右のフレームのリコンシリエーション・アクション・ルール・タブをクリックします。

    図6-17 Design Consoleのリコンシリエーション・アクション・ルール

    図6-17の説明が続きます
    「図6-17 Design Consoleのリコンシリエーション・アクション・ルール」の説明
  4. 1つのプロセス一致が見つかった場合(「ルール条件」)およびリンクの確立(「アクション」)として定義したアクション・ルールを追加します。
  5. 1つのエンティティ一致が見つかった場合(「ルール条件」)およびリンクの確立(「アクション」)として定義したアクション・ルールを追加します。
  6. 「Create Reconciliation Profile」をクリックします
  7. 「保存」をクリックします。
6.2.4.4 リコンシリエーション・マッピングの作成

リコンシリエーション・マッピングは、プロセス定義で実行する必要があります。これは、サポートされているリコンシリエーション・フィールドを(リソース・オブジェクトから)プロセス・フォーム・フィールドにマッピングすることです。このマッピングは、ターゲット・リコンシリエーションを構成する場合にのみ必要となります。

リコンシリエーション・マッピングを作成するには:

  1. Oracle Identity Manager Design Consoleにログインします。
  2. 「プロセス管理」の下の「プロセス定義」をクリックします。
  3. Flat Fileプロセス定義を開きます。
  4. 図6-18に示すように、リコンシリエーション・フィールド・マッピング・タブをクリックします。

    図6-18 Design Consoleのリコンシリエーション・フィールド・マッピング

    図6-18の説明が続きます
    「図6-18 Design Consoleのリコンシリエーション・フィールド・マッピング」の説明
  5. リコンシリエーション・プロファイル・フィールドとプロセス・フォーム・フィールドとの間のマッピングを追加します。
    • ReturnId[String] = UD_FLATFILE_RETURNID

    • Name[String] = UD_FLATFILE_NAME, <KEY>

    • Age[String] = UD_FLATFILE_AGE

    • Gender[String] = UD_FLATFILE_GENDER

    • Qualification[String] = UD_FLATFILE_QUALIFICATION

    • IT Resource Name[IT Resource] = UD_FLATFILE_ITRESOURCE,<KEY>

  6. 構成を保存します。
6.2.4.5 リコンシリエーション属性マップで使用されるフィールド・フラグ

リコンシリエーション属性マッピングの場合は、次のフィールド・フラグをコード・キーに追加できます。

  • TRUSTED: これは、アカウントのステータスを表すフィールドのリコンシリエーション属性マップで指定する必要があります。このフラグは、信頼できるリコンシリエーションにのみ指定する必要があります。これが指定されている場合、アカウントのステータスは「アクティブ」または「無効」のいずれかになります。それ以外の場合、ステータスは「有効」または「無効」のいずれかになります。たとえば、ラベルがStatusで、値が「アクティブ」または「無効」のいずれかである必要があるフィールドのコード・キーは、Status[TRUSTED]のようになります。

  • DATE: これは、リコンシリエーション属性マップにおいて、タイプがDateと見なされる必要があるフィールドに指定する必要があります。たとえば、ラベルがTodayで、値が日付形式で表示される必要があるフィールドのコード・キーは、Today[DATE]のようにする必要があります。

6.2.4.6 リコンシリエーション一致ルールの定義

リコンシリエーション一致ルールでは、ユーザー一致の計算用の式を定義します。

リコンシリエーション一致ルールを定義するには:

  1. Oracle Identity Manager Design Consoleにログインします。
  2. 「開発ツール」の下の「リコンシリエーション・ルール」フォームを開きます。
  3. 「ルールの追加」をクリックします。

    図6-19 リコンシリエーション一致ルールの追加

    図6-19の説明が続きます
    「図6-19 リコンシリエーション一致ルールの追加」の説明
  4. リソース・オブジェクトFlat Fileを選択します。
  5. リコンシリエーション・ルール要素が追加されてから、リコンシリエーション・ルールがアクティブになっているように「アクティブ」フラグを確認します。
  6. このルール要素を保存して追加します。

    ユーザー・プロファイル・データの「ユーザー・ログイン」は、「名前」リソース属性と同等です。

  7. ルールを保存します。

    ノート:

    リコンシリエーション・ルールに変更を行った場合は必ず、リコンシリエーション・プロファイルを再作成する必要があります。

6.3 フラット・ファイル・アカウントのプロビジョニング

フラット・ファイル・アカウントをプロビジョニングするには、ITリソース・パラメータおよびLookup.FlatFile.Configurationパラメータを使用して、タイプがFlat FileであるITリソースを作成します。

フラット・ファイル・コネクタの準備は整っています。そのため、ユーザーは、Oracle Identity Managerにログインし、次の手順を使用してITリソース(ターゲット)を作成する必要があります。

  • タイプがFlat FileであるITリソースを作成します。

  • 必要に応じて、ITリソース・パラメータを指定します。

  • 必要に応じて、Lookup.FlatFile.Configurationに構成パラメータを指定します。