Hi Dick,

>>>Is this about the MM3 web interface?

No I’m working on a REST API proxy which uses JSON web token for authentication 
- sounds like SAML is somewhat similar but JSON based. Postorius/Hyperkitty 
provides an end user web interface to MM3. I’m not sure what mechanism they use 
for user authentication - maybe Mozilla Persona, which I think uses JSON web 
token anyway.

as



On 18 Feb 2015, at 10:45 am, Dick Visser <vis...@terena.org> wrote:

Hi Andrew

Is this about the MM3 web interface?
If so, I wonder if it could work with SAML authentication.
This can be done with PySAML2 (https://github.com/rohe/pysaml2), or in
an Apache module (mod_mellon).
The latter takes care of the authentication, and any web app protected
by it can rely on (for instance) REMOTE_USER always being available.


Thanks

Dick


On Sun, Feb 15, 2015 at 9:05 AM, Andrew Stuart
<andrew.stu...@supercoders.com.au> wrote:
> I’ve just finished (mostly) implementing most of the authentication, 
> authorization and permissions systems. Thought you might be interested in a 
> little on how it works.
> 
> To discuss this further I need to explain a few things - apologies to those 
> who i am teaching to suck eggs.
> 
> The auth server needs a few key subsystems to get the job done - 
> authorization, authentication and permissions.
> 
> AUTHENTICATION - this is the process of the end user identifying themselves 
> in the first place (in this case, by logging in with a username and 
> password), then for every request beyond that, providing evidence that they 
> are who they say they are - in this case, that’s done by giving them a token 
> when they log in successfully, then requiring that the token be returned 
> along with each subsequent request.
> 
> AUTHORIZATION - this is the process of determining if the authorized user is 
> allowed - according to the rules of our application - to access the resource 
> that they have requested. For example, user Jenny sends a request to access 
> the members of a list named supermaillingl...@marketingcompany.com. Before we 
> can execute that request we need to determine if she is *authorized* to do so.
> 
> PERMISSIONS - for the authorization process to do its job, it needs 
> information about WHO is allowed WHAT LEVEL OF ACCESS to WHICH RESOURCE. This 
> is the *permissions system*.  It’s VERY easy to understand. Nothing more to 
> it than a database table that looks like this
> user_id = Column(String, nullable=False)
> role = Column(String, nullable=False)
> resource_id = Column(String, nullable=False)
> resource_type = Column(Enum('list', 'domain', 'archive','server','domain', 
> name='resource_type'), nullable=False)
> 
> The permissions system is a small extension of the existing Mailman 
> permissions system.
> user_id = the Mailman user id
> role = one of ['domainowner', 'serverowner', 'userowner', 'listowner', 
> 'listmember', 'listmoderator']
> resource_type one of ['list', 'domain', 'archive','server',’domain']
> resource_id = Mailman list_id or Mailman domain or ‘server’ or ‘user'
> 
> So with four pieces of information you can define access for any user to any 
> Mailman resource. The permissions system is nothing more than a plain SQL 
> table with four columns, that’s all. The important thing is that it unifies 
> all Mailman resources into those four pieces of permission information.
> 
> Tying it all together - the auth proxy:
> 
> 1: receives an inbound HTTP API request
> 2: determines (from the token that came with the request) the authenticated 
> identity of the requesting user
> 3: determines (from the request URL/field params) which Mailman resource is 
> being requested (i.e. a list or a domain or something else)
> 4: determines (from the request URL/field params) the type of activity that 
> the requesting user wishs to carry out against that resource (create new, 
> delete, rename, for example)
> 5: asks the authorization process “is this user allowed to carry out this 
> type of activity against this resource?”
> 6: the authorization process has its own set of business rules for working 
> out if a particular user is allowed to carry out the requested activity 
> against the requested resource.  It uses the permissions table to work out if 
> user is allowed to access resource in the requested manner.
> 7: finally, if the authorisation process approves, then the request is 
> carried out.
> 
> Phew!
> 
> Any questions welcome. I’m hoping to have working code to show before Pycon.  
> I want to get it sufficiently complete such that it works when I first 
> release it.
> 
> 
> 
> _______________________________________________
> Mailman-Developers mailing list
> Mailman-Developers@python.org
> https://mail.python.org/mailman/listinfo/mailman-developers
> Mailman FAQ: http://wiki.list.org/x/AgA3
> Searchable Archives: 
> http://www.mail-archive.com/mailman-developers%40python.org/
> Unsubscribe: 
> https://mail.python.org/mailman/options/mailman-developers/visser%40terena.org
> 
> Security Policy: http://wiki.list.org/x/QIA9



-- 
Dick Visser
Sr. System & Networking Engineer
GÉANT Association, Amsterdam Office (formerly TERENA)
Singel 468D, 1017 AW Amsterdam, the Netherlands
Tel: +31 (0) 20 530 4488

GÉANT Association
Networking. Services. People.

Learn more at: http://www.géant.org

_______________________________________________
Mailman-Developers mailing list
Mailman-Developers@python.org
https://mail.python.org/mailman/listinfo/mailman-developers
Mailman FAQ: http://wiki.list.org/x/AgA3
Searchable Archives: 
http://www.mail-archive.com/mailman-developers%40python.org/
Unsubscribe: 
https://mail.python.org/mailman/options/mailman-developers/archive%40jab.org

Security Policy: http://wiki.list.org/x/QIA9

Reply via email to