# Patent

## Title
Single sign-on for disparate servers

## Abstract

A system includes authentication of a user with a first server, reception of a request from the user to authenticate the user with a second server, requesting, from the first server, in response to receiving the request, user credentials to access the second server, reception of the user credentials from the first server, and transmission of the user credentials to the second server.

## Background
CROSS REFERENCE TO RELATED APPLICATION
This is a continuation of co-pending prior U.S. patent application Ser. No. 13/470,602, filed May 14, 2012, the entire contents of which are incorporated herein.


BACKGROUND
Computing infrastructures may provide client devices with access to several different server systems, each of which requires a separate user authentication.



BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 is a block diagram of a computing architecture according to some embodiments.
FIG. 2 is a flow diagram according to some embodiments.
FIG. 3 is a block diagram illustrating operation according to some embodiments.
FIG. 4 illustrates user credentials according to some embodiments.
FIG. 5 is a block diagram illustrating according to some embodiments.
FIG. 6 is a diagram illustrating message verification according to some embodiments.
FIG. 7 is a block diagram of a hardware system according to some embodiments.



DETAILED DESCRIPTION
The following description is provided to enable any person in the art to make and use the described embodiments. Various modifications, however, will remain readily apparent to those in the art.
FIG. 1 is a block diagram of computing architecture 100. Architecture 100 includes client computing system 110, server 120 and server 130. Any of the depicted elements of architecture 100 may be implemented by one or more hardware devices coupled via any number of public and/or private networks. Two or more of such devices may be located remote from one another all devices may communicate with one another via any known manner of network(s) and/or via a dedicated connection. Generally, physical implementations of computing architecture 100 are not limited by the FIG. 1 depictions.
Client system 110 may comprise a desktop computer, a laptop computer, a netbook computer, a tablet computer, a smartphone, and/or any other computing system that is or becomes known. Each of servers 120 and 130 provide functionality to one or more clients. According to some embodiments, each of servers 120 and 130 requires client system 110 to authenticate therewith before services are provided thereto.
Authentication may comprise any protocol for establishing a user's authorization to access a service. According to some embodiments, server 120 provides a user directory service (e.g., Active Directory) to provide client system 110 with access to a computing domain. Authentication in such an example may comprise transmitting a username and password from computing system 110 to server 120, and verifying the username and password at server 120.
Server 130 may also provide any service for which authentication is required. According to some embodiments, server 130 provides software versioning. Architecture 100 may therefore represent a portion of a network within a software development entity, with server 120 providing access to the entity's computer network and server 130 providing versioning functionality to software developers within the company.
FIG. 2 is a flow diagram of process 200 according to some embodiments. Process 200 and each other process described herein may be embodied in processor-executable program code read from one or more non-transitory computer-readable media, such as a floppy disk, a CD-ROM, a DVD-ROM, a Flash drive, a fixed disk and a magnetic tape, and then stored in a compressed, uncompiled and/or encrypted format. Accordingly, a processor of any suitable device or devices (e.g., client system 110) may execute the program code to cause the device or devices to operate as described. In some embodiments, hard-wired circuitry may be used in place of, or in combination with, program code for implementation of processes according to some embodiments. Embodiments are therefore not limited to any specific combination of hardware and software.
Initially, a user is authenticated with a first server at S205. The first server may provide any service for which user authentication is required. The authentication at S205 may proceed according to any authentication protocol that is or becomes known. According to some embodiments, the user operates a computing device to transmit a username and password to the first server at S205. In a particular example, the computing device is a Win32 executable device, the first server is an Active Directory server, and the authentication is based on username/password.
Next, at S210, a request is received to authenticate the user with a second server. The second server may provide any type of service to client devices, such as software versioning. The request received at S210 may comprise a command entered into the client device by the user to login to the second server.
It is then determined at S215 whether the client device includes program code for requesting user credentials for the second server from the first server. According to some embodiments, S215 comprises determining whether an environment variable has been set on the client device to point to a script for requesting the user credentials from the first server. If no such program code is available, the user id prompted at S220 to authenticate with the second server via username/password, or by whatever authentication protocol is required by the second server. A session ticket or an error message is then received from the second server at S235 depending on whether the authentication is successful.
FIG. 3 is a diagram illustrating operation of process 200 according to some embodiments. Each block of FIG. 3 may be implemented by any combination of hardware and/or processor-executable software.
As shown, client 310 includes environmental variable “S2LOGINSSO” which points to executable script 312. Accordingly, the determination at S215 is positive, and the script is executed at S225 to request, from server 320, user credentials to access second server 330.
According to the illustrated embodiment, authentication to server 330 corresponds to the Kerberos authentication protocol. Accordingly, a Kerberos Ticket Granting Ticket is already located in local security authority 314. Moreover, Service Principal (SPN) has been created within server 320 and associated with the username “S2AuthProt2” and a static password.
Executable 312 uses the Ticket Granting Ticket to request the user credentials from server 320. Since the user has already been authenticated to server 320, no authentication to server 320 is needed. In response, server 320 initializes a session and creates appropriate user credentials. According to some embodiments, the user credentials include a ticket for requesting the service of server 330 within a Kerberos Application Request structure. The ticket is encrypted with the SPN password and contains an authenticator node identifying the user. The authenticator node is encrypted with a session key issued by server 320, which may be valid for a limited period of time. FIG. 4 illustrates an example of a decrypted Application Request according to some embodiments.
The client device receives the user credentials from the first server and transmits the user credentials to the second server at S230. According to some embodiments, the user credentials comprise a string with a max length of 128K. The string may be encoded as a Base64 string.
Win32 Kerberos libraries do not support channel bindings. Accordingly, in some embodiments, the target server port is attached to the encrypted Application Request received from the first server and is encrypted with the session key. The output from the executable may therefore consist of a Base64-encoded Application Request, a predefined delimiter (e.g., ‘@’), and an additional Base64-encoded string identifying the target server port. If the client device runs Linux, the target port information is included as Channel Binding in the encrypted Application Request.
After transmission of the user credentials, a session ticket or an error message is received from the second server at S235 depending on whether the user credentials are verified thereby.
FIG. 5 is a flow diagram of a process executed upon receipt of user credentials from a client device. Accordingly, process 500 may be executed by server 330 between S230 and S235 of process 200.
In this regard, user credentials are received from a client at S505. The user credentials may comprise an Application Request as described above. Server 330 includes a facility to dispatch handling of received user credentials, such as an Application Request, to an executable trigger. Accordingly, the user credentials are dispatched to trigger 332 at S510. The message including the user credentials may also specify the identity of the user transmitting the request and a receiving port of server 330 (i.e., channel binding).
The user credentials are decrypted at S515 using keytab file 334 stored on server 330. Keytab file 334 includes the SPN password, which may be encrypted with various cryptography methods (e.g., rc4-hmac). A sample keytab file is shown below:
[1] principal: S2AuthProt2@SAP.CORP
key: [type: 3, value: 0x73a23b . . . 087f1f]
principal: S2AuthProt2@SAP.CORP
key: [type: 1, value: 0x73a23b . . . 087f1f]
principal: S2AuthProt2@SAP.CORP
key: [type: 23, value: 0x99687 . . . 05c168]
principal: S2AuthProt2@SAP.CORP
key: [type: 16, value: 0xe0134 . . . 762fdc]
principal: S2AuthProt2@SAP.CORP
key: [type: 17, value: 0x64d98 . . . a03b46]
Once the user credentials (e.g., the ticket) are decrypted using the keytab file, the authenticator node therein may be decrypted based on the session key within the ticket.
Validity of the user credentials is determined at S520. The determination at S520 may include determining whether the decryption at S515 was successful, confirming that the user specified in the authenticator node is the same user from which the credentials were received, evaluating a time stamp of the credentials (e.g., were credentials created within previous five minutes), evaluating a checksum, evaluating a format of the user credentials, etc. If the user credentials are determined to be invalid, no session ticket is created and an error message is transmitted to the client at S525.
If the credentials are determined to be valid, flow proceeds to S530 to determine whether the request is a duplicate and is received at the correct port of the second server. In some embodiments, the second server may be a cluster including several server nodes, each of which runs on its own workstation and operating system. In such embodiments, the correct “port” is a particular server node of the cluster.
FIG. 6 illustrates the determination at S530 according to some embodiments. As shown, server 330 is a cluster including several server nodes. Each server node includes a dedicated replay cache for recording previously-received messages. Accordingly, if hacker 620 “sniffs” a message sent by client 610 to server node 1 and resends that message to server node 8, server node 8 would not be able to determine that the message is a duplicate because the replay cache of server node 8 would not contain a record of that message. Rather, only the replay cache of server node 1 would contain a record of the message.
Accordingly, to assure that hacker 620 cannot exploit this feature, a server node checks both the target port of the received message and its own replay cache. In the latter regard, each message (e.g., Application Request) may specify a sequence number that is recorded in the replay cache of the server node at which the message is received. Therefore, S530 may comprise determining whether the sequence number of the received message exists in the replay cache of the server node which has received the message, and whether the specified target port is a port associated with the server node.
If the determination at S530 is negative, flow proceeds to S525 as described above to transmit an error message to the client. If not, a session ticket is created and transmitted to the client at S535. Authentication with the second server is therefore successful, without requiring the user to perform a second sign-on according to some embodiments.
FIG. 7 is a block diagram of apparatus 700 according to some embodiments. Apparatus 700 illustrates one hardware architecture implementing a client device as described above, but implementations of client devices are not limited thereto. Elements of apparatus 700 may therefore operate to execute methods as described above. Apparatus 700 may include other unshown elements according to some embodiments.
Apparatus 700 includes processor 710 operatively coupled to communication device 720, data storage device 730, one or more input devices 740, one or more output devices 750 and memory 760. Communication device 720 may facilitate communication with external devices, such as via a computer network. Input device(s) 740 may comprise, for example, a keyboard, a keypad, a mouse or other pointing device, a microphone, knob or a switch, an infra-red (IR) port, a docking station, and/or a touch screen. Input device(s) 740 may be used, for example, to enter information into apparatus 700. Output device(s) 750 may comprise, for example, a display (e.g., a display screen) a speaker, and/or a printer.
Data storage device 730 may comprise any appropriate persistent non-transitory storage media, including combinations of magnetic storage devices (e.g., magnetic tape, hard disk drives and flash memory), optical storage devices, Read Only Memory (ROM) devices, etc., while memory 760 may comprise Random Access Memory (RAM).
Client executable 732 of data storage device 730 may comprise program code executable by processor 710 to provide any of the functions described herein, including but not limited to process 200. Embodiments are not limited to execution of these functions by a single apparatus. Data storage device 730 may also store data and other program code for providing additional functionality and/or which are necessary for operation thereof, such as device drivers, operating system files, etc.
Apparatus 700 may also or alternatively comprise an implementation of a first server or a second server as described above. Such an apparatus would include program code executable to cause the apparatus to perform the functions described above with respect to a first server or a second server.
All systems and processes discussed herein may be embodied in program code stored on one or more computer-readable non-transitory media. Such media non-transitory media may include, for example, a fixed disk, a floppy disk, a CD-ROM, a DVD-ROM, a Flash drive, magnetic tape, and solid state RAM or ROM storage units. Embodiments are therefore not limited to any specific combination of hardware and software.
Embodiments described herein are solely for the purpose of illustration. Those in the art will recognize other embodiments may be practiced with modifications and alterations to that described above.

