Re: Portlet security

2001-02-26 Thread Santiago Gala

[EMAIL PROTECTED] wrote:

 
 
 I don't think Java 2 would really fit our needs. Currently, Java 2 provides
 code-source based access controls (access controls based on where the code
 originated from and who signed the code), but it lacks the ability to
 additionally enforce access controls based on who runs the code.

That is true. You get this with JAAS standard extension. Your previous sentence
reminded me of the Pistoia book, who says (page 670):

"The Java 2 SDK provides a mean to enforce access controls based on 
*where code came from* and *who signed it*. The need for such access controls 
derives from the distributed nature of the Java platform, where , for instance, a
remote applet may be downloaded over a public network and then run locally.

"The Java 2 SDK, however, still lacks the means to enforce similar access 
controls based on *who runs the code*. To provide this type of access control,
the security architecture of the Java 2 SDK requires additional support for 
authentication (determining who's actually running the code), and requires
extensions to the existing authorization components to enforce new access 
controls based on who was authenticated.

"The Java Authentication and Authorization Service (JAAS)(see 
http://java.sun.com/security/jaas/) extends the
security architecture, providing mechanisms to authenticate subjects, execute 
code on behalf of subjects, and grant permissions to subjects. The result is
that access control policies can be based on both what code is being 
executed and who is executing that code.

(IBM Java 2 Network Security, Prentice Hall)

 
 We need to protect portlet instances based on the identity of the user from
 whom a request to display them or perform other actions on them originates.
 There may be lots of portlet instances that share the same portlet code and
 can have different customizations for different users.

That is precisely my point. We should use code in java.security. to ensure that the
Principal on behalf of which the request is being run has the right permissions to run
the code. Or, we may need to use doPrivileged() to ensure that actions can be performed
even if the portlet code executes with less privileges than Jetspeed code itself.

There is plenty of code there for doing these things, and it would be a pain to
reimplement it, specially since I seriously doubt that we can do a better
job that they have already done. I point specifically to the Principal and Group 
implementations, and also to java.security.acl.Owner, java.security.acl.ACL.

In JAAS, the classes in javax.security.auth.* could be useful again.


 
 I think the right thing to do is to specify an interface in JetSpeed that
 defines what we need and let the PortletInvoker use this interface. This
 will allow to plug whatever seems appropriate to a portal implementer - be
 it JAAS or some code that directly uses a policy database or policy files
 (see Figure below).
 
 +-+-+-+   +-+
 | Portlet | Portlet | Portlet |...| Portlet |  ++
 +-+-+-+---+-+  | Portlet Access |
 |   Portlet Invoker |-| Control I/F|
 +-+---+-+  ++
 | Aggregation | Customization | Other Views |  |
 +-+---+-+  v
++
   +| Access Control |
   ||Provider|
  +|++
  |++
  ++
 
 The portlet access control interface in JetSpeed needs to allow the
 PortletInvoker to find out whether a given Subject (User) may perform a
 given Action (display, edit, config, ...) on a given Object (Portlet).
 
 Using the Turbine groups, roles, permissions etc to determine whether the
 access is allowed is just one special case. Often, customers have their own
 user / group / access control management databases and tools, so often
 custom Access Control Providers will be required.
 Best regards,
 

The framework in Java 2 offers interfaces for doing this kind of things,
allowing easy integration in J2EE code.

What I'm trying to say is that we should not reinvent wheels. We have 
code for permissions, access control, privileged code, guarding (or sealing) 
objects, and the Principal interface for authentication purposes. (+ Subject and 
others in JAAS).

I just refer you to the example in tomcat 3.2 (jsp/security) to show how we already
have:

request.getUserPrincipal()
request.isUserInRole(String role)

already implemented, working and (supposedly) integrated in J2EE security (EJB 
containers, etc.)
This API is part of servlet 2.2, and I think we should build on top of 
it. Authentication 

Re: Portlet security

2001-02-26 Thread Steve Freeman

Santiago,

The problem is that the built-in code is per-process (read: per-JVM) and it
not the required per-thread which we need for Jetspeed.  So we couldn't use
the internal stuff without extending the Jetspeed code to do the ACL
checking.  Let me be *very* clear:  The Jetspeed code *must* initiate the
ACL processing.

JAAS allows you to plug in new auth mechanisms.  It still has the problem
as per the above statement.

Thomas,

I've looked into the built-in mechanisms for my own work.  The framework
consists of a set of interface classes.  Sun provides a default
implementation as the com.sun.* classes (I forget the rest of the naming,
it's been awhile).  Suffice it to say that the framework is very flexible
and will allow us to implement the security mechanisms as we see fit.  We
just need to plug in the right classes.

Steve



--
--
To subscribe:[EMAIL PROTECTED]
To unsubscribe:  [EMAIL PROTECTED]
Search: http://www.mail-archive.com/jetspeed@list.working-dogs.com/
List Help?:  [EMAIL PROTECTED]




Re: Portlet security

2001-02-26 Thread SCHAECK




Santiago,

I agree that it is possible to implement the PortletAccessControl interface
based on JAAS, JAAS provides the Subject.doAs() method that allows to
execute code under the identity of a particular user (I know the details of
how to do this). There are cases and environments where it is more
advantageous to use an authorization mechanism other than JAAS.

The PortletAccessControl interface does not mean to reinvent things, it is
just to provide an abstraction of what the PortletInvoker needs (decision
whether a given user may perform a given action on a given portlet
instance) and allows pluggable implementations to meet this need.

+-+-+-+   +-+
| Portlet | Portlet | Portlet |...| Portlet |  ++
+-+-+-+---+-+  | Portlet Access |
|   Portlet Invoker |-| Control I/F|
+-+---+-+  ++
| Aggregation | Customization | Other Views |  |
+-+---+-+  v
 No-op ++
  Custom  +| Access Control |
   J2EE/JAAS +||Provider|
 ||++
 |++
 ++

The AccessControlProvider implementations can map the simple
checkPermission(user, action, portletInstanceID) call to JAAS/J2EE calls or
to other authorization mechanisms.

In a J2EE/JAAS provider, of course all the J2EE/JAAS functionality can be
used as you say.

For service projects, it should be possible to write custom
AccessControlProviders implementing the PortletAccessInterface which might
for example do database querys against the customer's policy databases;
that was the main reason to define the PortletAccessControl I/F.

Probably, there also should be a no-op implementation of the
PortletAccessControl interface that has a checkPermission method that
always returns true to avoid imposing the JAAS access control runtime and
configuration overhead on portals that only have public content.

Best regards,

Thomas

Thomas Schaeck
Portal Architect
IBM Pervasive Computing Division
Phone: +49-(0)7031-16-3479   Mobile: +49-(0)171-6928407   e-mail:
[EMAIL PROTECTED]   Fax: +49-(0)7031-16-4888
Address: IBM Deutschland Entwicklung GmbH, Schoenaicher Str. 220, 71032
Boeblingen, Germany

Santiago Gala wrote:

[EMAIL PROTECTED] wrote:



 I don't think Java 2 would really fit our needs. Currently, Java 2
provides
 code-source based access controls (access controls based on where the
code
 originated from and who signed the code), but it lacks the ability to
 additionally enforce access controls based on who runs the code.

That is true. You get this with JAAS standard extension. Your previous
sentence
reminded me of the Pistoia book, who says (page 670):

"The Java 2 SDK provides a mean to enforce access controls based on
*where code came from* and *who signed it*. The need for such access
controls
derives from the distributed nature of the Java platform, where , for
instance, a
remote applet may be downloaded over a public network and then run locally.

"The Java 2 SDK, however, still lacks the means to enforce similar access
controls based on *who runs the code*. To provide this type of access
control,
the security architecture of the Java 2 SDK requires additional support for
authentication (determining who's actually running the code), and requires
extensions to the existing authorization components to enforce new access
controls based on who was authenticated.

"The Java Authentication and Authorization Service (JAAS)(see
http://java.sun.com/security/jaas/) extends the
security architecture, providing mechanisms to authenticate subjects,
execute
code on behalf of subjects, and grant permissions to subjects. The result
is
that access control policies can be based on both what code is being
executed and who is executing that code.

(IBM Java 2 Network Security, Prentice Hall)


 We need to protect portlet instances based on the identity of the user
from
 whom a request to display them or perform other actions on them
originates.
 There may be lots of portlet instances that share the same portlet code
and
 can have different customizations for different users.

That is precisely my point. We should use code in java.security. to ensure
that the
Principal on behalf of which the request is being run has the right
permissions to run
the code. Or, we may need to use doPrivileged() to ensure that actions can
be performed
even if the portlet code executes with less privileges than Jetspeed code
itself.

There is plenty of code there for doing these things, and it would be a
pain to
reimplement it, specially since I seriously doubt that we can do a better
job that they have 

Re: Portlet security

2001-02-26 Thread Santiago Gala

Steve Freeman escribi:
 
 Santiago,
 
 The problem is that the built-in code is per-process (read: per-JVM) and it
 not the required per-thread which we need for Jetspeed.  So we couldn't use
 the internal stuff without extending the Jetspeed code to do the ACL
 checking.  Let me be *very* clear:  The Jetspeed code *must* initiate the
 ACL processing.

If I understand correctly, it is because we need to act on behalf of a
different (Subject/Principal,younameit)
for each incoming request -- potentially new thread.


 
 JAAS allows you to plug in new auth mechanisms.  It still has the problem
 as per the above statement.

I think doAs() will work correctly, but I could be wrong. Still, JAAS
*requires* jdk1.3, and I don't think we can throw
away jdk1.2 compatibility yet. I noticed it today.


--
--
To subscribe:[EMAIL PROTECTED]
To unsubscribe:  [EMAIL PROTECTED]
Search: http://www.mail-archive.com/jetspeed@list.working-dogs.com/
List Help?:  [EMAIL PROTECTED]




Re: Portlet security

2001-02-26 Thread Santiago Gala

[EMAIL PROTECTED] wrote:

 
 
 Santiago,
 
 I agree that it is possible to implement the PortletAccessControl interface
 based on JAAS, JAAS provides the Subject.doAs() method that allows to
 execute code under the identity of a particular user (I know the details of
 how to do this). There are cases and environments where it is more
 advantageous to use an authorization mechanism other than JAAS.
 

I agree. And JAAS is not available in jdk1.2. But in some cases it can be the
simplest way to get authorization (if the Application Server uses it).

 The PortletAccessControl interface does not mean to reinvent things, it is
 just to provide an abstraction of what the PortletInvoker needs (decision
 whether a given user may perform a given action on a given portlet
 instance) and allows pluggable implementations to meet this need.
 

My concern was that the discussion looked like the whole Java security
framework was going to be ignored.
I agree that we will need to write those abstractions.I just felt concerned
about compatibility. Specially since we are running on top of a servlet
container, and we do not have full control of the VM.

 +-+-+-+   +-+
 | Portlet | Portlet | Portlet |...| Portlet |  ++
 +-+-+-+---+-+  | Portlet Access |
 |   Portlet Invoker |-| Control I/F|
 +-+---+-+  ++
 | Aggregation | Customization | Other Views |  |
 +-+---+-+  v
  No-op ++
   Custom  +| Access Control |
J2EE/JAAS +||Provider|
  ||++
  |++
  ++
 
 The AccessControlProvider implementations can map the simple
 checkPermission(user, action, portletInstanceID) call to JAAS/J2EE calls or
 to other authorization mechanisms.
 
 In a J2EE/JAAS provider, of course all the J2EE/JAAS functionality can be
 used as you say.
 

My whole point was to try to keep these interfaces as close as possible to 
java.security,
to avoid problems in the future. Specially when the abstractions are quite similar.

 For service projects, it should be possible to write custom
 AccessControlProviders implementing the PortletAccessInterface which might
 for example do database querys against the customer's policy databases;
 that was the main reason to define the PortletAccessControl I/F.
 
 Probably, there also should be a no-op implementation of the
 PortletAccessControl interface that has a checkPermission method that
 always returns true to avoid imposing the JAAS access control runtime and
 configuration overhead on portals that only have public content.
 

a NullPortletAcessController will be a very good thing for some implementations.

Also, a Controller that runs on top of whatever servlet engine authentication, using 
just
request.getUserPrincipal()
request.isUserInRole(),
plus configuration info (container and Jetspeed), looks like a reasonable alternative.

J2EE/JAAS will be needed for some other implementations.

I repeat that I was feeling concerned because nobody had expressed that we would look 
at the
java/javax. apis, not that I think that we should do everything just with them.

Regards,
Santiago



--
--
To subscribe:[EMAIL PROTECTED]
To unsubscribe:  [EMAIL PROTECTED]
Search: http://www.mail-archive.com/jetspeed@list.working-dogs.com/
List Help?:  [EMAIL PROTECTED]




Re: Portlet security

2001-02-24 Thread SCHAECK




I don't think Java 2 would really fit our needs. Currently, Java 2 provides
code-source based access controls (access controls based on where the code
originated from and who signed the code), but it lacks the ability to
additionally enforce access controls based on who runs the code.

We need to protect portlet instances based on the identity of the user from
whom a request to display them or perform other actions on them originates.
There may be lots of portlet instances that share the same portlet code and
can have different customizations for different users.

I think the right thing to do is to specify an interface in JetSpeed that
defines what we need and let the PortletInvoker use this interface. This
will allow to plug whatever seems appropriate to a portal implementer - be
it JAAS or some code that directly uses a policy database or policy files
(see Figure below).

+-+-+-+   +-+
| Portlet | Portlet | Portlet |...| Portlet |  ++
+-+-+-+---+-+  | Portlet Access |
|   Portlet Invoker |-| Control I/F|
+-+---+-+  ++
| Aggregation | Customization | Other Views |  |
+-+---+-+  v
   ++
  +| Access Control |
  ||Provider|
 +|++
 |++
 ++

The portlet access control interface in JetSpeed needs to allow the
PortletInvoker to find out whether a given Subject (User) may perform a
given Action (display, edit, config, ...) on a given Object (Portlet).

Using the Turbine groups, roles, permissions etc to determine whether the
access is allowed is just one special case. Often, customers have their own
user / group / access control management databases and tools, so often
custom Access Control Providers will be required.
Best regards,

Thomas

Thomas Schaeck
Portal Architect
IBM Pervasive Computing Division
Phone: +49-(0)7031-16-3479   Mobile: +49-(0)171-6928407   e-mail:
[EMAIL PROTECTED]   Fax: +49-(0)7031-16-4888
Address: IBM Deutschland Entwicklung GmbH, Schoenaicher Str. 220, 71032
Boeblingen, Germany

Santiago Gala wrote:

--

Jon Stevens wrote:

 on 2/22/01 4:17 PM, "Santiago Gala" [EMAIL PROTECTED] wrote:


 All of the java.security.* framework is interface based.


 So is Turbine's.

 I really don't see a need to use java.security.* when Turbine has a
*MUCH*
 more complete implementation of a security framework than just
 java.security.

 -1 on java.security.*


The need to use java.security framework comes from:

- being able to reuse security support very well studied and engineered
(java.policy, doPrivileged(), checkPermission() ) inside the VM and get
fine grained support for cehcking permissions or specifying privileged
actions.
The java code is already there. It is a matter of using it. Now that java2
is our target,
the effort is more than justified.

- being able to integrate in J2EE framework servlet containers simply (EJB,
JDBC, ...)

- being able to integrate in a given corporate environment.
java.security.Principal is
the standard way to deliver privileges. I think TurbineUser should
implement Principal.


- surviving in a securityManaged servlet container. As an example of this,
the admin portlet in Jetspeed will throw a SecurityException if standard
security
is on (ReadPropertyPermission on). It the turbine framework is based on
these objects,
it will get cached in the proper level and treated as a security exception.
If not,
it will be processed as a standard error. Also, the thread pool will have
problems with calls
trying to set thread priority or stopping threads.
I'm not saying that you drop turbine security. I agree it is cood (nice
typo=cool+good :). What I'm saying is that turbine should use the
interfaces and methods there, for instance as a way to handle users (
java.security.Principal user.getPrincipal() ) or as a way to check for
permissions (doPrivileged() and checkPermission() ). Also that we use
the standard exceptions for security based exceptions, so that try-catch
is simpler to program and we can survive when a SecurityManager is in
effect in the servlet container.

Don't you think that ignoring java security will bring problems in the
future?



--
--
To subscribe:[EMAIL PROTECTED]
To unsubscribe:  [EMAIL PROTECTED]
Search: http://www.mail-archive.com/jetspeed@list.working-dogs.com/
List Help?:  [EMAIL PROTECTED]






--
--
To subscribe:[EMAIL PROTECTED]
To 

Re: Portlet security

2001-02-24 Thread Jon Stevens

on 2/24/01 6:45 AM, "[EMAIL PROTECTED]" [EMAIL PROTECTED] wrote:

 Using the Turbine groups, roles, permissions etc to determine whether the
 access is allowed is just one special case. Often, customers have their own
 user / group / access control management databases and tools, so often
 custom Access Control Providers will be required.
 Best regards,

That is why Turbine's is interfaced based and pluggable (ie: factory based).
You can easily provide your own back end implementations.

thanks,

-jon


-- 
If you come from a Perl or PHP background, JSP is a way to take
your pain to new levels. --Anonymous
http://jakarta.apache.org/velocity/  http://java.apache.org/turbine/



--
--
To subscribe:[EMAIL PROTECTED]
To unsubscribe:  [EMAIL PROTECTED]
Search: http://www.mail-archive.com/jetspeed@list.working-dogs.com/
List Help?:  [EMAIL PROTECTED]




RE: Portlet security

2001-02-23 Thread SCHAECK





Craig Berry wrote:

  From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
  Sent: Thursday, February 22, 2001 6:18 AM
 
  We also have plans in this direction, I think we should agree
  on a common interface for what we do.

 Absolutely.  That's why I threw out a skeletal proposal for discussion.

  Some first thoughts on this topic ...
 
  I think there are actually two points where access control
  must be applied:
 
  - Customization - users should only be offered portlets that they are
  allowed to use
  - Access to portlets - before displaying a portlet or
  allowing to perform
  an action on it, the portal needs to check whether the user still has
  access rights
  In either case, the access decision should be obtained via the same
  interface.

 Definitely need both, yes.  That's what motivated my proposal of using
 getPortletSet as a filtering chokepoint, as anything using the portlets
 for any purpose will go through that API.

That's one of the relevant points, it would involve access control
in customization and display of portal pages which contain a set of
portlets.

However, this would not control access to portlets that does not
go through aggregation or customization, e.g. via the maximized
URL for a portlet.

Some initial ideas how this may work - I think we need something like
this in addition:

+-+-+-+   +-+
| Portlet | Portlet | Portlet |...| Portlet |  ++
+---+  | Access Control |
|Portlet Invoker|-| Check I/F  |
+-+---+-+  ++
| Aggregation | Customization | Other Views |
+-+---+-+

Every call to a portlet should go through an access control
component. That component may have methods like

public void service(PortletID id, String user/groupID,
PortletRequest portletReq,
PortletResponse portletRsp)

public void actionPerformed(PortletID id, String user/groupID,
ActionEvent actionEvent)

...

etc. (Note that this is just for illustration, this is not
intended as a concrete proposal)

The PortletInvoker should make the required checks using the
access control interface for checking permissions and then
invoke portlets like this

portlet.service(portletReq, portletRsp)

actionPerformed(actionEvent)

...

if the permission check was successful.

All aggregation modules, customizers and other components in
JetSpeed should invoke portlets only through the portlet invoker.
This ensures that the invoker can always apply proper access
control checking, calling the currently configured service via the
JetSpeed access control interface.


 [snip]
  To accommodate usage of either store, JetSpeed should define
  an interface
  to check permissions, i.e. a call like
 
  checkPermission(user, portletID, action) or
  checkPermission(group, portletID, action)
 
  "action" may be something like display, edit, config, ...

 Makes sense.

  There should be pluggable services implementing this interface,
  e.g. one using settings in jetspeed.jcfg, one using a database,
  one using an authorization engine, etc. One option to implement the
  pluggable services would be Turbine Services, i.e. we would have
  Turbine Authorization Services that would be invoked through the
  JetSpeed Authorization Interface.

 I like the pluggable service model, and it should definitely be a
 Turbine service.

That would most likely be a service that would be pert of the
JetSpeed code base implementing the generic Turbine service
interface and adding the portlet access control methods defined
in the JetSpeed access control interface.


 --
 Craig Berry - (310) 570-4140
 VP Technology
 GlueCode
 1452 Second St
 Santa Monica CA 90401

Best regards,

Thomas

Thomas Schaeck
Portal Architect
IBM Pervasive Computing Division
Phone: +49-(0)7031-16-3479   Mobile: +49-(0)171-6928407   e-mail:
[EMAIL PROTECTED]   Fax: +49-(0)7031-16-4888
Address: IBM Deutschland Entwicklung GmbH, Schoenaicher Str. 220, 71032
Boeblingen, Germany




--
--
To subscribe:[EMAIL PROTECTED]
To unsubscribe:  [EMAIL PROTECTED]
Search: http://www.mail-archive.com/jetspeed@list.working-dogs.com/
List Help?:  [EMAIL PROTECTED]




Re: Portlet security

2001-02-23 Thread Santiago Gala

Jon Stevens wrote:

 on 2/22/01 4:17 PM, "Santiago Gala" [EMAIL PROTECTED] wrote:
 
 
 All of the java.security.* framework is interface based.
 
 
 So is Turbine's.
 
 I really don't see a need to use java.security.* when Turbine has a *MUCH*
 more complete implementation of a security framework than just
 java.security.
 
 -1 on java.security.*
 

The need to use java.security framework comes from:

- being able to reuse security support very well studied and engineered
(java.policy, doPrivileged(), checkPermission() ) inside the VM and get
fine grained support for cehcking permissions or specifying privileged actions.
The java code is already there. It is a matter of using it. Now that java2 is our 
target,
the effort is more than justified.

- being able to integrate in J2EE framework servlet containers simply (EJB, JDBC, ...)

- being able to integrate in a given corporate environment. java.security.Principal is 
the standard way to deliver privileges. I think TurbineUser should implement Principal.


- surviving in a securityManaged servlet container. As an example of this,
the admin portlet in Jetspeed will throw a SecurityException if standard security
is on (ReadPropertyPermission on). It the turbine framework is based on these objects,
it will get cached in the proper level and treated as a security exception. If not,
it will be processed as a standard error. Also, the thread pool will have problems 
with calls
trying to set thread priority or stopping threads.
I'm not saying that you drop turbine security. I agree it is cood (nice 
typo=cool+good :). What I'm saying is that turbine should use the 
interfaces and methods there, for instance as a way to handle users ( 
java.security.Principal user.getPrincipal() ) or as a way to check for 
permissions (doPrivileged() and checkPermission() ). Also that we use 
the standard exceptions for security based exceptions, so that try-catch 
is simpler to program and we can survive when a SecurityManager is in 
effect in the servlet container.

Don't you think that ignoring java security will bring problems in the 
future?



--
--
To subscribe:[EMAIL PROTECTED]
To unsubscribe:  [EMAIL PROTECTED]
Search: http://www.mail-archive.com/jetspeed@list.working-dogs.com/
List Help?:  [EMAIL PROTECTED]




Re: Portlet security

2001-02-22 Thread SCHAECK




We also have plans in this direction, I think we should agree on a common
interface for what we do.

Some first thoughts on this topic ...

I think there are actually two points where access control must be applied:

- Customization - users should only be offered portlets that they are
allowed to use
- Access to portlets - before displaying a portlet or allowing to perform
an action on it, the portal needs to check whether the user still has
access rights

In either case, the access decision should be obtained via the same
interface.

The latter is required to cover the case that a user has selected a portlet
some time ago, when he was allowed to use it but meanwhile an administrator
has revoked his access rights.

Putting the info in the jetspeed.jcfg file is one option. Other options are
putting this info in a database or in some kind of authoritzation engine ,
e.g. Policy Director or Siteminder.

To accommodate usage of either store, JetSpeed should define an interface
to check permissions, i.e. a call like

checkPermission(user, portletID, action) or
checkPermission(group, portletID, action)

"action" may be something like display, edit, config, ...

There should be pluggable services implementing this interface, e.g. one
using settings in jetspeed.jcfg, one using a database, one using an
authorization engine, etc. One option to implement the pluggable services
would be Turine Services, i.e. we would have Turbine Authorization Services
that would be invoked through the JetSpeed Authorization Interface.

Best regards,

Thomas

Thomas Schaeck
Portal Architect
IBM Pervasive Computing Division
Phone: +49-(0)7031-16-3479   Mobile: +49-(0)171-6928407   e-mail:
[EMAIL PROTECTED]   Fax: +49-(0)7031-16-4888
Address: IBM Deutschland Entwicklung GmbH, Schoenaicher Str. 220, 71032
Boeblingen, Germany


The GlueCode team is preparing to pursue portlet-level security for
Jetspeed -- that is, the ability to make portlets visible to only
certain users.  Of course, we want to build this on the existing Turbine
group/role/permission scheme.

Our initial thought is that adding attributes in jetspeed-config.jcfg of
roughly this form

  viewable-by group="foo" role="bar" perm="baz" /

would be a good way to encode the permissions.  In the absence of any
such attributes, the default would be viewable by all.

A reasonable "choke point" at which to limit access to portlets would
appear to be PortletConfig.getPortletSet().  The set returned could be
filtered to remove portlets for which the user does not have permission.
This would suffice to control access both to portlets on the portal
page, and listing of portlets on the customization page (which we're
working to extend, by the way).

Thoughts on this approach, please?

--
Craig Berry - (310) 570-4140
VP Technology
GlueCode
1452 Second St
Santa Monica CA 90401



--
--
To subscribe:[EMAIL PROTECTED]
To unsubscribe:  [EMAIL PROTECTED]
Search: http://www.mail-archive.com/jetspeed@list.working-dogs.com/
List Help?:  [EMAIL PROTECTED]






--
--
To subscribe:[EMAIL PROTECTED]
To unsubscribe:  [EMAIL PROTECTED]
Search: http://www.mail-archive.com/jetspeed@list.working-dogs.com/
List Help?:  [EMAIL PROTECTED]




RE: Portlet security

2001-02-22 Thread Brekke, Jeff

There was a proposal in the cvs tree at one time, don't know if enough has
changed to make it invalid, but integration
with turbine's security model was in there...

 -Original Message-
 From: Craig Berry [mailto:[EMAIL PROTECTED]]
 Sent: Wednesday, February 21, 2001 11:20 AM
 To: Jetspeed Mailing List (E-mail)
 Subject: Portlet security
 
 
 The GlueCode team is preparing to pursue portlet-level security for
 Jetspeed -- that is, the ability to make portlets visible to only
 certain users.  Of course, we want to build this on the 
 existing Turbine
 group/role/permission scheme.
 
 Our initial thought is that adding attributes in 
 jetspeed-config.jcfg of
 roughly this form
 
   viewable-by group="foo" role="bar" perm="baz" /
 
 would be a good way to encode the permissions.  In the absence of any
 such attributes, the default would be viewable by all.
 
 A reasonable "choke point" at which to limit access to portlets would
 appear to be PortletConfig.getPortletSet().  The set returned could be
 filtered to remove portlets for which the user does not have 
 permission.
 This would suffice to control access both to portlets on the portal
 page, and listing of portlets on the customization page (which we're
 working to extend, by the way).
 
 Thoughts on this approach, please?
 
 -- 
 Craig Berry - (310) 570-4140
 VP Technology
 GlueCode
 1452 Second St
 Santa Monica CA 90401
 
 
 
 --
 --
 To subscribe:[EMAIL PROTECTED]
 To unsubscribe:  [EMAIL PROTECTED]
 Search: http://www.mail-archive.com/jetspeed@list.working-dogs.com/
 List Help?:  [EMAIL PROTECTED]
 


---

This message has been scanned for viruses with Trend Micro's Interscan VirusWall.


--
--
To subscribe:[EMAIL PROTECTED]
To unsubscribe:  [EMAIL PROTECTED]
Search: http://www.mail-archive.com/jetspeed@list.working-dogs.com/
List Help?:  [EMAIL PROTECTED]




Re: Portlet security

2001-02-22 Thread Santiago Gala

[EMAIL PROTECTED] wrote:

 
 
 We also have plans in this direction, I think we should agree on a common
 interface for what we do.
 
 Some first thoughts on this topic ...
 
 I think there are actually two points where access control must be applied:
 
 - Customization - users should only be offered portlets that they are
 allowed to use
 - Access to portlets - before displaying a portlet or allowing to perform
 an action on it, the portal needs to check whether the user still has
 access rights
 
 In either case, the access decision should be obtained via the same
 interface.
 
 The latter is required to cover the case that a user has selected a portlet
 some time ago, when he was allowed to use it but meanwhile an administrator
 has revoked his access rights.
 
 Putting the info in the jetspeed.jcfg file is one option. Other options are
 putting this info in a database or in some kind of authoritzation engine ,
 e.g. Policy Director or Siteminder.
 
 To accommodate usage of either store, JetSpeed should define an interface
 to check permissions, i.e. a call like
 
 checkPermission(user, portletID, action) or
 checkPermission(group, portletID, action)
 
 "action" may be something like display, edit, config, ...
 

We could use java.security.Permission (in general all of the java.security.* 
framework).

We could write
org.apache.jetspeed.security.DisplayPermission,
org.apache.jetspeed.security.EditPermission,
org.apache.jetspeed.security.XXXPermission,...


This should be integratable with Turbine now, and with any java enterprise 
application, allowing
code like the following (in tomcat/examples/jsp/security) to be gracefully extended by
turbine/jetspeed.

--- (from tomcat examples)
You are logged in as remote user b%= request.getRemoteUser() %/bbrbr

%
  if (request.getUserPrincipal() != null) {
%
Your user principal name is b%= request.getUserPrincipal().getName() %/bbrbr
%
  } else {
%
No user principal could be identified.
%
  }
%
(...) including roles and acl.



 There should be pluggable services implementing this interface, e.g. one
 using settings in jetspeed.jcfg, one using a database, one using an
 authorization engine, etc. One option to implement the pluggable services
 would be Turine Services, i.e. we would have Turbine Authorization Services
 that would be invoked through the JetSpeed Authorization Interface.
 

All of the java.security.* framework is interface based.



--
--
To subscribe:[EMAIL PROTECTED]
To unsubscribe:  [EMAIL PROTECTED]
Search: http://www.mail-archive.com/jetspeed@list.working-dogs.com/
List Help?:  [EMAIL PROTECTED]




RE: Portlet security

2001-02-22 Thread David Sean Taylor

You can find the other security proposal in the build:

/jetspeed/proposals/0004.txt


   viewable-by group="foo" role="bar" perm="baz" /

is this permission under the portlet definition?
I believe it would be better to use an ACL approach, to represent the
permission association between the portlet and role, and decouple the
security def. from the portlet def.
Look at the Turbine schema, the TURBINE_ROLE_PERMISSION table.

Once the new architecture is formalised, we can identify entities needing
security, possibly  portlets, panes, templates.
Turbine already gives us users, groups and roles.
I was working on security wrt psml files. Will psml files be around in the
next release? :)


 To accommodate usage of either store, JetSpeed should define an interface
 to check permissions, i.e. a call like

 checkPermission(user, portletID, action) or
 checkPermission(group, portletID, action)


Turbine already does a lot of the work for you wrt users and groups:

@see
turbine.util.security.AccessControlList
turbine.util.SecurityCheck
turbine.util.TemplateSecurityCheck

From rundata, you can make checks like this:

data.getACL().hasPermission(permission)

or use the utility classes

 There should be pluggable services implementing this interface, e.g. one

 using settings in jetspeed.jcfg, one using a database, one using an
 authorization engine, etc. One option to implement the pluggable services
 would be Turine Services, i.e. we would have Turbine
 Authorization Services
 that would be invoked through the JetSpeed Authorization Interface.


I like that (authorization service)
I like making use of the role-permission approach already defined in
Turbine.
The problem is that portlets and other jetspeed objects are stored in a JCFG
registry, where users and groups are defined in the database.
I know its very easy to edit the JCFG file, but mine is getting very large
and unmanageable.
Plus I have multiple configurations

Has anyone ever considered storing the registries in a database?
Using Torque, we could still define our object model in XML Schema, and
deploy to whatever JDBC datastore we want.
Im not sure if Torque can persist to XML files. My guess is that it always
needs to go thru a JDBC driver...








--
--
To subscribe:[EMAIL PROTECTED]
To unsubscribe:  [EMAIL PROTECTED]
Search: http://www.mail-archive.com/jetspeed@list.working-dogs.com/
List Help?:  [EMAIL PROTECTED]




