Index: openacs-4/packages/acs-core-docs/www/ext-auth-requirements.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/ext-auth-requirements.html,v diff -u -r1.31 -r1.31.2.1 --- openacs-4/packages/acs-core-docs/www/ext-auth-requirements.html 16 Feb 2005 00:21:02 -0000 1.31 +++ openacs-4/packages/acs-core-docs/www/ext-auth-requirements.html 26 Aug 2005 00:02:29 -0000 1.31.2.1 @@ -1,4 +1,4 @@ -
People have plenty of usernames and passwords already, we +
People have plenty of usernames and passwords already, we don't want them to have yet another. We want people to be able to log in to OpenACS with the same password they use to log in to any other system.
Besides, administrators have better things to do than create @@ -7,7 +7,7 @@ log on to OpenACS, an account will automatically be created for them here.
Finally, security is increased with fewer passwords, since users generally can't remember all those passwords, so they tend to -keep them all the same and never change them.
Transparent: Users don't have to do anything special to +keep them all the same and never change them.
Transparent: Users don't have to do anything special to get an account on the local OpenACS system, if they already have an account on the external authentication server.
Fall-back: Users who don't have an account on the external authentication server are still allowed to create a local @@ -35,16 +35,16 @@ the other hand very modular to enable a start with minimal requirements (driver implementations) as soon as possible.
The problem can be split into several logically separate -parts. Each has a section below.
Authority: The name of an authority trusted to authenticate +parts. Each has a section below.
Authority: The name of an authority trusted to authenticate users.
Authentication Driver: An implementation of the authentication service contract, which talks to an authentication of a certain type, e.g. PAM, RADIUS, LDAP, or Active Directory.
Authentication API: The API through which login pages and applications talk to the authentication service. There's one and only one implementation of the authentication API, namly the one included in OpenACS Core.
Authentication Driver API: The service contract which - authentication drivers implement.
Authentication:
-
Account Management (NO PICTURE YET)
Batch Synchronization (NO PICTURE YET)
Feature | Status | Description |
---|---|---|
EXT-AUTH-01 | A | Extend Authentication/Acct Status API |
EXT-AUTH-03 | A | Account Creation API |
EXT-AUTH-05 | A | Password Management API |
EXT-AUTH-30 | A | Authority Management API |
Feature | Status | Description |
---|---|---|
EXT-AUTH-04 | A | Rewrite login, register, and admin pages to use APIs |
EXT-AUTH-38 | A | ad_form complain feature |
EXT-AUTH-19 | A | Rewrite password recovery to use API |
EXT-AUTH-21 | A | Rewrite email verification with API |
EXT-AUTH-28 | A | Username is email switch |
Users will log in using a username, a authority, and a + authentication drivers implement.
Authentication:
+
Account Management (NO PICTURE YET)
Batch Synchronization (NO PICTURE YET)
Feature | Status | Description |
---|---|---|
EXT-AUTH-01 | A | Extend Authentication/Acct Status API |
EXT-AUTH-03 | A | Account Creation API |
EXT-AUTH-05 | A | Password Management API |
EXT-AUTH-30 | A | Authority Management API |
Feature | Status | Description |
---|---|---|
EXT-AUTH-04 | A | Rewrite login, register, and admin pages to use APIs |
EXT-AUTH-38 | A | ad_form complain feature |
EXT-AUTH-19 | A | Rewrite password recovery to use API |
EXT-AUTH-21 | A | Rewrite email verification with API |
EXT-AUTH-28 | A | Username is email switch |
Users will log in using a username, a authority, and a password. The authority is the source for user/password verification. OpenACS can be an authority itself.
Each user in OpenACS will belong to exactly one authority, which can either be the "local" OpenACS users table, in which case the @@ -70,7 +70,7 @@ [Forgot my password] [New user registration]
If there's only one active authority, we don't display the -authority drop-down element at all.
Feature | Status | Description |
---|---|---|
EXT-AUTH-07 | A | Admin pages to control Ext-Auth parameters |
The site-wide systems administrator can configure the +authority drop-down element at all.
Feature | Status | Description |
---|---|---|
EXT-AUTH-07 | A | Admin pages to control Ext-Auth parameters |
The site-wide systems administrator can configure the authentication process from a page linked under /acs-admin.
Authorities - ordered list of authorities defined
Account Registration Allowed: Yes/No. Account registration can be disabled altogether.
Registration authority - the authority in which accounts should be created, using the relevant driver, if account registration is @@ -83,7 +83,7 @@ other drivers call external functions. The possible functions for each authority are split into several drivers for convenience. One driver handles authentication, one account creation, and one - changing passwords.
Feature | Status | Description |
---|---|---|
EXT-AUTH-16 | A | Create service contract for Authentication |
EXT-AUTH-17 | A | Create service contract for Acct. Creation |
EXT-AUTH-29 | A | Create service contract for Passwd Management |
Feature | Status | Description |
---|---|---|
EXT-AUTH-18 | A | Authority configuration data model |
Each authority is defined like this:
Authority pretty-name, e.g. "URZ"
Authentication Driver, e.g. "RADIUS". In practice, this + changing passwords.
Feature | Status | Description |
---|---|---|
EXT-AUTH-16 | A | Create service contract for Authentication |
EXT-AUTH-17 | A | Create service contract for Acct. Creation |
EXT-AUTH-29 | A | Create service contract for Passwd Management |
Feature | Status | Description |
---|---|---|
EXT-AUTH-18 | A | Authority configuration data model |
Each authority is defined like this:
Authority pretty-name, e.g. "URZ"
Authentication Driver, e.g. "RADIUS". In practice, this would be a reference to a service contract implementation.
Authentication Driver configuration settings, e.g. host name, port, etc., as required by the particular driver. Note that @@ -116,7 +116,7 @@ the "local" authority, meaning we'll authenticate as normal using the local users table. This will, just like any other authority, be implemetned using a service contract.
Feature | Status | Description |
---|---|---|
EXT-AUTH-28 | A | Create service contract for Batch Sync. |
EXT-AUTH-38 | A | Batch User Synchronization API |
EXT-AUTH-38 | A | IMS Synchronization driver |
EXT-AUTH-08 | A | Automation of batch Synchronization |
EXT-AUTH-15 | B | On-demand syncronization |
Regardless of the login method, the user needs to have a row +and Linking Users
Feature | Status | Description |
---|---|---|
EXT-AUTH-28 | A | Create service contract for Batch Sync. |
EXT-AUTH-38 | A | Batch User Synchronization API |
EXT-AUTH-38 | A | IMS Synchronization driver |
EXT-AUTH-08 | A | Automation of batch Synchronization |
EXT-AUTH-15 | B | On-demand syncronization |
Regardless of the login method, the user needs to have a row in the OpenACS users table. This can happen through a batch job, in real-time, or both in combination. We use the IMS Enterprise 1.1 specification.
Batch job means that we do a synchronization (import new users, modify changed, purge deleted) on a regular interval, e.g. @@ -145,7 +145,7 @@ authorities, and we can record that this is the same person. We'd still have a problem if there was an email conflict between two accounts on the same authority. Hm. I don't think it's worth spending too much -time trying to solve this problem through software.
Feature | Status | Description |
---|---|---|
EXT-AUTH-31 | A | Upgrade user data model for ext-auth |
After having authenticated using the relevant authority driver, +time trying to solve this problem through software.
Feature | Status | Description |
---|---|---|
EXT-AUTH-31 | A | Upgrade user data model for ext-auth |
After having authenticated using the relevant authority driver, we'll look for the username/authority pair in the users table.
If we don't find any, that means that we're either not doing batch synchronizing, or that the user has been added since the last sync. In that case, we'll try to do a real-time synchronization, if @@ -156,7 +156,7 @@ isn't yet available, and the driver will supply a message for us, which could say "The account should be available tomorrow. If not, contact X."
If a user doesn't have an account, the site-wide configuration can allow the user to register for one, as defined in the configuration discussed above. This section is about normal account registration through a authority driver.
The account creation service contract implementation will @@ -173,32 +173,32 @@ provided, which will create a new OpenACS user, and, in addition to the default local account creation above, also store the password in hashed form.
Password management is about changing password, retrieving password, and resetting password.
It's up to the authority driver implementation to decide whether to support any or all of these features, and to say so using the CanXXX methods (see driver API below).
Additionally, the authority can be configured with a URL to redirect to in the case of forgotten passwords, or when the user desires to change password.
Feature | Status | Description |
---|---|---|
EXT-AUTH-20 | A | Login over HTTPS |
Login pages must be able to be sent over a secure connection +HTTPS
Feature | Status | Description |
---|---|---|
EXT-AUTH-20 | A | Login over HTTPS |
Login pages must be able to be sent over a secure connection (https), so your password won't get sent over the wire in cleartext, while leaving the rest of the site non-secure (http). I believe that this requires some (minor) changes to the current session handling code.
Email verification needs to be handled both at registration and at login.
In both cases, it'll be handled by the driver sending automatically sending the email containing a link for the user to verify his account. Then the driver will return an account status of "closed,temporary", and a message that says ""Check your inbox and click the link in the email".
OpenACS will have a page which receives the email verification, for use by local accounts. Other authorities will have to implement their own page, most likely on the authority's -own server.
There are a number of items which touch on external authentication and session management. And even though they're not directly linked to external authentication, I would recommend that we handle a number of them, either because they're important for security, or because it makes sense to fix them while we're messing with this part of the codebase anyway.
Feature | Status | Description |
---|---|---|
EXT-AUTH-33 | A | Untrusted Logins |
I like the idea of having multiple login levels:
Not logged in
Untrusted login: We'll show you un-sensitive personal content, but won't let you modify anything or see personal data. A normal login becomes untrusted after a certain amount of time, and the user will have to re-enter his/her password in order to gain @@ -223,19 +223,19 @@ example, we could let you browse publically available forums, and only when you want to post do you need to log in. This makes it even more feasible to have a more secure login expiration -setting.
By default, auth::require_login would +setting.
By default, auth::require_login
would
bounce to the login page if the user is only logged in at the
untrusted level. Only if you explicitly say
-auth::require_login -untrusted will we give you
+auth::require_login -untrusted
will we give you
the user_id of a user who's only logged in in untrusted
-mode.
Similarly, ad_conn user_id will continue +mode.
Similarly, ad_conn user_id
will continue
to return 0 (not logged in) when the user is only logged in
-untrusted, and we'll supply another variable, ad_conn
-untrusted_user_id, which wlll be set to the user_id for
+untrusted, and we'll supply another variable, ad_conn
+untrusted_user_id
, which wlll be set to the user_id for
all login levels.
This should ensure that we get full access to the new feature, while leaving all current code just as secure as it was before.
Feature | Status | Description |
---|---|---|
EXT-AUTH-34 | A | Expire Logins |
Currently, OpenACS is unusable in practice without persistent +Make Non-Persistent Login Work
Feature | Status | Description |
---|---|---|
EXT-AUTH-34 | A | Expire Logins |
Currently, OpenACS is unusable in practice without persistent login. The login will expire after just a few minutes of inactivity, and you'll get bounced to the login page where you have to enter both email and password again. Unacceptable in @@ -247,14 +247,14 @@ should be configurable and default to something reasonable like an hour or so.
This will require looking into and changing the design of the current session handling code.
Feature | Status | Description |
---|---|---|
EXT-AUTH-23 | Single sign-on |
Instead of redirecting to the login page, auth::require_login +Single-Sign-On
Feature | Status | Description |
---|---|---|
EXT-AUTH-23 | Single sign-on |
Instead of redirecting to the login page, auth::require_login can redirect to an authentication server, which can redirect back to a page that logs the user in. This should be very easy to implement.
Alternatively, if you want to combine this with fallback to OpenACS accounts, we would instead present the normal login screen, but put a button which says "Login using X", where X is the redirection-based external authority.
Feature | Status | Description |
---|---|---|
EXT-AUTH-22 | B | rewrite cookie handling |
Currently, if you've ever left a permanent login cookie on +Expire All Logins
Feature | Status | Description |
---|---|---|
EXT-AUTH-22 | B | rewrite cookie handling |
Currently, if you've ever left a permanent login cookie on someone elses machine, that person will be forever logged in until he/she explicitly logs out. You can change your password, you can do anything you want, but unless a logout is requested from that @@ -270,17 +270,17 @@ so we'll need to cache the secret token, or only check it when refreshing the session cookie, which, I believe, normally happens every 10 minutes or so.
Feature | Status | Description |
---|---|---|
EXT-AUTH-24 | A | Email on password change |
As an additional security measure, we should email the +Email account owner on password change
Feature | Status | Description |
---|---|---|
EXT-AUTH-24 | A | Email on password change |
As an additional security measure, we should email the account's email address whenever the password is changed, so that he/she is at least alerted to the fact.
Feature | Status | Description |
---|---|---|
EXT-AUTH-25 | A | Implement password policy |
Again, to increase security, we should add password policies, +Password policy
Feature | Status | Description |
---|---|---|
EXT-AUTH-25 | A | Implement password policy |
Again, to increase security, we should add password policies, such as passwords needing to be changed after a certain number of days, change on next login (after a new random password has been generated), or requiring that the password satisfies certain complexity rules, i.e. both upper and lowercase characters, numbers, special chars, etc.
It would good to extend the current maximum password length from 10 to at least 32 characters.
Feature | Status | Description |
---|---|---|
EXT-AUTH-26 | B | Login without explicit domain |
In order to make it easier for people, we've been toying with +Login Without Explicit Authority
Feature | Status | Description |
---|---|---|
EXT-AUTH-26 | B | Login without explicit domain |
In order to make it easier for people, we've been toying with the idea of a functionality like this:
If the user enters "foobar@ix.urz.uni-heidelberg.de", it is translated to mean username = "foobar", authority = "ix.urz.uni-heidelberg.de".
If the user enters "foobar", it's recognized to not @@ -305,7 +305,7 @@ # username will now contain username # authority will now contain authority
Feature | Status | Description |
---|---|---|
EXT-AUTH-27 | B | Who's online list |
While we're touching the session handling code, anyway, it +Online
Feature | Status | Description |
---|---|---|
EXT-AUTH-27 | B | Who's online list |
While we're touching the session handling code, anyway, it would be nice to add a feature to show who's currently online, a nice real-time collaboration feature frequently requested by members of the community. This is particularly interesting when @@ -318,12 +318,12 @@ a link to a real-time chat service like Jabber.
We've already made the changes necessary to security-procs.tcl to do this on an earlier project, but haven't quite finished the work and put it back into the tree.
Feature | Status | Description |
---|---|---|
EXT-AUTH-28 | implement subsite-level config |
If we want to, we could let subsite administrators configure +Subsite-level configuration
Feature | Status | Description |
---|---|---|
EXT-AUTH-28 | implement subsite-level config |
If we want to, we could let subsite administrators configure the login process for that particular subsite. This would probably only entail letting the subsite admin leave out certain authorities defined site-wide, and change the sort order.
I think we should leave this out until we have a use case for it, someone who'd need it.
Feature | Status | Description |
---|---|---|
EXT-AUTH-32 | A | Parameters for Service Contract Implementation |
EXT-AUTH-35 | A | Make the Authentication API a service contract |
For completely free-form authentication logic and mechanisms, +Making the Authentication API itself a service contract
Feature | Status | Description |
---|---|---|
EXT-AUTH-32 | A | Parameters for Service Contract Implementation |
EXT-AUTH-35 | A | Make the Authentication API a service contract |
For completely free-form authentication logic and mechanisms, something like Andrew Grumet's Pluggable Authentication for OACS Draft is interesting. He's @@ -334,10 +334,10 @@ people are going to want to use a username/password-based scheme, and having easy configuration through a web UI is more important than total flexibility at this point.
Besides, we can always do this in the future, by letting the
-public Authentication API (auth::require_login
-and auth::authenticate) be implemented through a
+public Authentication API (auth::require_login
+and auth::authenticate
) be implemented through a
service contract.
Feature | Status | Description |
---|---|---|
EXT-AUTH-36 | A | Authenticate against multiple servers |
Both OKI and OpenACS supports a form of stacking, where you +Authenticating against multiple servers simultaneously
Feature | Status | Description |
---|---|---|
EXT-AUTH-36 | A | Authenticate against multiple servers |
Both OKI and OpenACS supports a form of stacking, where you can be logged into multiple authorities at the same time. This is useful if, for example, you need to get login tokens such as Kerberos tickets for access to shared resources.
I can see the value in this, but for simplicity's sake, I'm @@ -351,15 +351,15 @@ etc. But at the moment, we don't have any users of such things that are ready. We have some who are on the steps, but let's wait till they're there.
Feature | Status | Description |
---|---|---|
EXT-AUTH-09 | A | Create Auth. drivers for Local Authority |
EXT-AUTH-10 | A | Create Acct. Creation driver for Local Authority |
EXT-AUTH-11 | A | Create Auth. driver for PAM |
EXT-AUTH-12 | X | Create Acct. Creation driver for PAM - this - functionality is explicitly excluded from PAM |
EXT-AUTH-13 | A | Create Acct. Creation driver for LDAP |
EXT-AUTH-14 | A | Create Auth. driver for LDAP |
We'll need drivers for:
Operating system (Linux/Solaris) PAM: Delegate to the +Specific Drivers
Feature | Status | Description |
---|---|---|
EXT-AUTH-09 | A | Create Auth. drivers for Local Authority |
EXT-AUTH-10 | A | Create Acct. Creation driver for Local Authority |
EXT-AUTH-11 | A | Create Auth. driver for PAM |
EXT-AUTH-12 | X | Create Acct. Creation driver for PAM - this + functionality is explicitly excluded from PAM |
EXT-AUTH-13 | A | Create Acct. Creation driver for LDAP |
EXT-AUTH-14 | A | Create Auth. driver for LDAP |
We'll need drivers for:
Operating system (Linux/Solaris) PAM: Delegate to the operating system, which can then talk to RADIUS, LDAP, whatever. This is convenient because there'll be plenty of drivers for the OS PAM level, so we don't have to write them all ourselves. The downside is that we can't do things like account creation, password management, real-time account synchronization, etc., not supported by PAM (I'm not entirely sure what is and is not - supported).
RADIUS
LDAP
RADIUS is a simple username/password-type authentication server.
It also supports sending a challenge to which the user must respond with the proper answer (e.g. mother's maiden name, or could be additional password), but we will not support this @@ -368,12 +368,12 @@ in Python can be found in the exUserFolder module for Zope -(documentation).
We'd really appreciate feedback on this proposal. Please +(documentation).
We'd really appreciate feedback on this proposal. Please follow up at this -openacs.org forums thread.
Threads and links collected by Carl Blesius.
Draft Proposal by Andrew Grumet.
Yale CAS, a centrl authentication service a' la - Passport.
Document Revision # | Action Taken, Notes | When? | By Whom? |
1 | Updated work-in-progress for consortium-sponsored ext-auth work at Collaboraid. | 20 Aug 2003 | Joel Aufrecht |