Re: [OAUTH-WG] ' force_auth' request parameter

Eran Hammer-Lahav <eran@hueniverse.com> Tue, 13 July 2010 16:31 UTC

Return-Path: <eran@hueniverse.com>
X-Original-To: oauth@core3.amsl.com
Delivered-To: oauth@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 296303A6A5B for <oauth@core3.amsl.com>; Tue, 13 Jul 2010 09:31:45 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.457
X-Spam-Level:
X-Spam-Status: No, score=-2.457 tagged_above=-999 required=5 tests=[AWL=0.140, BAYES_00=-2.599, HS_INDEX_PARAM=0.001, HTML_MESSAGE=0.001]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 9iS89xu6OBDD for <oauth@core3.amsl.com>; Tue, 13 Jul 2010 09:31:33 -0700 (PDT)
Received: from p3plex1out01.prod.phx3.secureserver.net (p3plex1out01.prod.phx3.secureserver.net [72.167.180.17]) by core3.amsl.com (Postfix) with SMTP id 6338D3A6A97 for <oauth@ietf.org>; Tue, 13 Jul 2010 09:31:26 -0700 (PDT)
Received: (qmail 27921 invoked from network); 13 Jul 2010 16:31:34 -0000
Received: from unknown (HELO smtp.ex1.secureserver.net) (72.167.180.19) by p3plex1out01.prod.phx3.secureserver.net with SMTP; 13 Jul 2010 16:31:33 -0000
Received: from P3PW5EX1MB01.EX1.SECURESERVER.NET ([10.6.135.20]) by P3PW5EX1HT001.EX1.SECURESERVER.NET ([72.167.180.19]) with mapi; Tue, 13 Jul 2010 09:31:24 -0700
From: Eran Hammer-Lahav <eran@hueniverse.com>
To: Colin Snover <ietf.org@zetafleet.com>
Date: Tue, 13 Jul 2010 09:31:20 -0700
Thread-Topic: [OAUTH-WG] ' force_auth' request parameter
Thread-Index: Acsip6b1rueeXuLrRee3Vxdu6o8xXQAASwJk
Message-ID: <C861E2E8.37193%eran@hueniverse.com>
In-Reply-To: <4C3C92D2.80209@zetafleet.com>
Accept-Language: en-US
Content-Language: en
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
acceptlanguage: en-US
Content-Type: multipart/alternative; boundary="_000_C861E2E837193eranhueniversecom_"
MIME-Version: 1.0
Cc: OAuth WG <oauth@ietf.org>
Subject: Re: [OAUTH-WG] ' force_auth' request parameter
X-BeenThere: oauth@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: OAUTH WG <oauth.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/oauth>, <mailto:oauth-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/oauth>
List-Post: <mailto:oauth@ietf.org>
List-Help: <mailto:oauth-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/oauth>, <mailto:oauth-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 13 Jul 2010 16:31:45 -0000

Building consensus around new ideas is tough. The only advice I can give you is to identify the people most likely to support this idea and ping them off-list to try and get their support. I don't think it belongs in core because core currently represents pretty solid consensus on the feature set (and most details).

EHL


On 7/13/10 9:22 AM, "Colin Snover" <ietf.org@zetafleet.com> wrote:

 On 22/07/28164 13:59, Eran Hammer-Lahav wrote:
' force_auth' request parameter The following was submitted via the shared-copy page but does not belong with editorial feedback. This needs to be discussed and supported on the list before added the specification. I think it belongs where 'immediate' is specified.

 EHL

 ------ Forwarded Message

