Authentication against OAuth 2.0 services is possible using the individual authentication provider modules which simplify the configuration of OAuth parameters and deal with the differences that exist between common OAuth endpoints. A general OAuth provider can be used by including the twigkit.security.provider.oauth module. This requires a custom spring-security.xml file, but it is recommended to use one of the prepackaged modules we provide for these services. Using OAuth can create a seamless experience where, after the token handshake and approval is complete, the user will always be logged into the application as long as their session is active.

ADFS

The Active Directory Federation Services (ADFS) security provider is available in Appkit. ADFS login screen
OAuth based authentication against ADFS requires ADFS 3 (or newer) which is available from Windows Server 2012 R2 onwards.
The Active Directory Federation Services (ADFS) security provider is available in Appkit.
OAuth based authentication against ADFS requires ADFS 3 (or newer) which is available from Windows Server 2012 R2 onwards.
To authenticate against ADFS, perform the steps in this article.

1 Add the security provider dependency

To add ADFS as a security provider in the Oauth Security module:
  1. Remove any existing security provider dependency from the pom.xml under the root of the project.
  2. Add a security provider dependency for ADFS to the dependencies tag in pom.xml:
    <dependency>
        <groupId>twigkit</groupId>
        <artifactId>twigkit.security.provider.oauth.adfs3</artifactId>
        <version>${project.parent.version}</version>
    </dependency>
    
  3. Configure Appkit to invoke the Oauth Security module on startup. Change the security.conf file in src/main/resources/conf/security/ to contain:
    type: oauth
    
    You must remove any existing spring-security.xml file because this module encapsulates all Spring configuration automatically.

2 Set up the application (relying party trust) in ADFS

adfs-relying-party-1adfs-relying-party-2
  1. Add a new relying party in ADFS management. The identifier is usually set to the URL of the Appkit application itself. adfs-relying-party-3 adfs-relying-party-4
  2. Edit the Claim Rules to pass through the credentials as shown in the screenshot. It is important the configuration is as shown in the screenshots here. The User Principal Name is passed through as the ‘UPN’ claim and the Token-Groups Unqualified Name is passed through as the ‘Role’ claim. adfs-principal-roles-claim-rule
  3. Open a PowerShell session to create the OAuth ADFS ‘client’ for the Appkit application:
    Add-ADFSClient -Name "Appkit OAuth" -ClientId "1234567890-ABCDEF" -RedirectUri="http://localhost:8080/oauthLogin"
    
The ClientId should be a GUID and the RedirectUri must point to the Appkit application URL, with /oauthLogin appended. Here, localhost is used for testing an Appkit application running on the local development machine.

3 Configure the OAuth module for the application setup in ADFS

Create a new configuration file in conf/security/oauth.conf.

oauth.conf

client-id: 168f3ee4-63fc-4723-a61a-6473f6cb515d
adfs-url: https://your-adfs-server/adfs
resource: http://localhost:8080
high-trust: false
Here, you must change the client-id, adfs-url and resource parameters for the environment in question.The client-id is the ID that was set up against ADFS using the Add-ADFSClient PowerShell command.The adfs-url is the URL of the ADFS server with the /adfs context appended.The resource is the relying party trust identifier set up in ADFS management.The `high-trust’ parameter is only required when integrating the ADFS and SharePoint modules. This article is only concerned with authentication against ADFS.

3 Add the Spring filter to the web.xml

Add this to the web.xml file of the project:
<!-- Spring Security -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-security.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <listener>
      <listener-class>
        org.springframework.web.context.request.RequestContextListener
      </listener-class>
    </listener>
<!-- Spring Security Ends -->
Inclusion of a ‘RequestContextListener’ is not required in a standard Appkit-plus-Spring Security application.

4 Test the authentication

If a user is not logged via ADFS prior to visiting the application they will be redirected to the ADFS OAuth login page. The user experience is a typical login page.After the user logs in, the user will be returned to the application as an authenticated user.The Appkit user’s details will also be populated with any basic information available from the decoded OAuth token such as roles and the user principal name.

Facebook

To authenticate against Facebook, perform the steps in this article.

Add the security provider dependency

To add Facebook as a security provider in the Oauth Security module:
  1. Remove any existing security provider dependency from the pom.xml under the root of the project.
  2. Add a security provider dependency for Facebook to the dependencies tag in pom.xml:
    <dependency>
        <groupId>twigkit</groupId>
        <artifactId>twigkit.security.provider.oauth.facebook</artifactId>
        <version>${project.parent.version}</version>
    </dependency>
    
  3. Configure Appkit to invoke the Oauth Security module on startup. Change the security.conf file in src/main/resources/conf/security/ to contain:
    type: oauth
    
    You must remove any existing spring-security.xml file because this module encapsulates all Spring configuration automatically.

Configure the OAuth module for the application setup in Facebook

Add the relevant configuration in a file in conf/security/oauth.conf. For example:
client-id: 1669796236622670
client-secret: c064ea0f5e5c13a2a6c5f6366f7426cb
scope: public_profile,email
Including the user profile scope lets Appkit automatically pull the user profile information into their Appkit user details.This guide assumes the client-id and client-secret settings have already been generated in the ‘Facebook for Developers’ admin console and provided to you as an application developer. For more information, see the Facebook documentation on OAuth.
The application’s ‘Site URL’ must be configured in the console under ‘settings’ as http://your-application-url/oauthLogin.

Add the Spring filter to the web.xml

Add this to the web.xml file of the project:
<!-- Spring Security -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-security.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <listener>
      <listener-class>
        org.springframework.web.context.request.RequestContextListener
      </listener-class>
    </listener>
<!-- Spring Security Ends -->
Inclusion of a ‘RequestContextListener’ is not required in a standard Appkit-plus-Spring Security application.

Test the authentication

If a user is not logged into a Facebook account prior to visiting the application they will be redirected to the Facebook login page. They will then be asked if they want to approve the application to access the services defined in the scopes parameter. If the user profile scope is included the Appkit user’s details will also be populated with any basic information available from the decoded OAuth token such as first name, last name and email address.Using OAuth can create a seamless experience where, after the token handshake and approval is complete, the user will always be logged into the application as long as their session with Facebook is active.User logs in:Facebook account login screen exampleUser approves application:Facebook approval screen exampleThe user is signed into the application with an OAuth token, and will be signed in automatically from now on unless the token expires or the user logs out of Facebook entirely.Facebook application example

Google

To authenticate against Google services, perform the steps in this article.

1 Add the security provider dependency

To add Google as a security provider in the Oauth Security module:
  1. Remove any existing security provider dependency from the pom.xml under the root of the project.
  2. Add a security provider dependency for Google to the dependencies tag in pom.xml:
    <dependency>
        <groupId>twigkit</groupId>
        <artifactId>twigkit.security.provider.oauth.google</artifactId>
        <version>${project.parent.version}</version>
    </dependency>
    
  3. Configure Appkit to invoke this module on startup. Change the security.conf file in src/main/resources/conf/security/ to contain:
    type: oauth
    
  4. Remove any existing spring-security.xml file, because this module encapsulates all Spring configuration automatically.

2 Configure the OAuth module for application setup in Google Developer Console

Add the relevant configuration in a file in conf/security/oauth.conf:
client-id: 419084461435-2370lvl0rpcr8b8lu0ljkv3l2ib2ahfc.apps.googleusercontent.com
client-secret: 5p-Ph7AcvnFBfMQSSUNv-umQ
scope: https://www.googleapis.com/auth/userinfo.profile
Including the user profile scope lets Appkit automatically pull the user profile information into their Appkit user details.This guide assumes the client-id and client-secret settings have already been generated in the Google Developer Console and provided to you as an application developer. For more information about this, see the Google documentation on OAuth.
The authorized redirect URI must be configured in the Google Developer Console as http://your-application-url/oauthLogin.

3 Add the Spring filter to the web.xml

Add this to the web.xml of the project:
<!-- Spring Security -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-security.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <listener>
      <listener-class>
        org.springframework.web.context.request.RequestContextListener
      </listener-class>
    </listener>
<!-- Spring Security Ends -->
Inclusion of a ‘RequestContextListener’ is not required in a standard Appkit-plus-Spring Security application.

4 Test the authentication

If a user is not logged into a Google account prior to visiting the application they will be redirected to the Google login page. They will then be asked if they want to approve the application to access the services defined in the scopes parameter. If the user profile scope is included the Appkit user’s details will also be populated with any basic information available from the decoded OAuth token such as first name, last name and email address.Using OAuth can create a seamless experience where, after the token handshake and approval is complete, the user will always be logged into the application as long as their session with Google is active.User logs in:Google account login screen exampleUser approves application:Google approval screen exampleThe user is signed into the application with an OAuth token, and will be signed in automatically from now on unless the token expires or the user logs out of Google entirely.Google application example

Office 365

To authenticate against Office 365, perform the steps in this article.

1 Add the security provider dependency

To add Office 365 as a security provider in the Oauth Security module:
  1. Remove any existing security provider dependency from the pom.xml under the root of the project.
  2. Add a security provider dependency for Office 365 to the dependencies tag in pom.xml:
    <dependency>
        <groupId>twigkit</groupId>
        <artifactId>twigkit.security.provider.oauth.office365</artifactId>
        <version>${project.parent.version}</version>
    </dependency>
    
  3. Configure Appkit to invoke the Oauth Security module on startup. Change the security.conf file in src/main/resources/conf/security/ to contain:
    type: oauth
    
    You must remove any existing spring-security.xml file because this module encapsulates all Spring configuration automatically.

2 Configure the OAuth module for the application setup in Azure AD

Add the relevant configuration in a file in conf/security/oauth.conf:
azure-ad-tenant-id: 746a834e-ba89-4191-926d-f2c220b79a4a
resource: https://your-organisation.sharepoint.com/
client-id: 08de5b32-569a-4387-ab94-08b7b6fc1ed8
client-secret: x7vRc8VJ9CHjSM5XXyHpCSRaD5JH/6VsB8P5ZGz4B8M=
This guide assumes these settings have already been set up in the Azure AD instance in Microsoft’s Azure portal and provided to you as an application developer.
The reply URL must be configured in Azure AD as http://your-application-url/oauthLogin.

3 Add the Spring filter to the web.xml file

Add this to the web.xml file of the project:
<!-- Spring Security -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-security.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <listener>
      <listener-class>
        org.springframework.web.context.request.RequestContextListener
      </listener-class>
    </listener>
<!-- Spring Security Ends -->
Inclusion of a ‘RequestContextListener’ is not required in a standard Appkit-plus-Spring Security application.

4 Test the authentication

If a user is not logged into Office 365 prior to visiting the application, then they will be redirected to the Microsoft Online login page.If the Azure administrator has set app approval explicitly, after the user is logged in, the user will be returned to the application as an authenticated user.The Appkit user’s details will be populated with any basic information available from the decoded OAuth token such as first name, last name and email address.If approval is not set by the Azure AD administrator, then there will be an intermediary step after the user logs into Microsoft Online requesting their explicit approval for the application to access their credentials.Using OAuth can create a seamless experience where, after the token handshake and approval is complete, the user will always be logged into the application as long as their session with Microsoft Online/Office 365 is active.User logs in:Microsoft Online login screen exampleUser approves application:Microsoft Online approval example(This is optional, depending on the Azure AD configuration.)The user is signed into the application with an OAuth token, and will be signed in automatically from now on unless the token expires or the user logs out of Office 365 entirely.Office 365 application example