Welcome to my Identity Management blog with focus on proven implementation stratigies, best practices, product selection, and where I open my expertse to You!
Fortune 100, Higher Education, Government... I've done it all. I'm 7 feet tall, live in NYC, tattooed, and love a challenge! Here's what I've learned...
So you want to setup Windows Native Authentication with your Oracle Access Manager 11g implementation. According to the documentation, it’s pretty straightforward and simple. And it is =)
The royal pain in the ass comes when something fails and you don’t know why. You’re going to receive 1 of 4 generic errors that when googled will give you all kinds of possible causes. I’m going to give you some more =)
Here’s the common error’s you may receive:
- kinit(v5): KDC has no support for encryption type while getting initial credentials
- kinit(v5): Key table entry not found while getting initial credentials
- kinit(v5): No such file or directory while getting initial credentials
- kinit(v5): Client not found in Kerberos database.
Instead of going into the rhetoric, I’m just going to bullet out the different issues I ran into and their fixes in order of the Oracle setup doc. Hopefully they’ll help someone else out down the road!
1. Your krb5.conf file can be a host of problems.
- First make sure that all the REALM parts are in CAPITAL LETTERS ALWAYS AND EVERYWHERE. Anytime you use the realm name (in the krb5 file, krpass commands, anywhere…) it must be in caps. This is not a host name. All the hostname parts that are in lowercase are actual hostnames (or suffixes) of the box your on.
- Encryption types between your nix box and the AD server can cause problems. If AD isn’t Windows 2008 R2 (yes… R2), you’re going to experience issues. Like until R2, any authentication will fail of the SPN has a “/” in it (which they all do for us here). To help with the encryption problems, put these two lines in your [libdefaults] section:
default_tkt_enctypes = arcfour-hmac-md5 des-cbc-crc des-cbc-md5
default_tgs_enctypes = arcfour-hmac-md5 des-cbc-crc des-cbc-md5
- The example in the Oracle guide is painful to understand if you have no clue what your doing. Also the default port for Kerberos authentication is 88. I just put it there explicitly because I rock like that. Here’s mine:
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = CORP.DOMAIN.COM
ticket_lifetime = 600
dns_lookup_realm = true
dns_lookup_kdc = true
default_tkt_enctypes = arcfour-hmac-md5 des-cbc-crc des-cbc-md5
default_tgs_enctypes = arcfour-hmac-md5 des-cbc-crc des-cbc-md5
[realms]
CORP.DOMAIN.COM = {
kdc = addc1.corp.domain.com:88
admin_server = addc1.corp.domain.com:88
default_domain = CORP.DOMAIN.COM
}
[domain_realm]
.corp.domain.com = CORP.DOMAIN.COM
corp.domain.com = CORP.DOMAIN.COM
2. Creating the Service Principal Name
- A simple one line command right? HA! N00Bs beware =). When you run this command on the AD server, the password you provide will SET the password for that account to whatever you put. So don’t guess if you’re modifying an existing service account!
- If your password has some crazy characters or spaces in it, you’ll need to wrap it in quotes
- If you receive the error “DsCrackNames returned 0×2 in the name entry for [username]. ktpass:failed getting target domain for specified user.” This just means you need to add the domain to the username like “DOMAIN\username”
- Here’s the command I run that works. notice the “HTTP/oamserver.corp.domain.com@CORP.DOMAIN.COM”. Yes. That’s how it should be, and yes the REALM needs to be in CAPITALS:
C:\>ktpass -princ HTTP/oamserver.corp.domain.com@CORP.DOMAIN.COM -pass “c0mpl3x P455w0rd!” -mapuser DOMAIN\username -out c:\temp\keytab.service
- Now that you have your keytab.service file you should be able to get the Kerberos ticket from the AD server with the kinit command. Here’s an example that flows with the rest of the config I’ve given so far:
kinit -V HTTP/oamserver.corp.domain.com@CORP.DOMAIN.COM -k -t keytab.service
- The REALM must be in CAPS here too
Here’s where you’re going to get the majority of your errors too. I’ll try to help here.
kinit(v5): KDC has no support for encryption type while getting initial credentials
- run “klist -ke keytab.service” to see what level of encryption is setup for your file
- verify that it’s one in the list in your krb5.conf file
- Make sure your AD administrator didn’t check “Use Kerberos DES encryption types for this account”. This will cause it to fail.
- If all else fails, regenerate your keytab.service file with the “-crypto All” flag at the end to get all encryption keys
kinit(v5): Key table entry not found while getting initial credentials
- Make sure your AD administrator didn’t check “Use Kerberos DES encryption types for this account”. This will cause it to fail.
- Verify that the HTTP/host@REALM is the same in the keytab.service file matches the FQND of the OAM server and the REALM is in caps and matches what’s in your krb5.conf file
kinit(v5): No such file or directory while getting initial credentials
- The path to your keytab.service file is wrong
kinit(v5): Client not found in Kerberos database.
- Make sure that there is only 1 account in AD that has the SPN of your HTTP/host@REALM. If there is more than one account set to the SPN authentication will fail. You can issue these two commands to verify:
c:\setspn -Q HTTP/oamserver.corp.domain.com
ldifde -f c:\upn_out.txt -d “DC=domain,DC=com” -l * -r “(userprincipalname=HTTP/oamserver.corp.domain.com@CORP.DOMAIN.COM)” -p subtree -s addc1.corp.domain.com
(if you don’t have the ldifde.exe file, google: ldifde.exe “index of”
- You can also verify things with:
kinit [username]
You’ll be prompted for the password. If it’s correct you’ll be dropped to the prompt. If wrong, you’ll receive an error. If that works, then try:
kinit HTTP/host@REALM
You’ll again be prompted for the password for the account it’s attached to. If successfull you’ll be dropped to the prompt. If wrong, you’ll receive an error.
If that works, and kinit with the keytab file fails it’s something in the keytab file or a setting on the AD server.
Lastly, let’s say you don’t like the auto-failover to Basic authentication when WNA fails. Well… there’s no way to change it. Sorry. As per Oracle support, “it’s supposed to work that way”. The actual auth scheme is packaged together when sent to the user. So when WNA fails to get the SPNEGO token, it doesn’t go back to the WebGate or OAM server for a secondary authN scheme or use the Login Failed Redirect URL. It just immediately prompts the user with the popup box.
That’s all I got, but I haven’t found these answers for OAM-WNA integration specifically in one place, so hopefully this’ll save some people some time =)
Cheers!
.: Adam
After much Face<-->Keyboard and an Oracle Support ticket, it’s official! In Oracle Access Manager 11g (11.1.1.5), The Authentication Failure URL Redirect doesn’t work.
Awesome.
You’re not doing anything wrong. You’re not crazy. That box above your Authentication policy that says “Failure URL” is just there to tease you of funcationality that used to work before someone borked it.
Cheers!
.: Adam
Playing around with OAM 11g, I ran into a pain-point (slight downs moment on my end) where I couldn’t get the default identity store to work for any of my webgates, no matter what I tried. Here is an overview of my example:
I setup an Identity Store called ID1 and it points to an Active Directory
I setup a second ID store called ID2 and it points to OID.
Initially, OAM works fine as ID1 is set as the default and test user from AD is able to login.
When I enter the OAM admin console and change the user identity default store to ID2, none of the users in OID are able to login, but users from AD are still authentication successfully.
The little green flag is on the OID identity store, but out authentication policy it’s not acutally using it.
After a couple masterful head > keyboard moves, it finally hit me “Default” store. Meaning there’s got to be a we to select one in particular if needed. Is it in the Oracle Access Manager 11g documentation? Maybe, but I couldn’t find it.
Next step, look into every option of every piece of OAM.
Result… I found it =)
- Click on the System Configuration tab
- Expand Authentication Modules
- Double-click the module being used by your Authentication Scheme
- Select the Identity Store of your liking in the drop-down and click Apply
And now the webgate will authenticate from the newly selected Identity Store instead of the default one!
.: Adam
Rajnish Bhatia has provided the community with an AWESOME resource. He’s listed out all the tables of OIM and what they correlate to. I have personally referenced this table a ton of times, and I know others have as well. I’m mirroring it here for data integrity.
Please go to his website (http://rajnishbhatia19.blogspot.com/2008/08/oim-tables-descriptions-9011.html) and check out his other articles.
Great stuff!
.: Adam
From Rajnish:
The following table lists the purpose of each table within OIM.
Note: Custom Tables are created for user defined Object / Process Forms.
| TABLE NAME IN OIM | DESCRIPTION OF TABLE |
| AAD | List To Define The Administrators For Each Organization And Their Delegated Admin Privileges |
| AAP | Table for storing Resource – Organization level parameter Values |
| ACP | ACP – Link Table That Holds Reference To ACT And PKG Tables, Table That Defines The Objects (Resources) Allowed For A Particular Organization |
| ACS | Link Table for Account Table(ACT) and Server Table(SVR) |
| ACT | Defines information about all organizations created through Xellerate |
| ADJ | Contains the Java API information for the constructor with parameters and method name with parameters chosen for an adapter task of type JAVA, UTILITY, TAME,REMOTE, or XLAPI. |
| ADL | Contains the all of the necessary parameters for an adapter task of type IF, ELSE IF,FOR, WHILE, SET, and VARIABLE tasks. These type of tasks are known as LOGICTASKS |
| ADM | Data mapping between parameters input/output parameters and source/sink |
| ADP | Defines an adapter created through the Adapter Factory |
| ADS | Database,schema and procedure name selections which define a stored procedure adaptertask |
| ADT | Defines a task attached to an adapter |
| ADU | Contains the web service and method chosen for a task of the Adapter Factory |
| ADV | Adapter variable table contains variables that have been created for specific adapters. |
| AFM | Links an adapter with a form |
| AGS | Holds the definition of organization/contact groups |
| AOA | Contains the OpenAdapter property file for OpenAdapter |
| APA | To store attestation process administrators |
| APD | To store attestation Process definition |
| APT | To store the attestation tasks |
| ARS | Contains custom response codes for ‘Process Task’ Adapters only |
| ATD | To store entitlement details for each attestation task |
| ATP | Defines input and output parameters for the constructor and method of an adapter taskof type JAVA, UTILITY, TAME, REMOTE, and XLAPI |
| ATR | To store attestation requests |
| ATS | Stores which services or can be ordered by which organizations and which rates apply |
| AUD | Define the Auditors |
| AUD_JMS | |
| CRT | Trusted Certificate Information |
| DAV | Stores the runtime data mappings for ‘Entity’ & ‘Rule Generator’ adapters. The data source being an Xellerate form or child table,or a user defined process form. |
| DEP | Dependencies among Tasks Within A Workflow Process |
| DOB | Data Resource definition consisting of the fully qualified class name of the dataobject |
| DVT | Defines the one to many relationship between Data Resources and Event Handlers (this includes adapters) |
| EIF | Export Import Files. Each row contains one single file used in export/import operation. For export there is only one file |
| EIH | Export Import History. Each row represents one Data Deployment Management session. |
| EIL | DB Based lock for export operation. Used to make sure only one user can import at atime. This is currently not managed through data objects |
| EIO | Export Import Objects. Each row represents one object exported/imported |
| EIS | Substitutions used during import process |
| EMD | Core –Email Definition Information Table That Holds The Email Template Definitions |
| ERR | Error codes |
| ESD | Encrypted columns not within the bounds of the SDK |
| EVT | Defines event handlers by providing a process and class name. In addition the scheduling time of when the event handler can execute is set to pre (insert, update, delete) or post (insert, update, delete) |
| FUG | List to define the administrators for each user defined object in the ‘StructureUtility’ form or for each user defined field in the ‘User Defined FieldDefinition’ form |
| GPG | List to define the (nested) group members of User Group in the ‘User Group’ form. |
| GPP | List to define the Administrators and their delegated admin rights over a User Group |
| GPY | Joins Properties (PTY) and Groups (UGP). |
| IEI | Table where all the imports and exports are defined |
| LAY | Table where the layouts are defined for the various imports and exports |
| LIT | Import/export table. |
| LKU | Lookup definition entries |
| LKV | Lookup values |
| LOB | Import/export table. |
| LOC | Holds information about locations |
| MAP | XML MapSchema Information |
| MAV | Stores the runtime data mappings for ‘Process Task’ adapters. The data source being a process form, Location, User, Organization, Process, IT Resource, orLiteral data. |
| MEV | E-mail notification events |
| MIL | Holds information about tasks of a process |
| MSG | Defines the user groups that have permission to set the status of a process task. |
| MST | Task Status And Object Status Information. Holds All The Task Status To Object Status Mappings |
| OBA | Object Authorizer Information |
| OBD | Object Dependencies |
| OBI | Object Instance Information |
| OBJ | Resource Object definition information. |
| ODF | Holds Object To Process Form Data Flow Mappings. |
| ODV | Object Events/Adapters Information |
| OIO | Object Instance Request Target Organization Information. |
| OIU | Object Instance Request Target User Information. |
| OOD | Object Instance Request Target Organization Dependency Information. |
| ORC | This Entity Holds The Detail On Each Order. This Could Be Considered The Items Section Of An Invoice. This Entity Is The Instance Of A Particular Process |
| ORD | Holds information that is necessary to complete an order regardless of a processbeing ordered |
| ORF | Resource Reconciliation Fields |
| ORR | Object Reconciliation Action Rules |
| OSH | Task Instance Assignment History |
| OSI | Holds information about tasks that are created for an order |
| OST | Object Status Information |
| OUD | Object Instance Request Target User Dependency Information. Holds The Dependency Between Different Resource Instances Provisioned To A User. |
| OUG | List to define the administrators for each Resource |
| PCQ | Holds the challenging questions and answers for a user |
| Package data flow table holds the data flow relationships between packages | |
| PHO | Holds all communication addresses for this contact — e.g., contact telephone numbers,fax numbers, e-mail, etc. |
| PKD | Package dependency table holds the dependency relationships between child packages of a parent package |
| PKG | Consists of names and system keys of service processes, which consist of a group ofservices from the TOS table. Defines a Process in Xellerate. |
| PKH | Package Hierarchy Table Holds The Parent-child Relationships Between Processes |
| POC | Stores values for the child tables of the Object/Process form of a resource being provisioned by an access policy |
| POF | Policy field table holds the field value pairs that constitute the definition of apolicy |
| POG | Join table between Policy and User Groups, Specifies the groups to whom an access policy will apply. |
| POL | Policy Table Holds A Policy, Defines An Access Policy In The System |
| POP | Policy Package Join Table Holds The Packages That A Particular Policy Orders For User, Defines Which Resources Will Be Provisioned Or Denied For A Particular Access Policy. |
| PRF | Process Reconciliation Field Mappings |
| PRO | Defines a process name, scheduling frequency, and priority. A process is made up of oneor more tasks |
| PTY | Client Properties Table |
| PUG | List to define The Administrators And Their Delegated Admin Rights For Each Process. |
| PWR | Table forPassword Rule Policies |
| PXD | Table that holds the list of all Proxies Defined |
| QUE | Administrative queues definition |
| QUM | Administrative queue members |
| RAV | Stores the runtime data mappings for ‘Pre-populate’ adapters. The data source being an Xellerate form or child table, or a user defined form |
| RCA | Reconciliation Event Organizations Matched |
| RCB | Reconciliation Event Invalid Data |
| RCD | Reconciliation Event Data |
| RCE | Reconciliation Events |
| RCH | Reconciliation Event Action History |
| RCM | Reconciliation Event Multi-Valued Attribute Data |
| RCP | Reconciliation Event Processes Matched |
| RCU | Reconciliation Event Users Matched |
| REP | Table that contains all information about reports in the system |
| REQ | This table holds request information |
| RES | This table is used to stored adapter resources entered by the user. |
| RGM | Table for Response Code Generated Milestones |
| RGP | Rules To Apply To A User Group, Defines The Auto-group Membership Rules Attached To AParticular Group. |
| RGS | Defines all known registries. These are used by Web Service tasks in an Adapter to communicate with a web service |
| RIO | Request Organizations Resolved Object Instances |
| RIU | Request Users Resolved Object Instances |
| RLO | This table contains directory URLs which are referenced by Adapter Factoryjar/class files. |
| RML | Rules To Apply To Task, Defines The Task Assignment Rules Attached To A Process Task. |
| ROP | Rules To Apply To An Object-process Pair, Defines The Process Determination Rules Attached To A Resource Object. |
| RPC | Reconciliation Event Process Child Table Matches |
| RPG | Link table between Group table and Report Table. Specifies which group has accessto which reports |
| RPP | Parameters passed to report. |
| RPT | Stores information related to the creation of reports |
| RPW | Rules To Apply To A Password Policy, Defines The Policy Determination Rules Attached To A Password Policy. |
| RQA | Request target organization information. |
| RQC | Request comment information |
| RQD | Contains self-registration request data for web admin. |
| RQE | Request administrative queues |
| RQH | Requeststatus history |
| RQO | Request object information. |
| RQU | Request object target user information |
| RQY | Request Organizations Requiring Resolution |
| RQZ | Request Users Requiring Resolution |
| RRE | Reconciliation User Matching Rule Elements |
| RRL | Reconciliation User Matching Rules |
| RRT | Reconciliation User Matching Rule Element Properties |
| RSC | Defines the All The Possible Response Code For A Process Task. |
| RUE | Defines the Elements In A Rule Definition. |
| RUG | List to define the administrators for each Request |
| RUL | Rule definitions |
| RVM | Holds Recovery Milestones |
| SCH | Holds specific information about an instance of a ask such as its status orscheduled dates |
| SDC | Column metadata. |
| SDH | Meta-Table Hierarchy. |
| SDK | User define data object meta data definition |
| SDL | SDK version labels |
| SDP | User defined column properties |
| SEL | Data Object Permissions For Groups On A Specified Data object |
| SIT | The SIT table contains information about sites. Sites are subsets of locations. |
| SPD | IT Resource parameter definition |
| SRE | Defines Which Pre-populate Rule Generator Will Run For A Field Of User Defined DataObject. |
| SRP | Should be replaced by the rate table from a billing system. Here it holdspecific rates for specific services. |
| SRS | IT Resource – IT Resource join |
| STA | Status Codes |
| SUG | |
| SVD | IT Resource type definition |
| SVP | IT Resource property definition |
| SVR | IT Resource instance definition |
| SVS | IT Resource – Site Join |
| TAP | Holds parameter values for a task, which is an instantiation of Valid Task,i.e. value for parameter Company Name, etc. |
| TAS | Holds instances of Valid Task. Examples of Valid Tasks would be reports, imports, etc. Valid TaskParameters indicate what parameters can be assassigned to an instance of a task, i.e |
| TDV | Used by event manager/data objects, joins data objects, types of service, and events |
| TLG | Keeps logof SQL transactions. |
| TMP | Indicates which tasks are in a process. Tasks are defined in table; this way, one task can be in many processes. |
| TOD | To do list settings table. |
| TOS | Holds information about a process |
| TSA | Stores initialization params (name/value pairs) forscheduler tasks |
| TSK | Scheduler task definition information |
| UDP | User-defined field table |
| UGP | Defines a group of users |
| UHD | User Policy Profile History Details table |
| ULN | This table hold UHD allow / deny list |
| UNM | “UnDoMilestone” Feature |
| UPA | |
| UPA_FIELDS | Stores changes only for user profile audit history in de-normalized format |
| UPA_GRP_MEMBERSHIP | Stores groups membership history in de-normalized format |
| UPA_RESOURCE | Stores user profile resource history in de-normalized format |
| UPA_USR | Stores user profile history in de-normalized format |
| UPD | User Policy Profile Details table |
| UPH | User Policy Profile History table |
| UPL | User-defined field table |
| UPP | User Policy Profile table |
| UPT | User-defined field table |
| UPY | Joins Properties (PTY) and User (USR) tables. |
| USG | This table stores which users are in which groups. |
| USR | Stores all information regarding a user. |
| UWP | Window sequence, nesting in CarrierBase explorer for each user group. |
| VTK | Defines automation task types such as reports, imports, and exports. |
| VTP | Valid Task Parameters. Indicates which parameters can be defined for an instance of a task. |
| WIN | Windows table: Windows keys, descriptions, and class names. |
| XSD | This table holds Xellerate System Data |
So let’s say that you’re working in an environment that happens to have Oracle Access Manager (OAM) installed twice. Yep, two instances. Why? Most likely because larger corporations and institutions tend to make decisions that have no real thought behind them. Anywho, a problem that will arise is that if you’re using a global cookie with the .domain.com as your suffix, they will conflict and overwrite eachother. This will cause a wonderful behavior of being SSO’d into one system and when you visit the other system it will overwrite the cookie and kill your other session for you. Why? Because OAM uses a cookie name of ObSSOCookie as the default name. By method of standard practice and IT reasoning, your impulse would be to rename one of the cookies so that there are two separate cookies and that they can be used independently. Weeellllll, surprise surprise, you can’t. Oracle Access Manager will NOT allow you to change the name of the cookie. The official response from Oracle on this is that, “it’s a security issue”. I’m calling B.S. and attributing this to the bad practice of hard-coded variables.
So, yeah. If for whatever reason, you want to change the name of the ObSSOCookie that Oracle Access Manager uses for it’s single sign on purposes, you can’t.
On behalf of Oracle / Oblix… sorry =)
.: Adam
Part 10 – Starting Oracle Database and Directories
This video tutorial will walk you though differnt ways to startup and stop various database and directory services.
FIN
The original source videos are available for download via Vimeo.com You’ll have to sign in to download them though. To get there, click on the “Vimeo” logo in the video.
If you have any questions, please post them below. I’m pretty tied up at the moment, but others will be able to help too!
Thanks!
.: Adam
Part 9 – WebLogic Server and Domain Start-up Options
This video tutorial will walk you though ways to startup and stop the WebLogic Server and WebLogic domains.
Next >> Part 10 – Starting Oracle Database and Directories
The original source videos are available for download via Vimeo.com You’ll have to sign in to download them though. To get there, click on the “Vimeo” logo in the video.
If you have any questions, please post them below. I’m pretty tied up at the moment, but others will be able to help too!
Thanks!
.: Adam
Part 8 – Configuration of Oracle Identity Manager 11g
This video tutorial will walk you though the configuration of Oracle Identity and Access Manager 11g. These tools include:
Next >> Part 9 – WebLogic Server and Domain Start-up Options
The original source videos are available for download via Vimeo.com You’ll have to sign in to download them though. To get there, click on the “Vimeo” logo in the video.
If you have any questions, please post them below. I’m pretty tied up at the moment, but others will be able to help too!
Thanks!
.: Adam
Part 7 – Installing Oracle Identity and Access Manager 11g
This video tutorial will walk you though the installation of Oracle Identity and Access Manager 11g. These tools include:
You will need to download the 1.7GB Oracle Identity and Access Management (11.1.1.3.0) Generic Installer (ofm_iam_generic_11.1.1.3.0_disk1_1of1.zip).
Download Oracle Identity and Access Management
Next >> Part 8 – Configuration of Oracle Identity Manager 11g
The original source videos are available for download via Vimeo.com You’ll have to sign in to download them though. To get there, click on the “Vimeo” logo in the video.
If you have any questions, please post them below. I’m pretty tied up at the moment, but others will be able to help too!
Thanks!
.: Adam
Part 6 – Installing and Patching the SOA Suite 11g
This video tutorial will walk you though the installation and patching Oracle’s SOA Suite 11g.
You will need to download two files, the 1.7GB SOA Suite (11.1.1.2) Generic Installer (ofm_soa_generic_11.1.1.2.0_disk1_1of1.zip), and the 1.9GB SOA Suite (11.1.1.3) Generic Installer with Business Process Management (11.1.1.3.0) for the patchset.
Download Oracle SOA Suite 11g and Patchset Here
Next >> Part 7 – Installing Oracle Identity and Access Manager 11g
The original source videos are available for download via Vimeo.com You’ll have to sign in to download them though. To get there, click on the “Vimeo” logo in the video.
If you have any questions, please post them below. I’m pretty tied up at the moment, but others will be able to help too!
Thanks!
.: Adam