Re: Portlet security

2001-02-22 Thread Jon Stevens

on 2/22/01 3:52 PM, "David Sean Taylor" [EMAIL PROTECTED]
wrote:

 Im not sure if Torque can persist to XML files. My guess is that it always
 needs to go thru a JDBC driver...

yup. the design is JDBC based persistence. saving out to a XML file doesn't
buy you anything since you can do that by having a JDBC-XML export.

-jon

-- 
If you come from a Perl or PHP background, JSP is a way to take
your pain to new levels. --Anonymous
http://jakarta.apache.org/velocity/  http://java.apache.org/turbine/



--
--
To subscribe:[EMAIL PROTECTED]
To unsubscribe:  [EMAIL PROTECTED]
Search: http://www.mail-archive.com/jetspeed@list.working-dogs.com/
List Help?:  [EMAIL PROTECTED]




Re: portlet - security proxy?

2000-10-25 Thread Anbunidhi Mahalingam

As of now,  we do not have the facility to check the credentials in the
portlet.  But it is in the proposal list in CVS.Please do check
http://www.working-dogs.com/jetspeed/cvsweb/index.cgi/jetspeed/docs/proposal

Though Turbine supports it is just for portal. Not for portlet.. So once the
proposal is implemented we can do it.


Anbunidhi Mahalingam




- Original Message -
From: "Ivanova, Jordanka" [EMAIL PROTECTED]
To: "'JetSpeed'" [EMAIL PROTECTED]
Sent: Tuesday, October 24, 2000 9:58 PM
Subject: portlet - security proxy?


 I am looking for information on how portlet can
 authenticate user for remote service using
 the same credentials that he/she logged with
 in the portal. Like a portlet that connects to
 email/web space site and retrieves the data
 given the password and id are identical with
 the portal's. If you have any links or info please
 email. Thanks,
 Dannie


 --
 --
 Please read the FAQ! http://java.apache.org/faq/
 To subscribe:[EMAIL PROTECTED]
 To unsubscribe:  [EMAIL PROTECTED]
 Archives and Other:  http://java.apache.org/main/mail.html
 Problems?:   [EMAIL PROTECTED]





--
--
Please read the FAQ! http://java.apache.org/faq/
To subscribe:[EMAIL PROTECTED]
To unsubscribe:  [EMAIL PROTECTED]
Archives and Other:  http://java.apache.org/main/mail.html
Problems?:   [EMAIL PROTECTED]