## Claims

1. A method implemented by a computing system in response to execution of program code by a processor of the computing system, the method comprising:
authenticating a user with a first server comprising a first processor and a first memory;
receiving a request from the user to authenticate the user with a second server comprising a second processor and a second memory;
in response to receiving the request, determining, by a client device, whether the client device includes program code for requesting user credentials for the second server from the first server;
if it is determined, by the client device, that the client device includes program code for requesting user credentials for the second server from the first server, requesting, from the first server, user credentials to access the second server, wherein the second processor is to execute program code stored in the second memory to verify, prior to transmission of a session ticket, that the user credentials are received by a correct port of the second server and determine that a sequence number of the user credentials has not been previously received by the second server;
receiving the user credentials from the first server; and
transmitting the user credentials to the second server.

2. A method according to claim 1, wherein the first server comprises an Active Directory server.

3. A method according to claim 1, wherein requesting the user credentials to access the second server from the first server comprises:
retrieving a Ticket Granting Ticket associated with the user from a local memory; and
transmitting the Ticket Granting Ticket to the first server; and
wherein the received user credentials comprise a Kerberos Application Request structure.

4. A method according to claim 1, wherein the received user credentials comprise a ticket encrypted with a password, the ticket comprising a node encrypted with a session key.

5. A method according to claim 1, further comprising:
receiving the user credentials at the second server;
decrypting the user credentials at the second server;
verifying, at the second server, that the decrypted user credentials are valid; and
transmitting a session ticket in response to verifying the decrypted user credentials.

6. A method according to claim 1, wherein the received user credentials comprise a ticket encrypted with a password, the ticket comprising a node encrypted with a session key, the method further comprising:
receiving the user credentials at the second server;
decrypting the ticket at the second server using the password;
verifying, at the second server, that decrypted ticket is valid;
decrypting the node using the session key at the second server;
verifying the user identity based on the decrypted node; and
transmitting a session ticket in response to verifying the user identity.

7. A method according to claim 1, wherein
the client device is not the user, is not the first server and is not the second server.

8. A non-transitory medium storing computer-executable program code, the program code executable by a computing device to:
authenticate a user with a first server comprising a first processor and a first memory;
receive a request from the user to authenticate the user with a second server comprising a second processor and a second memory;
in response to receiving the request, determine, by a client device, whether the client device includes program code for requesting user credentials for the second server from the first server;
if it is determined, by the client device, that the client device includes program code for requesting user credentials for the second server from the first server, request from the first server, user credentials to access the second server, wherein the second processor is to execute program code stored in the second memory to verify, prior to transmission of a session ticket, that the user credentials are received by a correct port of the second server and determine that a sequence number of the user credentials has not been previously received by the second server;
receive the user credentials from the first server; and
transmit the user credentials to the second server.

9. A medium according to claim 8, wherein requesting of the user credentials to access the second server from the first server comprises:
retrieval of a Ticket Granting Ticket associated with the user from a local memory; and
transmission of the Ticket Granting Ticket to the first server; and
wherein the received user credentials comprise a Kerberos Application Request structure.

