Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The Tsecurity system provides authentication and authorization services to custom applications running on the Windows platform. It extends the native authentication services provided by Windows to allow these custom applications to authenticate users defined either on the local machine or in the Active Directory (AD). In addition, it manages lists of users to be provided privileges to these applications and exposes methods for access to these lists.

...

Expand
titleUser Authentication Flow Chart

Following is a flow chart of the sequence of events during authentication:

Further information about the various timeout periods described in the above flow chart can be found in the Tsecurity Service Configuration [LINK]section of this manual.

Expand
titleTsecurity Applications

Simply put, a Tsecurity Application is merely the definition of the associations between various domain members and the special subset of privileges that they are given. The term application in this sense does not necessarily refer to a single executable program; although it may be the case that the Tsecurity Application only governs a single executable program, it is better to think of a Tsecurity Application more generally as a set of rules used by a piece of software to control access to itself.

As an example, consider a group of custom-built screens for a rolling mill control system.  The system owner would want his mill operators to be able to control the schedule through the Preset screen.  Maintenance personnel would also be able to adjust the schedule, but should additionally be able to run various tests from the Diagnostics screen.  And above all, engineers should be given rights to both the Preset and Diagnostic screens, as well as being able to adjust any system tuning parameters from the Tuning screen.

 

Following are definitions of some key terms used within a Tsecurity Application:

  • A privilege is a single right that can be given to an application user.

  • A domain member is refers to either a user defined on a domain or a group of users defined on a domain.  A domain can be either the local domain or an Active Directory.  The names of domain members are specified in a domain\username format.

  • An application privilege class, or more simply a privilege class, is the combination of a group of privileges with a group of domain members.  Each of the domain members contained in a privilege class are given each of the privileges associated with that privilege class.  A privilege class exists only within the definition of a Tsecurity Application.

 

Continuing the rolling mill example from above:

In order to manage security for the rolling mill applications, the system owner would define a Tsecurity Application named RollingMillScreens.  Within this application there would be three privilege classes defined: Operators, Maintenance, and Engineers.  In addition, there would be three privileges defined: ModifyPreset, RunDiagnostics, and TuneSystem.  Privileges would be assigned to application privilege classes as follows:

Application Privilege Class

Privileges Granted to Application Privilege Class

Operators

ModifyPreset

Maintenance

ModifyPreset, RunDiagnostics

Engineers

ModifyPreset, RunDiagnostics, TuneSystem

Once the privilege classes and associated privileges have been defined, the system owner would need to add domain members to each of the appropriate privilege classes.  For instance, Joe the Operator would be added to the list of members of the Operators group, Jane the Maintenance Tech would be added to the list of members of the Maintenance group, and Bob the Engineer would be added to the list of members of the Engineers group. 

Alternatively, if there is an Active Directory group already defined that contains of all engineers for the rolling mill, this AD group could be added to the Engineers application privilege class in the RollingMillScreens Tsecurity application and any domain user contained in that group in the Active Directory would be given all three of the above rights specified for the Engineers application privilege class.

 

This complete set of information, including the privileges, application privilege classes, domain members, and each of their interrelationships, comprises a Tsecurity Application. The definition for each Tsecurity Application is stored on the host in a separate XML file called an Application Security Configuration File (ASCF).  These are described in detail in Application Security Configuration Files [LINK].

Expand
titleSecuring Software

It is important to point out that under the Tsecurity framework the Tsecurity system itself is not responsible for preventing unwanted access to resources; rather it is a tool that allows other custom software to quickly, easily, and reliably determine if a given user should be provided access to some resource within that custom software.  Given that a Tsecurity Application is merely a definition of user access rules within a set of software, it is important to realize that the software itself is ultimately responsible for managing its own the security.

Generally speaking, a custom Tsecurity client would use Tsecurity in the following fashion:

  1. The custom client queries the user for his username, domain, and password.

  2. The client makes a call into the Tsecurity system to authenticate this username, domain, and password.

  3. The Tsecurity system responds, indicating whether or not the password is correct.

  4. If the password is not correct, the client denies the user access and requires a valid login.  If the password is correct, the client then makes a second call to the Tsecurity system to retrieve the list of privileges provided to this user within a given Tsecurity Application.  This Tsecurity Application must already be defined on the Tsecurity system.

  5. The Tsecurity system then responds with either the appropriate list of privileges or an indication that the supplied user does not have any rights to the Tsecurity Application.

  6. The client then uses the returned list of user privileges to modify its behavior accordingly.  For instance, it may enable or disable various displays and inputs depending on whether or not the user has rights to those resources.

...

Expand
titleOverview

The Tsecurity system comes in two different installation packages.  First, Tsecurity is included as an integrated piece of a full TSENTRY installation.  Alternatively, Tsecurity can be installed as a standalone package.  However, both the standalone version of Tsecurity and the integrated version installed with TSENTRY cannot both be installed on the same system at the same time.  If a host must be converted from a TSENTRY system to a plain Tsecurity host, or vice versa, the original software should first be uninstalled before installing the new version.  In either case, the latest installation files can be obtained from the support section of the TSENTRY web site: http://www.tsentry.com.

Once Tsecurity has been installed (either as part of a TSENTRY installation or as a standalone package) there are two additional steps that must be completed before the system will be fully operational:

  1. Use the TsecurityCfg [LINK] application to setup and configure the Tsecurity service.

  2. Use the ASCFEditor [LINK] to create and configure a Tsecurity application.

...

Expand
titleTsecurity Service

The installation process registers the Tsecurity service on the local host.  This service is configured to automatically start with Windows and executes under the Tsentry account, which is a local account on the Tsecurity host also created by the installation process.

This service is described in more detail in the Tsecurity Service [LINK] section.

Expand
titleRegistry Changes

The following registry changes are made by the installation process:

Registry Key

Type

Description

HKLM\SOFTWARE\

TelePro\Tsecurity\

Directory

REG_SZ

Defines installation path of Tsecurity system.

HKLM\SOFTWARE\

TelePro\Tsecurity\

Version

REG_SZ

Defines latest installed version of Tsecurity system.

HKLM\SOFTWARE\

TelePro\Tsecurity\

InstallPackage

REG_SZ

Defines type of installation.  Possible values are "Tsentry" (indicating an installation as a part of Tsentry) or "Tsecurity" (indicating a standalone Tsecurity installation).

...

Expand
titleConfiguration

The Tsecurity service is fully configurable via a configuration file named Tsecurity.exe.config located in the same directory as the Tsecurity service binary executable.  This is an XML file consistent with the application config file format specified by Microsoft .NET applications.

For detailed information about the configuration of the Tsecurity service, refer to the TsecurityCfg [LINK] section of this manual.

Expand
titleSample Tsecurity.exe.config File

Following is a sample Tsecurity.config file:

Code Block
<?xml version="1.0" encoding="Windows-1252"?>
<!-- Configuration file for Tsecurity Service -->
<configuration>
  
  <configSections>
    <!-- Do not edit this section -->
    <section name="TsecuritySettings"
     type="TPRI.Tsecurity.TsecuritySettingsSectionHandler,TPRI.Tsecurity" />
    <section name="TsecurityDomains"
     type="TPRI.Tsecurity.TsecurityDomainsSectionHandler,TPRI.Tsecurity" />
  </configSections>
    
  <appSettings>
  </appSettings>

  <TsecuritySettings>

    <!-- ASCF folder path -->
    <add key="ASCFFolder" value="D:\tpriNtRt\Tsecurity\ASCF" />

    <!-- Port number for TCP listener -->
    <add key="PortNumber" value="8080" />

    <!-- Debug level for Event logging -->
    <add key="DebugLevel" value="30" />

    <!-- Maximum time (in milliseconds) to wait before timing out
         authentication requests -->
    <add key="AuthenticationTimeout" value="20000" />

    <!-- Amount of time (in milliseconds) to delay before deferring
         authentication requests to the info stored in the user cache -->
    <add key="UserCacheDelayPeriod" value="0" />

    <!-- Amount of time (in minutes) after user info in the
         cache file has been verified before it should be
         verified again -->
    <add key="UserCacheVerifiedPeriod" value="10" />

    <!-- Expire time (in minutes) for user info in the cache file -->
    <add key="UserCacheExpiredPeriod" value="1440" />

    <!-- Wait time (in milliseconds) to allow executing directory 
         operations to finish before timing out pending operations -->
    <add key="DirectoryMutexTimeout" value="30000" />

    <!-- Browse user ID and password for specified domains -->
    <browseUser Domain="MYDOMAIN1" UserID="MYDOMAIN1\MyUser1"
     Password="44913F40A6806B9719B52B670731704685056EE4B60B8598" />

  </TsecuritySettings>
   
  <TsecurityDomains>
    <!-- If enabled, always include any domains listed in the -->
    <!-- 'AlwaysInclude' section below in the list of domains -->
    <!-- presented to the user.  The first domain marked with -->
    <!-- 'default=true', if any, will be the one initially    -->
    <!-- selected for the user.                               -->
    <AlwaysInclude enable="True">
      <domain name="DOMAIN1" default="True" />
      <domain name="DOMAIN2" />
    </AlwaysInclude>

    <!-- If enabled, filter the list of available domains so that    -->
    <!-- it includes only those listed in the 'FilterAvailable'      -->
    <!-- section (in addition to the 'AlwaysInclude' domains above). -->
    <!-- The first domain marked with 'default=true', if any, AND    -->
    <!-- found in the list of available domains, will be the one     -->
    <!-- initially selected for the user (assuming no domain in the  -->
    <!-- 'AlwaysInclude' list is also marked as the default).        -->
    <FilterAvailable enable="False">
      <domain name="DOMAIN2" default="True" />
      <domain name="DOMAIN5" />
    </FilterAvailable>
  </TsecurityDomains>