From: An anonymous reader <mailman@sharedcopy.com>
 Date: Sat, 10 Jul 2010 11:01:11 -0700
 To: Eran Hammer-Lahav <eran@hueniverse.com>
 Subject: Re: draft-ietf-oauth-v2-09 - The OAuth 2.0 Protocol




 "Colin Snover" left these comments on your copy:

 draft-ietf-oauth-v2-09 - The OAuth 2.0 Protocol <http://r6.sharedcopy.com/6bnqq8v>


      As proposed on the ML, a new parameter to counteract the current behaviour of OAuth 1.0a authorization servers which is to assume that the account logged into the user-agent is the account that should be checked for access:

 force_auth
          OPTIONAL. The parameter value must be set to "true" or "false".

          If set to "true", the authorization server MUST prompt the end-user to authenticate and approve access. The authorization server MUST NOT make any assumptions as to the identity of the entity requesting access, even if another automatic mechanism is available to do so (e.g. browser cookies).

          If set to "false" or not present, the authorization server MAY automatically grant access to the client if it is able to determine that access was previously granted.         link » <http://r6.sharedcopy.com/6bnqq8v#shcp21>


 tools.ietf.org/html/draft-ietf-oauth-v2-09 <http://r6.sharedcopy.com/6bnqq8v>  · Original page <http://tools.ietf.org/html/draft-ietf-oauth-v2-09>



________________________________
via sharedcopy.com <http://sharedcopy.com/?ef>


 ------ End of Forwarded Message


 Hi Eran,

 Sorry if that was not the right place for that to go; I didn't know what else to do. I have tried to solicit feedback from the ML regarding this parameter twice and nobody seems very keen in providing any, which is kind of a bummer. I waited until the last possible moment to add it in the hopes that someone would notice my messages and discuss it, but you made it sound like your plan was for draft 10 to be potentially final so I wanted to get it in before the deadline.

 I'm sure this is not a big deal for most applications that expect at most a single connection, but for me this is a huge deal since it completely immolates our application's authentication flow, and I can't go to every provider asking them to please change the way they implement the authentication portion of their OAuth API.

 In contrast to 'immediate', which had some concerns vis à vis security, force_auth is actually safer than the current normal flow used by most OAuth providers since it requires the provider to make no guesses about who is trying to authorize the app.

 Frankly, I think that OAuth providers do the wrong thing now in all cases by assuming that browser cookies are a safe way of confirming the identity of the end-user making an authorization request (they aren't!), but the spec says the way the authorization server authenticates the end-user is outside the scope of the spec. I have no objection to this-OAuth *should* be authentication-agnostic-but at the same time this is a very real and present implementation flaw and the only way to solve it is to make sure the spec defines a way for an application to say "hey, I know you *think* you know who should be authenticated, but *I* know that the user has requested to connect a *new* account, so don't use any automatic authentication method".

 I think it is incredibly important that the OAuth spec gets providers to distinguish between automatic & potentially unsafe authentication methods (like session cookies) versus more "guaranteed" authentication (like password), especially since 99.999% of the time OAuth relies on the end-user's Web browser which is all but guaranteed to contain some cookies for the provider that are unrelated to the requesting application.

 Examples:

 1. Multiple end-users with malicious intent. User 1 is logged into their Facetweetr account. User 2 wants to do bad things using User 1's account. Because the user-agent has cookies for user 1, user 2 gets to authorize their account with our app. Even when user 1 changes their password, unless the provider automatically invalidates their existing connections (the spec does not even mention doing this in an informative manner as far as I can tell), they are almost certainly unaware that the linked application is still able to perform actions on their behalf.

 2. Single end-user with multiple accounts. User is logged into Facetweetr account 1, but they want to authorize account 2. They go to authorize the application and are presented with a confirmation for account 1. They log out (because this is the only way to switch accounts on the provider) and suddenly the authorization flow is dropped on the floor. The user may not know immediately what they need to do at this point. They will need to manually return to the original application and restart the authorization request.

 3. User has two accounts that they want to authorize with a provider. User authorizes account 1 successfully, then wants to authorize account 2. Because account 1 is still logged in, and because the application already has a link to the account, it automatically redirects back to the application's redirection URI. In order for the user to get what they want, they are forced to manually navigate to the provider's site, log out, *then* begin the authorization request.

 These aren't imaginary scenarios; they are things that are going on *right now* with several different OAuth providers.

 The original request: <http://www.mail-archive.com/oauth@ietf.org/msg02331.html>

 Regards,