160 likes | 270 Views
Authentication in Jo om la ! 1.5. Presented By: Jason Kendall Joomla! Development Workgroup. About Me. Born in Feb 1979, started in the computing industry with Pong. In the late ‘80s moved into the Commodore 64 where I developed utilities in Basic (Yes, before I was 10).
E N D
Authentication in Joomla! 1.5 Presented By: Jason Kendall Joomla! Development Workgroup
About Me • Born in Feb 1979, started in the computing industry with Pong. • In the late ‘80s moved into the Commodore 64 where I developed utilities in Basic (Yes, before I was 10). • Moved into a Tandy PC shortly there after when even more Basic programming was completed including a full blown login system. • I ran a BBS (‘The BBS Enterprise’) for 4 years and became a regular poster on the Fido Network. • First introduction to the Internet was via my high school to the time where we accessed gopher and telnet via a shared modem line. • I started with Slackware Linux in the early ‘90s and ever since then I’ve been working with new technologies including VoIP, and IPv6. • Started PHP development in Feb 2000 with my own concept of what is now known as MVC, although you wouldn’t know it. • I’m currently working as an Information Security Analyst and hold a number of certifications on computer networking and technologies. DRAFT Presented By Jason Kendall Joomla! Development Workgroup
Overview • Changes from 1.x • Structure/How it works • Code base details • Hello World Example • GMail Example • OpenID & our pit falls • Other schemes to implement • Questions DRAFT Presented By Jason Kendall Joomla! Development Workgroup
What has changed since 1.x? • Added Plug-in system using JDispatch • Ability to completely customize the authentication system from end to end • Ability for end plug-ins to overwrite user details for user auto-creation. ie: One can login with LDAP email address, and rewrite the UserID to just the login • Enabled the creation of temp users from external plugins. DRAFT Presented By Jason Kendall Joomla! Development Workgroup
Structure • The Joomla! application sends the authentication request to all enabled plug-ins. • The order is based on the plug-in rank in the manager. • Each plug-in processes the request and sends back a status to the handler. • The handler checks for a success and passes it off to the application. • In the case of a failure, it logs the errors to JLog for analysis by the admin. DRAFT Presented By Jason Kendall Joomla! Development Workgroup
Code Base • function onAuthenticate( $username, $password ) • Process an Authentication request • Gets a username and password • Returns a JAuthenticateResponse object • status • JAUTHENTICATE_STATUS_SUCCESS • JAUTHENTICATE_STATUS_FAILURE • error_message • Can be any text • Text should identify the error that occurred • Gets sent to JLog system to be logged • On failure end user will only see invalid credentials response • Can also return: username, fullname, password etc. DRAFT Presented By Jason Kendall Joomla! Development Workgroup
Code Base cont. • function onAuthenticateFailure( $username, $password ) • Fires when only a failure is detected. • Can be used to clear details from J! or cookies on failure. DRAFT Presented By Jason Kendall Joomla! Development Workgroup
Code Base cont. • function onLoginUser( $response, $remember ) • Processed on a successful login by a plugin • $response is the JAuthenticateResponse from the accepted plugin • $remember is set when the user wants to be remembered DRAFT Presented By Jason Kendall Joomla! Development Workgroup
Code Base cont. • function onLogoutUser( $parameters ) • Processed on a logout request from user • $parameters is an array: • Username: The username being logged out • ID: The users ID DRAFT Presented By Jason Kendall Joomla! Development Workgroup
Code Base cont. • Extra events for syncing users include: • onBeforeStoreUser • onAfterStoreUser • onBeforeDeleteUser • onAfterDeleteUser DRAFT Presented By Jason Kendall Joomla! Development Workgroup
Hello World of Authentication function onAuthenticate( $username, $password ) { $return = new JAuthenticateResponse('example'); if ($username == “Hello” && $password == “World”) $return->type = JAUTHENTICATE_STATUS_SUCCESS; else $return->type = JAUTHENTICATE_STATUS_FAILURE; return $return; } DRAFT Presented By Jason Kendall Joomla! Development Workgroup
function onAuthenticate( $username, $password ) { $return = new JAuthenticateResponse('gmail'); $curl = curl_init("https://mail.google.com/gmail/feed/atom"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_USERPWD, "$username:$password"); $result = curl_exec($curl); $code = curl_getinfo ($curl, CURLINFO_HTTP_CODE); $message = ''; $success = 0; switch($code) { case 200: $message = 'Access Granted'; $success = 1; break; case 401: $message = 'Access Denied'; break; default: $message = 'Result unknown, access denied.'; break; } if ($success) { $return->status = JAUTHENTICATE_STATUS_SUCCESS; $return->email = $username; $return->fullname = $username; } else { $return->status = JAUTHENTICATE_STATUS_FAILURE; $return->error_message= 'Failed to authenticate: ' . $message; } return $return; } GMail Example DRAFT Presented By Jason Kendall Joomla! Development Workgroup
OpenID & Our Pit Falls • Issues • Cookie data needs to be sent to client • It must redirect to external site • It should return to the authentication plug-in • Limited Support in PHP4 DRAFT Presented By Jason Kendall Joomla! Development Workgroup
OpenID & Our Pit Falls cont. • Used JSession to store cookies • Built URIs with JURI and redirected via $mainframe • Returned mimicking a login form response • Checked for cookie/session state to complete the request • Used SimpleXML to mimic OpenID requests DRAFT Presented By Jason Kendall Joomla! Development Workgroup
Other schemes • Radius • RSA SecurID • WiKID • Extendable External Databases (EED) • Google Account Authentication • Kerberos • IMap/POP3 DRAFT Presented By Jason Kendall Joomla! Development Workgroup