Skip to content

input from Michael #12

Closed
Closed
@zenomt

Description

@zenomt

typical use case: the Pod's owner cares about what apps can access various locations in their Pod as the owner, and doesn't care about apps used by visitors (especially because visitors can lie).

any indication by an IdP (example: OpenID Provider) or in the user's profile about trust or desired permission limits would be at the discretion of the Resource Server (RS) to honor anyway. an IdP doesn't have standing to govern permissions in an unassociated RS. an enumeration of trusted applications and permissions in the user's profile would need to be publicly accessible in order to be used at an unassociated RS (unacceptable for privacy and security), and the current acl:trustedApp scheme doesn't solve the "access for just my chats" use case.

i propose the following:

  1. client attempts authenticated (webid + appid) access to a resource
  2. 403 Forbidden response
    • if appropriate, include request-permission URI (new link rel= or new header)
    • "appropriate" depends on resource server policy
      • maybe only when webid is the owner
      • maybe for special webids
      • maybe for anybody
    • request-permission URI includes enough information to recover webid, appid, method, and relevant portion of original URI (examples: stateless signed direct encoding, opaque key to DB record)
    • request-permission URI SHOULD only be valid for a limited time
  3. to request permission, POST to request-permission URI
    • auth probably not needed, but requires more thought
    • if auth is needed, URI SHOULD be in the same protection space as original URI if possible so auth credentials can be reused
  4. response to request-permission can include a link to a management UI if available
    • depending on RS policy, who's requesting, etc.
  5. if desired, app redirects user's trusted browser to management UI in Resource Server
    • not in a frame
    • include a redirect_uri&state back to app
  6. user interacts with management UI in RS to process permission request(s)
    • requires first-party (example: cookie) login
    • SHOULD NOT "Access-Control-Allow-Credentials"
    • SHOULD use anti-XSRF
    • SHOULD use frame-busting
    • when done, can 302 redirect back to app

alternatively, user can log into RS UI in the future to review and approve pending permission requests.

  • depending on RS policy, might be needed for third party (non-owner) requests

the notion of "permission" and the operation of the UI is entirely up to the RS. the functionality the user expects is that, if the necessary access is granted, the original request will not be 403 Forbidden if repeated.

for WAC, adding an app/origin analog of acl:agentGroup (such as acl:appGroup or acl:originGroup) may be helpful. the RS can have UI and/or APIs for managing internal app groups so they can be hidden from outside access (to preserve privacy).

app groups could allow the owner to define arbitrary roles/scopes for apps, such as "chat", "photos", "music", etc., as coarse or as fine as desired.

for app groups, the RS can use heuristics or configuration to determine what groups/roles/scopes might be needed to satisfy the original request and likely related requests. those could be highlighted among all possible scopes, or only those could be presented (using a new challenge if additional scopes are required later by that app).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions