-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Identifiers for applications #30
Comments
It would make everything much easier for authorization if every application had a WebID. Part of the problem with using the Another benefit to requiring apps to have WebIDs is you can just make .acl rules for the apps themselves, though depending on your perspective, that might be a drawback. |
RS needs to have a way to authenticate the user as well as authenticate the app. To my understanding in some cases RS could authenticate app just based on |
We're not using the |
I think we can't avoid users trusting the OP they chose as their IDP, they assert it using that statement with
What does OP embed in the token here? |
@zenomt based on today's call I understand that problem with verifying identity of application doesn't relate to resource owner (with |
the user might not be malicious (with bad intent):
generally (not including special environments), the user's trusted web browser and Open ID Connect Provider operate on the user's behalf, not on the behalf of a server or any other party, so in general those components shouldn't be trusted by any other party to be acting for anyone's benefit other than the user's. systems should be designed with this in mind. |
Thank you for clarifying @zenomt !
I think here it still doesn't matter if user has On the other hand, any user (no matter what access mode they have in ACL) may want RS to check that they approve particular application to access particular resource or set of resources (no matter how they defined that set). In that case they need to communicate to RS what application they use in we can rely on RS having a way to verify identity of that application. |
I think this issue is a crucial dependency for any other work we do in the App Authorization Panel.
1. App source identityThis is the identity of the app that persists across various devices or browser sessions, and across different installations or instances of the app. This is what appears on the Consent / Authorize screen, "App X requests access to your user profile" or whatever. For example, for mobile (and most desktop) apps, the app source identifier would be the url of the app in the App Store (which includes the app name, icon, developer; note the app itself is signed by the developer and the OS, in many app stores). For many existing Solid apps, the app source identity would be the link to the Github repo for the app's source code. (This is related to the concept of a machine-readable App Manifest, though this is just the identifier for it) 2. Deployed app instanceThis is the identity of a particular installation/deployment of an app.
Public clients:
Note that in-browser apps have no way to persist secrets or keys on this level (they can only store secrets on a browser-session level, below). 3. App instance on a particular browser sessionThis is the identity of an in-browser application running a) from a particular deployed instance / |
@dmitrizagidulin for apps running in a web browser, does this diagram map to your tree levels? I also included User here, who can use the same App Deployment on multiple devices, and wants to manage authorizations per app deployment not app device instance. Also 'review based certifications' which @RubenVerborgh mentioned in some other issue would probably reference the App Source. For deployments, as people get more used to technology I would expect more common for individuals and collectives to use their own deployments rather than some 'public deployment'. |
@elf-pavlik Sort of! With a couple of differences. For the App Source layer: It would be great to include the most common types of app sources - a Github repo (for an OSS project or for a proprietary enterprise software), an iOS or Android store entry (for mobile apps), and a Windows/Mac/Ubuntu/etc store entry (for desktop software). For the App Deployment layer: Again, let's include the various different types of Deployments:
For the ephemeral App Instance on a Browser Session layer: Note that only in-browser Javascript apps exist on this layer. Mobile, desktop and traditional server-side apps only exist on the previous Deployment layer. |
Those two cases seem different to me, It looks like most if not all approaches require some kind of asymmetric key pair, for local clients they probably should stay on device and CryptoKey.extractable to my understanding allows it. The context which has access to private key may come helpful with definition here.
Same app source can get distributed via more than one store, eg. Google Playstore as well as https://f-droid.org/ etc. Unless we need to make assumptions about result of dereferencing IRI denoting the app source, I think whoever maintains the app can choose whatever IRI they want. Those distribution channels in some ways look comparable to how I would see
I think some native apps have notion of 'user session', for example Youtube on iOS allows to switch between users and persists multiple logins. |
I've tried to illustrate different patters of solid clients. First two look quite straight forward:
Other two cases may need more clarifications
I suggest we forget about Implicit OAuth flow and assume that all those clients use Authorization Code Grant with PKCE or Client Credentials Grant. |
Considering case of same user with multiple devices. For Confidential Client we have just one OAuth client so User authorizations could stay assigned to that specific client. |
Actually it looks more like one OAuth Client per Authorization Server when different Users use different Authorization Servers.
I've noticed https://tools.ietf.org/html/rfc7591#appendix-A.4 Client ID per Client Instance or per Client Software which we should probably also somehow address and possibly try to reuse the terminology. |
The User controlled Authorization App and App launcher proposal opens up an architectural possibility that I think allows us to rethink the presuppositions of this discussion and give some good technical answers to some of the questions raised here. By creating a secure Auth/Launcher App started from a secure origin trusted by the user we can do the following:
The App launcher would keep for each App information about the App (including its public keys potentially) with something like: </app/calendar#FirefoxOnLinux> a :App;
:appLaunch <https://office.app/2019/Calendar.html>;
:browser "...";
cert:key [ ... ] . The full ontology would still need to be worked out of course. |
@dmitrizagidulin could you please clarify the difference you see between on device instance of a client running in web browser (Public Client on diagram above #30 (comment)) and on device instance of a client running as native app. In my opinion both cases seem very similar. In Authorization Code flow different instances of different devices will use same |
Today on authentication panel call we touched OAuth 2.0 Device Authorization Grant which doesn't use |
Sure. The difference is in two things - 1) how that app is identified, and 2) at which identity level the app can store secrets. Mobile app (on device instance of a client running as native app):
Web app running on mobile browser (on device instance of a client running in web browser):
|
We could probably adopt terminology from https://tools.ietf.org/html/rfc7591#section-1.2
We've just had conversation with @dmitrizagidulin https://gitter.im/solid/app-authorization-panel?at=5da5f407870fa33a4df9abf3 We discussed it around OAuth 2.0 Dynamic Client Registration Protocol: A.4. Client ID per Client Instance or per Client Software It looks that reusing
|
The Launcher App Proposal explains how the Launcher App can be in charge of building a AppId for an instance running for a particular user, and how it can authenticate a particular app. |
I think whatever flows we come up with for granting / changing / revoking authorizations for applications we need clear way to identify those applications. We most likely will represent those authorizations using RDF so we will need to have IRI denoting an application.
This issue may overlap to some degree with authentication panel, for example if we want to require that OP includes application
redirect_uri
in the token and it gets used to identify the application.We may also need to address to what degree we can rely on
Origin
header whenever available.The text was updated successfully, but these errors were encountered: