Description
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:
- client attempts authenticated (webid + appid) access to a resource
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
- if appropriate, include request-permission URI (new
- to request permission, POST to request-permission URI
- auth
probablynot 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
- auth
- response to request-permission can include a link to a management UI if available
- depending on RS policy, who's requesting, etc.
- 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
- 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).