</configuration>

...

Expand
titleBrowse Users

The Browse Users page is used to specify credentials that can be used to browse the active directory structure.  These users are only required in certain situations as described below.

The Under normal circumstances, when a client wishes to retrieve the SAK for a given user from a Tsecurity host the client must provide the user’s password.  This password is required if all of the following circumstances are true:

  • Domain user groups are listed as members of one or more of the application privilege classes for the Tsecurity Applications.

  • The user is either not explicitly listed in the Tsecurity application configuration or the user is defined with the ExplicitMembershipOnly parameter set to false. 

  • The user is not a local user defined on the Tsecurity host system.

In this situation the Tsecurity host must query the Active Directory to retrieve the list of groups in which the user is either explicitly or implicitly (via nested groups) a member.  In order to gain access to the Active Directory the Tsecurity host must have a valid set of credentials.  Hence, the Tsecurity host uses the credentials of the user himself to gain access.

However, there are cases where the client wishes to retrieve the SAK for a user for whom it does not have the password.  In this case the client passes an invalid reference (NULL in C/C++ or Nothing in VB.NET) for the password.  Still, though, the Tsecurity host must have a valid set of credentials to use while querying the Active Directory.  Consequently, the Tsecurity host must be provided a set of credentials for a browse user in each of the domains in which the host must locate users without a password passed from the client.  Only one browse user can be specified for each domain, though a single browse user can be specified for multiple domains.  The browse user need not actually be a member of the domain, though he must have browse rights to that domain.

The browse user credentials are stored in the <TsecuritySettings> section of the Tsecurity.exe.config file.  Passwords are encrypted so that they are not stored in plain text.

Expand
titleTsecurity Administrators

The Tsecurity Administrators page is used to define the list of Tsecurity Administrators for the Tsecurity host.

As described in the Managing Security Applications [LINK] section, a Tsecurity Administrator has full control of the Tsecurity system.  Only a Tsecurity Administrator has the ability to create and destroy Tsecurity Applications and is responsible for specifying the owners of individual Tsecurity Applications.

The name of each Tsecurity Administrator is listed as an owner of the special Tsecurity Tsecurity Application, which is stored in the Tsecurity.xml file in the ASCF folder specified on the System Parameters page.

...

Expand
titleCreating an Example Tsecurity Application

The following sequence demonstrates the creation of a simple new Tsecurity Application from scratch.  In this example it is assumed that two users, MyOwner and MyUser, exist in the domain MyDomain, and that MyUser is a member of the MyDomain group MyGroup.  To replicate this example on your system, please replace MyOwner, MyUser, MyDomain, and MyGroup with appropriate values for your system configuration.

The example Tsecurity Application created below is owned by the domain user MyDomain\MyOwner.  It consists of two application privilege classes, Operators and Maintenance.  It specifies a domain user MyDomain\MyUser as a member of the Operators application privilege class and a domain group MyDomain\MyGroup as a member of the Maintenance application privilege class.

