diff --git a/SAS/TMSS/frontend/tmss_webapp/src/authenticate/auth.js b/SAS/TMSS/frontend/tmss_webapp/src/authenticate/auth.js
index 8648fb81067b770f0820edf02495faee8de1e96e..6d7706e030733c43244f69d33669d7a4f312afd7 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/authenticate/auth.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/authenticate/auth.js
@@ -12,18 +12,32 @@ const Auth = {
         let user = localStorage.getItem("user");
         if (user) {
             user = JSON.parse(user);
-            if (user.token) {
-                axios.defaults.headers.common['Authorization'] = `Token ${user.token}`;
-                const permissions = await AuthStore.getState();
-                if(!permissions.userRolePermission.project) {
-                    await PermissionStackUtil.getPermissions(true);
+            return Auth.getUserPermission(user);
+        }else {
+            user = sessionStorage.getItem("user");
+            console.log('Keycloak:',user);
+            if (user) {
+                user = JSON.parse(user);
+                const res = await AuthService.keycloakAuthenticate();
+                if(res && res.is_authenticated){
+                    localStorage.setItem("loginType", 'Keycloak');
+                    return Auth.getUserPermission(user);
                 }
-                return true;
-            }
+            } 
         }
         await PermissionStackUtil.getPermissions(false);
         return false;
     },
+    getUserPermission: async (user) => {
+        if (user.token) {
+            axios.defaults.headers.common['Authorization'] = `Token ${user.token}`;
+            const permissions = await AuthStore.getState();
+            if(!permissions.userRolePermission.project) {
+                await PermissionStackUtil.getPermissions(true);
+            }
+            return true;
+        }
+    },
     /** Gets user details from browser local storage */
     getUser: () => {
         return JSON.parse(localStorage.getItem("user"));
@@ -32,7 +46,8 @@ const Auth = {
     login: async(user, pass) => {
         const authData = await AuthService.authenticate(user, pass);
         if (authData) {
-            localStorage.setItem("user", JSON.stringify({name:user, token: authData.token}));
+            localStorage.setItem("user", JSON.stringify({name:user, token: authData.token},));
+            localStorage.setItem("loginType", 'Application');
             await PermissionStackUtil.getPermissions(true);
             return true;
         }   else {
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/authenticate/login.js b/SAS/TMSS/frontend/tmss_webapp/src/authenticate/login.js
index 383fe9b68d1840a2badde6b390f5e1b2dc7bc3f5..9dfa5bb18aa4c0b00f72166cc578db4d1b4324bc 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/authenticate/login.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/authenticate/login.js
@@ -3,6 +3,7 @@ import React, {Component} from 'react';
 import { Redirect } from 'react-router-dom';
 import Auth from '../authenticate/auth';
 import { CustomPageSpinner } from '../components/CustomPageSpinner';
+import UIConstants from '../utils/ui.constants';
 
 /**
  * Component to authenticate users in the application.
@@ -21,6 +22,7 @@ export class Login extends Component {
         this.login = this.login.bind(this);
         this.setCredentials = this.setCredentials.bind(this);
         this.formSubmit = this.formSubmit.bind(this);
+        this.doKeyCloakLogin = this.doKeyCloakLogin.bind(this);
     }
 
     /**
@@ -71,6 +73,14 @@ export class Login extends Component {
         }
     }
 
+    async doKeyCloakLogin(e) {
+        /** For testing */
+            //sessionStorage.setItem("user", JSON.stringify({name:'test',"token":"eaa9a75f31339955cfaca1f7c94b01b1dd327d04"},));
+        /** End */
+
+        this.setState({redirect: UIConstants.KEYCLOAK_AUTH_URL});
+    }
+
     render() {
         if (this.state.redirect) {
             return (<Redirect to={{pathname: this.state.redirect}} />);
@@ -120,10 +130,13 @@ export class Login extends Component {
                                                 </div>
                                                 <div className="row form-footer">
                                                     <div className="col-md-6 forget-paswd">
-                                                        
+                                                        <button className="btn btn-primary" 
+                                                            onClick={this.doKeyCloakLogin}>Forget Password?</button>
                                                     </div>
                                                     <div className="col-md-6 button-div">
-                                                        <button className="btn btn-primary" 
+                                                            <button className="btn btn-primary"
+                                                                onClick={this.doKeyCloakLogin}>Keycloak</button>
+                                                            <button className="btn btn-primary" style={{marginLeft: '1em'}}
                                                                 disabled={Object.keys(this.state.validFields).length<2} 
                                                                 onClick={this.login}>Login</button>
                                                     </div>
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/services/auth.service.js b/SAS/TMSS/frontend/tmss_webapp/src/services/auth.service.js
index 43c7afbbbb80fc29997a1158465e8dbe4d5d1e5a..1f8c1a34bf34995d643fe0b3ecab83460079b4a3 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/services/auth.service.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/services/auth.service.js
@@ -1,3 +1,5 @@
+import UIConstants from '../utils/ui.constants';
+
 const axios = require('axios');
 
 const AuthService = {
@@ -12,9 +14,29 @@ const AuthService = {
             return null;
         }
     },
+    keycloakAuthenticate: async() => {
+        try {
+            delete axios.defaults.headers.common['Authorization'];
+            const response = await axios.post(UIConstants.KEYCLOAK_AUTHENTICATE_URL);
+            console.log('keycloakAuthenticate =>',response)
+            //axios.defaults.headers.common['Authorization'] = `Token ${response.data.token}`;
+            return response.data;
+        }   catch(error) {
+            console.error('Error [keycloakAuthenticate]',error);
+            return null;
+        }
+    },
     deAuthenticate: async(token) => {
         try {
-            await axios.delete("/api/token-deauth/");
+            const loginType = localStorage.getItem("loginType");
+            if (loginType && loginType === 'Application') {
+                await axios.delete("/api/token-deauth/");
+            }   else {
+                console.log('deAuthenticate url:', UIConstants.KEYCLOAK_LOGOUT_URL);
+                await axios.post(UIConstants.KEYCLOAK_LOGOUT_URL);
+                sessionStorage.removeItem("user");
+            }
+            localStorage.removeItem("loginType");
         }   catch(error) {
             console.error(error);
         }
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/utils/ui.constants.js b/SAS/TMSS/frontend/tmss_webapp/src/utils/ui.constants.js
index d89aadf99a448db85546f15d0ffec2b6ec8272b0..bda56702a072017cfd336c986562893ccd42ad75 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/utils/ui.constants.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/utils/ui.constants.js
@@ -1,4 +1,7 @@
 const UIConstants = {
+    KEYCLOAK_AUTH_URL: '/oidc/authenticate',
+    KEYCLOAK_LOGOUT_URL: '/oidc/logout/',
+    KEYCLOAK_AUTHENTICATE_URL: '/api/authentication_state/',
     tooltipOptions: {position: 'left', event: 'hover', className:"p-tooltip-custom"},
     timeline: {
         types: { NORMAL: "NORMAL", WEEKVIEW:"WEEKVIEW"}