Active Directory Federation Service Proxy Integration Protocol compliance (Technical preview)

Note Support for Active Directory Federation Service Proxy Integration Protocol is in technical preview release.

What is ADFS and why do we need an ADFS proxy?

Active Directory Federation Services (ADFS) is a Microsoft service that enables single sign-on (SSO) experience for Active Directory-authenticated clients to resources outside the enterprise data centre. An ADFS server farm allows internal users to access external cloud-hosted services. But the moment external users are brought into the mix, they must be given a way to connect remotely and access cloud-based services through federated identity. Most enterprises do not prefer keeping the ADFS server exposed in the DMZ, therefore ADFS proxy plays a critical role in remote user connectivity and application access.

What’s in it for Citrix ADC?

Citrix ADC has been playing similar roles – remote user connectivity and application access for more than a decade. Citrix ADC has the right technology to enable secure connectivity, authentication and handling of federated identity, and thus it becomes the preferred solution for replacing an existing ADFS proxy or supporting a new ADFS implementation. Most enterprises want to reduce the footprint in the DMZ, and hence, they appreciate the fact that, in addition to its traditional functions, Citrix ADC can serve as ADFS proxy. This approach avoids the need to deploy an extra component in the DMZ.

Why ADFSPIP?

If third party proxies are to be used in place of the Web Application Proxy, they must support the MS-ADFSPIP protocol which specifies the ADFS and WAP integration rules. ADFSPIP integrates Active Directory Federation Services with an authentication and application proxy to enable access to services located inside the boundaries of the corporate network for clients that are located outside of that boundary.

localized image

Prerequisites

To successfully establish Trust between the proxy server and the ADFS farm, review the following configuration in the Citrix ADC appliance:

  • Create a SSL profile for back end and enable SNI in the SSL profile. Disable SSLv3/TLS1. At the command prompt, type the following command:

     add ssl profile <new SSL profile> -sniEnable ENABLED -ssl3 DISABLED -tls1 DISABLED -commonName <FQDN of ADFS>
    
  • Disable SSLv3/TLS1 for the service. At the command prompt, type the following command:

     set ssl service <adfs service name> -sslProfile ns_default_ssl_profile_backend
    
  • Enable SNI extension for back-end server handshakes. At the command prompt, type the following command::

     set vpn parameter –backendServerSni ENABLED
    
     set ssl parameter -denySSLReneg NONSECURE
    

Authentication mechanism

The following are the high-level flow of events for the authentication.

  1. Establish Trust with ADFS server – Citrix ADC server establishes Trust with the ADFS server by registering a client certificate. Once the Trust is established, the Citrix ADC appliance re-establishes the trust after reboot without user intervention.

    Upon certificate expiry you must reestablish the Trust by removing and adding ADFS proxy profile again.

  2. Insert headers to client requests – When the Citrix ADC appliance tunnels client requests, the HTTP headers related to ADFSPIP are added in the packet while sending them to ADFS server. You can implement access control at the ADFS server based on these header values. The following headers are supported.
    • X-MS-Proxy
    • X-MS-Endpoint-Absolute-Path
    • X-MS-Forwarded-Client-IP
    • X-MS-Proxy
    • X-MS-Target-Role
    • X-MS-ADFS-Proxy-Client-IP
  3. Manage end-user traffic – End-user traffic is routed securely to the desired resources.

    Note: Citrix ADC appliance uses form based authentication.

Configure Citrix ADC to work with ADFS server

Prerequisites

  • Configure Context Switching (CS) server as front-end with authentication, authorization, and auditing server behind CS. At the command prompt, type:

     add cs vserver <cs vserver name> SSL 10.220.xxx.xx 443
     -cltTimeout 180 -AuthenticationHost <adfs server hostname> -Authentication OFF -persistenceType NONE
    
     add cs action <action name1> -targetLBVserver <lb vserver name>
    
    
     add cs action <action name2> -targetLBVserver <lb vserver name>
    
     add cs policy <policy name1> -rule " http.req.url.contains(\"/adfs/services/trust\") || http.req.url.contains(\"federationmetadata/2007-06/federationmetadata.xml\")" -action <action name1>
    
     add cs policy <policy name2> -rule "HTTP.REQ.URL.CONTAINS(\"/adfs/ls\")" -action <action name2>
    
     bind cs vserver <cs vserver name> -policyName <policy name1> -priority 100
    
     bind cs vserver <cs vserver name> -policyName <policy name2> -priority 110
    
     bind cs vserver <cs vserver name> -lbvserver <lb vserver name>
    
  • Add ADFS service. At the command prompt, type:

     add service <adfs service name> <adfs server ip> SSL 443
    
     set ssl service <adfs service name> -sslProfile ns_default_ssl_profile_backend
    
  • Add a load balanced virtual server. At the command prompt, type:

     add lb vserver <lb vserver name> SSL 0.0.0.0 0
    
     set ssl vserver <lb vserver name> -sslProfile ns_default_ssl_profile_frontend
    
  • Bind service to the load balanced server. At the command prompt, type:

     bind lb vserver <lb vserver name> <adfs service name>
    

To configure Citrix ADC to work with ADFS server you need to do the following:

  1. Create an SSL CertKey profile key to use with ADFS proxy profile
  2. Create an ADFS proxy profile
  3. Associate the ADFS proxy profile to the LB virtual server

Create an SSL certificate with private key to use with ADFS proxy profile

At the command prompt, type:

    add ssl certkey <certkeyname> –cert <certificate path> -key <keypath>

Note: The Certificate file and the key file must be present in the Citrix ADC appliance. Create an ADFS proxy profile using CLI

At the command prompt, type:

add authentication adfsProxyProfile  <profile name> -serverUrl <https://<server FQDN or IP address>/> -username <adfs admin user name> -password <password for admin user> -certKeyName <name of the CertKey profile created above>

Where;

Profile name – Name of the AFDS proxy profile to be created

ServerUrl – Fully qualified domain name of the ADFS service including protocol and port. For example, https://adfs.citrix.com

Username – User name of an admin account that exists on ADFS server

Password – Password of the admin account used as user name

certKeyName – Name of the previously created SSL CertKey profile

Associate the ADFS proxy profile to the load balancing virtual server using CLI

In the ADFS deployment, there are two load balancing virtual severs, one for the client traffic and the other one for metadata exchange. The ADFS proxy profile must be associated with the load balancing virtual server that is front-ending the ADFS server.

At the command prompt, type:

set lb vserver <adfs-proxy-lb> -adfsProxyProfile <name of the ADFS proxy profile>

Client certificate based authentication on ADFS server

Starting with Windows server 2016, Microsoft introduced a new way of authenticating users when ADFS is accessed through proxy servers. Now, end users can log in with their certificates thereby avoiding the use of password.

End users often access ADFS through a proxy, especially when they are not in the premises. Therefore, ADFS proxy servers are required to support client certificate authentication through ADFSPIP protocol.

When ADFS is load balanced using a Citrix ADC appliance, to support certificate based authentication at the ADFS server, users need to login to the Citrix ADC appliance using the certificate as well. This allows Citrix ADC to pass user certificate to ADFS to provide SSO to the ADFS server.

The following diagram depicts the client certificate authentication flow.

localized image

Configure SSO for ADFS server using client certificate

To configure SSO for ADFS server using client certificate, you must first configure the client certificate authentication on the Citrix ADC appliance. You must then bind the certificate authentication policy to authentication, authorization, and auditing virtual server.

At the command prompt, type;

add authentication certAction <action name>

add authentication Policy <policy name> -rule <expression> -action <action name>

add authentication policylable <label Name>

bind authentication policylabel <label Name> -policyName <name of the policy> -priority<integer>

Example:

add authentication certAction adfsproxy-cert

add authentication Policy cert1 -rule TRUE -action adfsproxy-cert

add authentication policylable certfactor

bind authentication policylabel certfactor –policyName cert1 –priority 100

For information on configuring client certificate on Citrix ADC appliance, refer [Configure client certificate authentication using advanced policies.