> Knowing another user's FxA uid doesn't give you any power over their account, but it might have some privacy/tracking implications.
Yes, exactly. It could be possible to identify the user over other properties, which is bad for privacy. I like the suggestion of solving this in OpenID Connect. We can easily provide a per-client id, doing `sha256(client_id + uid)`. On Wed, Nov 25, 2015 at 8:05 PM Ryan Kelly <[email protected]> wrote: > On 26/11/2015 08:09, Jared Kerim wrote: > > I am implementing a web application for cloud services called the > > Mozilla Geolocation Service Leaderboard, which will utilize FXA for user > > accounts. > > > > https://github.com/mozilla-services/location-leaderboard > > Cool. By the way, if you haven't seen it, there's a python client > library for FxA that you might like to contribute to if you find > yourself hand-rolling too much code for the oauth flow: > > https://github.com/mozilla/PyFxA > > > My original plan was to store the FXA access token and the FXA UID in > > the database, as well as pass both of those to the client. When the > > client wants to make an API call, it will provide the UID as a way to > > identify itself and the access token to authorize the call. > > > > I was going to store both in the database, but I think that I don't need > > to store the access token at all, it can be stored only in the client, > > passed to the server through an Authorization header during a request, > > relayed to FXA for validation, and the call is considered authorized. > > This sounds good to me, but be careful, because the "relayed to FxA for > validation" step has a lot of nuance. How will you know that it's a > bearer token for the leaderboard app, rather than e.g. a token I got by > logging into pocket? > > Two options: > > * The verification call [1] returns the client_id that owns the token, > so you can check that it's your app's client id and reject if not. > > * Require the token to have a specific scope, e.g. "stumbler", and check > for that scope in the response from [1]. > > The second option would be more in the spirit of OAuth, but maybe > slightly more work for your API. > > I'd also encourage you to request a refresh token, pass both > refresh_token and access_token back to your client, and have it use the > refresh_token for ongoing access to the API; see "access_type=offline" > at [2]. > > > [1] > > https://github.com/mozilla/fxa-oauth-server/blob/master/docs/api.md#post-v1verify > > [2] > > https://github.com/mozilla/fxa-oauth-server/blob/master/docs/api.md#request-parameters-5 > > > In this case I only need to store the FXA UID. > > > > However, if I only use the FXA UID as a way to identify a user, then > > that is the parameter that will appear in all API calls to identify > > users, which means this FXA UID will be publicly available. > > > > In his security review, Julien had suggested that the FXA UID should > > remain 'restricted' to within the server database and not exposed > > through the API. > > When we discussed this over Vidyo I think I didn't quite catch a key > point, so to clarify: in this proposal, would my FxA uid be exposed to > other users of the system? > > Knowing another user's FxA uid doesn't give you any power over their > account, but it might have some privacy/tracking implications. > > OpenID Connect actually has a bit to say about this topic, and suggests > the use of "Pairwise Pseudonymous Identifiers" (PPI) so that the FxA uid > seen by the leaderboard app cannot be correlated to e.g. the FxA uid as > seen by Pocket. But we don't implement that yet, and we don't have > concrete plans on whether or when we would. > > [3] > http://openid.net/specs/openid-connect-messages-1_0-20.html#Correlation > > > If this is the case, then I will need to create a UID which is local to > > just the leaderboard, and store both the leaderboard UID and the FXA UID > > on my user table to correlate the two. This is possible but perhaps > > more work than is necessary, particularly because I will need to 1) > > receive the access token from the client 2) validate it with FXA and 3) > > receive a payload from FXA which includes the FXA UID and then use that > > to identify the user in my local database table. > > If we decide this is necessary, it may make sense to try to implement a > simple PPI scheme once inside FxA, rather than encouraging every new > connected service to roll their own version of it. > > > Is it necessary to store both a local UID and an FXA UID in my database, > > or is it reasonable to use only the FXA UID to identify a user? > > I'd love to hear others' takes on the subject. Thoughts? > > > Cheers, > > Ryan > _______________________________________________ > Dev-fxacct mailing list > [email protected] > https://mail.mozilla.org/listinfo/dev-fxacct >
_______________________________________________ Dev-fxacct mailing list [email protected] https://mail.mozilla.org/listinfo/dev-fxacct

