Authorization solution proposal #241
Replies: 3 comments 5 replies
-
Discussed this with @karlpauls on Tuesday. I think it's important for the content source to provide a header like When no When an This way an attacker cannot perform a DOS attack against a content source that has previewed, but unpublished content to evade successful authorization. |
Beta Was this translation helpful? Give feedback.
-
this could be configured in the config service, something like:
but in general, what you describe is a way to authorize operations via a (preflight) request. similar to https://www.openpolicyagent.org/ |
Beta Was this translation helpful? Give feedback.
-
I want to follow up on this (cc @trieloff @tripodsan @karlpauls @sukamat @davidnuescheler) After thinking through the implications, DA does not want to be in the critical path of publishing. At least not today. This means we will fall back to the original proposal where DA authorizations would only affect DA & Preview. Fine-grained preview permission can still be achieved by the token + the path Helix sends to us. From an embargoed content perspective, my hope is that we can use other means (Floodgate on adobe.com, Snapshots everywhere else) to achieve the publish protections we require. To walk through this, but not fully baked:
adobe.com will follow different flows until further notice... using Floodgate or graybox envs, and I think this is fine. My hope is that through DA, versions, and snapshots, we have a path to remove the need for these custom tools, but this is a much larger task. |
Beta Was this translation helpful? Give feedback.
-
Context
As of today, DA & Helix do not offer fine-grained authorization. If you can perform an action, you can perform that action across the entire content tree.
DA takes this simplicity to another level: if you have access to a project, you can read, write, edit, destroy, etc.
Existing CMSes (SharePoint, Google Drive, AEM, etc.) provide affordances to prevent certain users from performing certain tasks. This is combined with path-based access control. They also provide "locking" affordances
To work around Helix's lack of path-based preview / publish control, Milo implemented a gating feature. It uses a spreadsheet lookup to determine path, user, group, and time. The gist is: while Milo cannot change AEM Admin API behavior, it can disable preview and publish buttons across the various UIs.
Proposal
I believe a sheet-based approach to ACL is the right approach. Storing this information w/ the resource (AEM-style) creates maintainability problems. From a performance perspective, with a resource-based approach, we would have to traverse up a tree to determine the lowest ACL that applies. This is non-ideal.
With a sheet based approach, we effectively get an index for free while also providing a birds eye view of all access control. When a user initiates an action, we have the sheet in cache (live, admin, collab, content) and can look up the permission quickly.
If we pair this with a timing column we can prevent actions during specific periods of time. This could be during earnings calls or other high profile restricted change periods.
Helix
In doing the above, we are able to provide a path to fine-grained authorization against preview actions. When Helix requests our content (content.da.live) they can provide the same user authorization token back to us, we can get the user, read the sheet, and determine if we should respond with a 401 / 403 or 200.
The publish action would possibly require more work. As of this writing, Helix does not ask / notify the source content provider of this action. In theory, you may have embargoed content that is OK to preview, but not OK to publish. The current proposal is to have Helix supply a
X-Intent: preview|publish
(credit: @trieloff) header to DA and it can respond with 401 / 403 or 100.Beta Was this translation helpful? Give feedback.
All reactions