RFCs are a way for Atlassian to share what we’re working on with our valued developer community.
It’s a document for building shared understanding of a topic. It expresses a technical solution, but can also communicate how it should be built or even document standards. The most important aspect of an RFC is that a written specification facilitates feedback and drives consensus. It is not a tool for approving or committing to ideas, but more so a collaborative practice to shape an idea and to find serious flaws early.
Please respect our community guidelines : keep it welcoming and safe by commenting on the idea not the people (especially the author); keep it tidy by keeping on topic; empower the community by keeping comments constructive. Thanks!
Summary of Project
We plan to block Guest users from using/interacting with an app for most UI-heavy modules as a security measure to prevent apps from accidentally leaking information to Guest users who are limited to access content within a single Confluence space.
- Publish : Apr 28, 2023
- Discuss : May 15, 2023
- Resolve : May 31, 2023
Problem
The Guest feature was released as a Beta in October 2022 and we are now preparing to make the feature generally available in mid July 2023. Standard+ Confluence Customers can add up to 5 free Guest users for every 1 Paid Seat. Guest users can be assigned to only 1 Confluence space and their permissions are limited to creating, editing, commenting, and viewing pages within that Confluence space. Guest users cannot view the user directory, mention other users, or create their own spaces. For more details about this feature, please read this announcement.
Guest users were able to use Apps for free in Beta. Why are we now deciding to block Guest users from using Apps?
During the Beta, we identified a potential data privacy concern where Guest users, who are given access to a single space in a Confluence instance, could potentially view and access information across any spaces using Apps. The main security issue is with Apps having more access than Guest users. When an App displays something on a page/space, it can get data from other spaces that it has access to (by using the app’s permission), and exposing that to Guest users. Apps are installed and priced for all users wall to wall within an instance and there’s no way today to:
- Limit licensing/usage of apps based on user role type
- Limit licensing/usage of apps based on Confluence Space
By allowing Guest users to use Apps and asking Partners to enforce checks on Guest permissions, we are subjecting our Customers to use the Guest feature at their own risk or not use the Guest feature at all.
Proposed Solution
User Experience
Guest users will not be able to see content rendered by some Connect Apps. Here’s what it will look like for Guests:
Impact on Connect Modules
We have prioritized blocking apps with the highest usage by Guests starting with Connect Apps.
Connect Modules - Guest Access Blocked
- Content Byline Items: Content byline items will not be shown to Guest users.
- Custom Content: Similar to content properties (mentioned below), apps will remain to be able to create, update, read and delete custom contents, including all API operations around it. There is a similar risk on apps storing confidential data within the body of the custom content, but this risk is the same as having any other content on a page or blogpost. UI components (view, edit and list) of the custom content will be blocked, as these components are general pages.
- Macros (Dynamic content macro and Static content macro): Macros will be blocked and won’t be shown to Guest users (see image above).
- Page: General pages will be blocked and won’t be shown to Guest users. Post-install pages and Configure pages will NOT be blocked, as these are only accessible to site admins and not Guest users
- Web Item, Web Panel, Web Section, Dialogs: All the web fragments and dialog UI elements will be blocked and won’t be displayed for Guest users. Publish condition’s dialog will handled differently and will not be blocked.
Connect Modules - Guest Access Enabled
- Blueprints: No change in behavior. Blueprints are app defined templates, and risk of accidentally exposing data here should be pretty low.
- Content Properties: Apps are still able to create, update, read and delete content properties, including all API operations. Guest users CAN access content properties via APIs, so there’s risk that if apps store confidential data in content properties, it may be easily accessible.
- Publish Conditions: Publish conditions will not be blocked, and behavior should remain the same. Publish conditions can also define a dialog URL, which, if defined, opens up a popup when “Publish” is clicked. The risk of accidentally exposing data here should be pretty minimal. Publish condition’s dialog will handled differently than the general Connect dialog as above, so publish condition’s dialog should not be blocked.
- Webhooks: There won’t be any change in behavior for webhooks. Apps will continue to receive webhook events even for operations done by Guest users.
Connect Modules - Guest Access Not Applicable
- Admin Page: Guest users are not able to access admin pages, so behavior will not change
- Space Tools Tab: Space Tools Tab will not be blocked, as Guest users shouldn’t have access to the space settings.
Impact on APIs
For the most part, APIs will not be affected, so any API calls that any users and apps can execute will remain the same, with the exception of a few cases:
- Any APIs that will generate a “view” of the macros will return a view that says “You don’t have access to see this content” (final copy pending). This includes getting the “view” or “export_view” of a page with a macro, body conversion APIs.
- A regular user, or an app calling the API for a regular user will get a response of the rendered macro. This means an iframe for dynamic ones, or rendered element from the app for static ones.
- For Guest users, the “rendered” macro will be blocked (see design above), and no calls to the app to render the macro will be executed.
- All other APIs will remain the same, and the same permission checks will still apply.
- For more reference on impact to APIs, see more details here.
Impact on Developer Experience
We believe most app developers will not need to make code changes to apps to support guest users. The only difference would be that Guest users wouldn’t be able to access their apps, especially the UI modules as defined above.
But there’d be special cases where apps may want to add some special handling for Guest users to handle them differently. More importantly, app may want to have additional control for Guest users.
As mentioned above, apps will continue to receive requests from Guest users in some cases, like webhooks, and apps may want to handle Guest users differently. For example, apps may want to completely ignore webhooks coming from Guest users, or for an app that sends notifications after receiving webhook events, they may not want to send notifications to Guest users. More information on how to recognize Guest users can be found here.
What kind of special handling would App Developers need to consider to handle Guest users?
Apps can have insights on the whether the user calling their apps are Guest users or not. More details here. Apps can use this information to decide whether or not they’d want to handle Guest users differently
How might App Developers easily determine impact for their own apps?
Review the Impact on APIs and Impact on Connect Modules sections above and cross-reference them with your app architecture to determine whether changes are necessary to gracefully handle guest users.
How might App Developers prevent scenarios that pose data privacy risks for Guests?
- Check which user is currently logged in and whether that user has the Guest role
- Ensure that if your app is storing data it is not leaking data across multiple spaces for Guests.
- Ensure your app is only accessing and rendering information from the current space that the Guest is in.
Actions
Known Issues around Broken App Experiences
Apps that need the UI module as part of the whole app experience
These will be apps that will have a broken experience if we block a certain part of the experience. An example is the Confluence Slack app using the General Page UI module to do the OAuth dance. A Confluence link may be pasted to Slack, and it’ll ask the Guest user to authenticate, which they’ll be redirected to a general page. But since we’re blocking general pages, they wouldn’t be able to authenticate.
Another example of apps that might get affected are apps doing document control, where page approval and status are done through content bylines.
Apps that track analytics and usages
Some apps uses analytics tracking by adding “hidden” code in footers or headers (web panels). Since web panels will be blocked, the analytics code also won’t be executed.
Request for Feedback
- How might we improve the blocking experience?
- Can you identify other modules or areas where your app could show data to a Guest user that we haven’t considered?
- Is the information provided sufficient? Do you need additional information to programmatically identify the impact of this change?