blob: 3dcd3c3177981333f0763306666353d8f17be24c [file] [log] [blame]
-----
Development
-----
-----
30 September 2008
-----
~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements. See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership. The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License. You may obtain a copy of the License at
~~
~~ http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied. See the License for the
~~ specific language governing permissions and limitations
~~ under the License.
~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/guides/mini/guide-apt-format.html
Extending Redback Authentication
In order to accomodate the many authentication security services used in various applications, it is possible to to implement pluggable authentication providers in the Redback security system.
* Requirements
* <<<redback-authentication-api>>> must be implemented
* create an authentication implementation project under <<<redback-authentication-providers>>>
* <<<org.apache.archiva.redback.authentication.Authenticator>>> must be implemented
* <<<redback-users-api>>> must be implemented
* create a user provider implementation project under <<<redback-users-providers>>>
* <<<org.apache.archiva.redback.users.User>>> must be implemented
* <<<org.apache.archiva.redback.users.UserManager>>> must be implemented
* utility and wrapper classes can be implemented under <<<redback-common>>>
* e.g. <<<$redback/redback-common/redback-common-ldap>>> contains the utility class <<<org.apache.archiva.redback.common.ldap.LdapUtils>>>, and the wrapper class <<<org.apache.archiva.redback.common.ldap.user.LdapUser>>>
* other essential classes may be placed here as well, such as the <<<org.apache.archiva.redback.common.ldap.connection.LdapConnectionFactory>>>
* Examples
** Implementing OpenId ({{{http://wiki.openid.net/}OpenId Homepage}})
While OpenId may be directly integrated to the authentication point of the web application, another option is to implement the redback api.
Here is something to get started:
* create the provider project <<<redback-authentication-openid>>>
* create the authenticator class, something like <<<OpenIdAuthenticator>>> that implements <<<org.apache.archiva.redback.authentication.Authenticator>>>
* create the provider project <<<redback-users-openid>>>
* implement <<<org.apache.archiva.redback.users.User>>>, something like <<<OpenIdUser>>>
* OpenId supports only the principal/username and password fields, so use dummy/default values for the unsupported fields (email, fullname) in this case.
* implement <<<org.apache.archiva.redback.users.UserManager>>>, something like <<<OpenIdUserManager>>>
* OpenId is a read-only authentication service, <<<createUser()>>>, <<<updateUser()>>>, <<<deleteUser()>>> may not be used
* various utility classes may be implemented in <<<redback-common-openid>>>
* <<<OpenIdConfiguration>>> may be used to encapsulate the following configuration properties (properties that may be specified in the <<<security.properties>>> file):
* <<<openid.config.provider.url>>>, where this is a url to one openid provider (support to many providers may come later, specified or via discovery, depending on the organization's security policy)
* <<<OpenIdUtils>>> class, may be implemented to normalize the User-Supplied Identifier to an Identifier that the OpenId Provider understands, e.g. redback username ('<<<johndoe>>>') to OpenId url-like identifier ('<<<http://johndoe.openidprovider.com>>>')
* <<<OpenIdAuthenticationException>>> that implements <<<org.apache.archiva.redback.authentication.AuthenticationException>>>
* <<<OpenIdProviderFactory>>> that takes the configuration from <<<OpenIdConfiguration>>>
* <<<OpenIdProvider>>> is where the <<<OpenIdUserManager>>> can verify a user