This example further demonstrates how Security Access Keys are calculated under various configuration scenarios, including explicit and implicit privilege class membership.

  1. Start the ASCFEditor, connect to a Tsecurity host, and log in as the Tsecurity Administrator.

  2. Create a new Tsecurity Application as follows:

    1. In the ASCF Editor Screen, right click and choose the New Application menu item.

    2. Single-left-click on the newly created application, wait for the application name to become editable, and modify it to read ExampleASCF.

  3. Configure the domain user MyDomain\MyOwner as an owner for the new Tsecurity Application as follows:

    1. Right click on the Application Owners label and choose the Add Owner menu item.  This will display the Find and Select User or Group form.

      1. Select MyDomain as the search domain from the dropdown box, enter appropriate credentials for browsing that domain (e.g. the user MyDomain\MyOwner and his password), and click the Find Now button.

      2. Once the results have been displayed, find and double click on the MyOwner user account.

    2. The selected user account MyDomain\MyOwner should now be added to the list of Application Owners for this Tsecurity Application.  At this point, you may either save the application and log back in as this user (since he will then have write access to this Tsecurity Application as one of the registered owners) or continue to act as the Tsecurity Administrator.

  4. Create a new privilege for this Tsecurity Application as follows:

    1. Right click on the Application Privilege Bits and choose the Edit Privileges menu item.  This will display the Configure Application Privileges dialog.

    2. Single-left-click in the first row in the Configure Application Privileges dialog directly below the Name header, wait for the value to become editable, and modify it to read OperPriv.

  5. Create a new application privilege class for this Tsecurity Application as follows:

    1. Right click on the Application Privilege Classes and choose the New Privilege Class menu item.  This will add a privilege class to the list.

    2. Single-left-click on the new application privilege class name, wait for the privilege class name to become editable, and modify it to read Operators.

  6. Associate the OperPriv privilege with the Operators application privilege class as follows:

    1. Expand both the Application Privilege Bits and the Application Privilege Classes nodes.

    2. Single-left-click-and-hold on the OperPriv privilege, drag it down over the Operators privilege class, then release the left mouse button.

  7. Add the MyDomain\MyUser domain member to this Tsecurity Application as follows:

    1. Right click on the Domain Members label and choose the Add Domain Member menu item.  This will display the Find and Select User or Group form.

      1. In the Credentials for Directory Access groupbox enter appropriate credentials for browsing the MyDomain domain.

      2. In the Search for Users and Groups groupbox, select MyDomain in the Domain dropdown box.

      3. Click the Find Now button.

      4. Once the results have been displayed, find the MyUser user account and make sure that the icon displayed with indicates that it is an individual user account and not a user group.

      5. Double click on the MyUser user account to accept it as the selection.

    2. The MyDomain\MyUser user account should now be added to the list of Domain Members for this Tsecurity Application.  In addition, the Object Type should be listed as User, indicating that this object is an individual user account and not a user group.

  8. Get the new user’s SAK as follows:

    1. Right click on the user name under the Domain Members label and choose the Get Security Access Key menu item.

    2. The ASCFEditor will prompt you to save the current application; click Yes to save.

    3. A message box should be displayed to indicate that the SAK for the MyDomain\MyUser user is 0x0 and that he is not granted any named privileges.  This is appropriate as MyDomain\MyUser has not been added to any application privilege classes and thus he has not yet been given any privileges.

  9. Add the new member to the Operators application privilege class as follows:

    1. Left-click-and-hold on the MyDomain\MyUser name, drag him up over the Operators application privilege class, and release the mouse button.

    2. Click Yes when prompted to verify that the user should be added to the application privilege class.

    3. The MyDomain\MyUser user should now be listed under the Domain Members for the Operators application privilege class, and the Operators privilege class should be listed under the Application Privilege Class Memberships for the user.

10. 
  1. Get the MyDomain\MyUser user’s SAK again as follows:

    1. Right click on the

    1. MyDomain\MyUser user name under the Domain Members label and choose the Get Security Access Key menu item.

    2. The ASCFEditor should prompt you to save the current application; click Yes to confirm and save.

    3. A message box should be displayed to indicate that the SAK for the

    1. MyDomain\MyUser user is 0x1 and that he is granted the OperPriv privilege.  This is appropriate as MyDomain\MyUser is now a member of the Operators application privilege class and thus he has privileges specified for that privilege class.

11. 
  1. Create a new privilege as follows:

    1. Create a new privilege like

    1. OperPriv above, but name it MaintPriv and place it in the second row in order to associate it with bit 1 in the security access key.

12. 
  1. Create a new application privilege class as follows:

    1. Create a new application privilege class like

    1. Operators above, but instead name it Maintenance and add only the new MaintPriv privilege.

13. 
  1. Add the domain user group MyDomain\MyGroup to this Tsecurity Application as a domain member as follows:

    1. Add a new domain member to the application like

    1. MyDomain\MyUser above but select the MyGroup group from the search results.

    2. The

    1. MyDomain\MyGroup user group should now be added to the list of Domain Members for this Tsecurity Application.  In addition, the Object Type should be listed as Group, indicating that this object is a user group and not an individual user account.

14. 
  1. Add the MyDomain\MyGroup user group to the Maintenance application privilege class by dragging and dropping MyDomain\MyGroup over the Maintenance application privilege class just as the MyDomain\MyUser user was added to the Operators application privilege class above.

15. 
  1. Get the MyDomain\MyUser user’s SAK as before.

    1. A message box should be displayed to indicate that the SAK for

    1. MyDomain\MyUser is 0x1.  Since the Use Explicit Membership Only flag for MyDomain\MyUser is set to True, MyDomain\MyUser’s application privilege class membership is limited to what is explicitly specified in the Tsecurity Application configuration.  Hence MyDomain\MyUser is only considered a member of the Operators application privilege class, and the SAK consists only of the SAK specified for that application privilege class.

16. 
  1. Modify the MyDomain\MyUser user settings so that the Use Explicit Membership Only flag is set to False.

17. 
  1. Again, retrieve the MyDomain\MyUser user’s SAK as before.

    1. This time, the

    1. Authenticate User form should be presented asking for MyDomain\MyUser’s password.  This is required so that the Tsecurity host can use MyDomain\MyUser’s credentials to query for his group membership in the Active Directory.  Enter MyDomain\MyUser’s password and click the OK button.

    2. A message box should be displayed indicating that the SAK for

    1. MyDomain\MyUser is 0x3 and that he is granted both the OperPriv and the MaintPriv privileges.  This is appropriate as MyDomain\MyUser still is explicitly listed as a member of the Operators privilege class (with an SAK of 0x1) and is also an implicit member of the Maintenance privilege class (with an SAK of 0x2) through his membership in the MyDomain\MyUser domain group.  Hence the bitwise-OR of the two keys produces the composite SAK 0x3.

Tsecurity Clients

Expand
titleOverview

This section describes how to create a client that interacts with a Tsecurity host system.

Expand

A client application interacts with a Tsecurity host system through an instance of the TPRI.Tsecurity.Client class. This class manages the connection back to the Tsecurity host and exposes several methods for retrieving data from the Tsecurity host.  

 

The required components for creating a Tsecurity client application are described below.  Complete information for the TPRI.Tsecurity.Client class is available in the TPRI.Tsecurity.Client API section.

 

First, an application must create an instance of the client class:

Code Block
' Declare a function return status variable for calls made below
Dim fstatus as integer

' Create an instance of the Tsecurity Client object
Dim tsClient as TPRI.Tsecurity.Client = New TPRI.Tsecurity.Client

Next, the application must initialize the connection to the Tsecurity host:

Code Block
' Define the host and desired Tsecurity application name
Dim hostName As String = "myTsecurityHost"
Dim portNumber As Integer = 8080

' Initialize the client connection to the host
fstatus = tsClient.Initialize(hostName, portNumber)

The Initialize(..) function should return either ErrNone (= 0) 
to indicate that the object was successfully initialized or return a negative number to indicate a failure.

Once the application has initialized and connected to the host, it can then authenticate a user:

Code Block
' Define the user credentials
Dim username As String = "myUser"
Dim password As Integer = "myPassword"
Dim domain As String = "myDomain"

' Authenticate the user
fstatus = tsClient.AuthenticateUser(username, password, domain)

The AuthenticateUser(..) function should either return ErrNone (= 0) 
to indicate that the user was successfully authenticated or some negative value to indicate an error.

Finally, the application can retrieve the SAK for the given user:

' Define the desired Tsecurity application name
Dim appName As String = "myASCF"

' Retrive the SAK and privileges for the user
Dim privileges as StringCollection = Nothing
Dim sak as Long = 0
fstatus = tsClient.GetPrivileges(username, password, domain, appName, _
                                 sak, privileges)

The GetPrivileges(..) function should either return ErrNone (= 0) to indicate that the user was successfully authenticated or some negative value to indicate an error.
In each of the Initialize(..),  AuthenticateUser(..), and GetPrivileges(..) functions a negative return value indicates an error.  
These values are defined as public constants in the TPRI.Tsecurity.ErrorCodes module.
Expand
titleExample Clients

Two example clients are provided along with the Tsecurity system. The code for these clients is installed only if the Examples option is selected under the Custom installation selections during software installation.

The two example clients consist of:

  • A sample VB.NET Forms project that allows a user to interact with the Tsecurity host through the supplied form.

  • A sample ASP.NET project that allows a user to interact with the Tsecurity host through a sample web page.