10. A medium according to claim 8, wherein the received user credentials comprise a ticket encrypted with a password, the ticket comprising a node encrypted with a session key.

11. A medium according to claim 8, the program code further executable by the second server to:
receive the user credentials;
decrypt the user credentials;
verify that the decrypted user credentials are valid; and
transmit a session ticket to the computing device in response to verifying the decrypted user credentials.

12. A medium according to claim 8, wherein the received user credentials comprise a ticket encrypted with a password, the ticket comprising a node encrypted with a session key, the program code further executable by the second server to:
receive the user credentials;
decrypt the ticket using the password;
verify that decrypted ticket is valid;
decrypt the node using the session key;
verify the user identity based on the decrypted node; and
transmit a session ticket to the computing system in response to verifying the user identity.

13. A system comprising:
a first server comprising a first processor and a first memory;
a second server comprising a second processor and a second memory;
a client system comprising a third processor and a third memory, the third processor to execute program code stored in the third memory to:
authenticate a user with the first server;
receive a request from the user to authenticate the user with the second server;
in response to receiving the request, determine, by a client device, whether the client device includes program code for requesting user credentials for the second server from the first server;
if it is determined, by the client device, that the client device includes program code for requesting user credentials for the second server from the first server, request from the first server, user credentials to access the second server, wherein the second processor is to execute program code stored in the second memory to verify, prior to transmission of a session ticket, that the user credentials are received by a correct port of the second server and determine that a sequence number of the user credentials has not been previously received by the second server;
receive the user credentials from the first server; and
transmit the user credentials to the second server.

14. A system according to claim 13, wherein requesting of the user credentials to access the second server from the first server comprises:
retrieval of a Ticket Granting Ticket associated with the user from a local memory; and
transmission of the Ticket Granting Ticket to the first server; and
wherein the received user credentials comprise a Kerberos Application Request structure.

15. A system according to claim 13, wherein the received user credentials comprise a ticket encrypted with a password, the ticket comprising a node encrypted with a session key.

16. A system according to claim 13, wherein the second processor is to execute program code stored in the second memory to:
receive the user credentials;
decrypt the user credentials;
verify that the decrypted user credentials are valid; and
transmit a session ticket to the computing device in response to verifying the decrypted user credentials.

17. A system according to claim 13, wherein the received user credentials comprise a ticket encrypted with a password, the ticket comprising a node encrypted with a session key, wherein the second processor is to execute program code stored in the second memory to:
receive the user credentials;
decrypt the ticket using the password;
verify that decrypted ticket is valid;
decrypt the node using the session key;
verify the user identity based on the decrypted node; and
transmit a session ticket to the computing system in response to verifying the user identity.