Re: [kitten] I-D Action: draft-ietf-kitten-sasl-oauth-16.txt

Bill Mills <wmills_92105@yahoo.com> Mon, 13 October 2014 16:08 UTC

Return-Path: <wmills_92105@yahoo.com>
X-Original-To: kitten@ietfa.amsl.com
Delivered-To: kitten@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id DA3101A033C for <kitten@ietfa.amsl.com>; Mon, 13 Oct 2014 09:08:55 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.285
X-Spam-Level:
X-Spam-Status: No, score=-2.285 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, FREEMAIL_REPLYTO_END_DIGIT=0.25, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RP_MATCHES_RCVD=-0.786, SPF_PASS=-0.001] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id FrSi6j1vTAZQ for <kitten@ietfa.amsl.com>; Mon, 13 Oct 2014 09:08:49 -0700 (PDT)
Received: from nm47-vm1.bullet.mail.bf1.yahoo.com (nm47-vm1.bullet.mail.bf1.yahoo.com [216.109.115.124]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 13CF21A0346 for <Kitten@ietf.org>; Mon, 13 Oct 2014 09:08:48 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1413216528; bh=4uuUis+cUQXulwkzumY4SM0w5OKB7zniYeumyZevt9o=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:From:Subject; b=IaktBI9/ZmyEufHuixzd7odrl/DXJ78cUB0pu5dCcQYmZwUNKWDWYJLZLxv7zdyukih0ciw9mhd0xW4n/1FHpCB+7SmztTcv5osZJkZiM9kHmNqZtWYxi6ti4RvMieV++5vyQNKCAl6XdM4CqAzvb03iYs3e6OI66RYaGAGufJ+50y+WSUDj9Af5qiqNmsJuTXBnNZ2gvKT0ozhwqc46+WFMZZvlnIh/TJ8th1lJM4sUMrxEDDL5RVxpGVLI6mpU0mEvO/OIfWqavkOAQusgbhlglhKvQteztO+7Lkg/BHEWXpqKAHaIrJL5oKxgCOgqulnos+aaLN9b1ZUwxwUN4g==
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s2048; d=yahoo.com; b=p/VcElWYKuyko02dPtTah4zUjQaabVhVM3W1sMAbeMHhI8vGOf+on9xOcXvyCz1pgZigRdjKn8KVuNoWg5ZTcwCBtoUy5soRN8v/8M13i/3chrRab6SpVDYo5dfXf+thcG/lXGZ6pO3gVEWvw5Q9V00u3CajCtT+UEq5Icrrb2f65fO/7dAvJR/FiQrFYLlzwOYnsz1KtczeinWLlPqsdQj1x55u5sE5x4WtqUoIcucLW3dK69CSFasxfXuJqEMiy4tbzG4YFXxulsCJlzJtwLF3G/8Aqs+Zi98kqHNSvv9fX3pKIkUOD1wkYoWIcfMft52mARnmrnsn7dKlwa65Hw==;
Received: from [98.139.215.140] by nm47.bullet.mail.bf1.yahoo.com with NNFMP; 13 Oct 2014 16:08:48 -0000
Received: from [98.139.212.230] by tm11.bullet.mail.bf1.yahoo.com with NNFMP; 13 Oct 2014 16:08:48 -0000
Received: from [127.0.0.1] by omp1039.mail.bf1.yahoo.com with NNFMP; 13 Oct 2014 16:08:48 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 228095.28428.bm@omp1039.mail.bf1.yahoo.com
X-YMail-OSG: wlpbk5QVM1n_J74I8GvjvSMSZn90AooGre3w3wmIxnHQUhupKvLT50HyT5uGQ_5 hqsnTOS80iTiodBuRwJX5IC.Kk9iJsSCaij_l0effuN3Llh2R60UHCwiXP3h5QjvuAGVTyI8rAKt ZOhfgRYvKKQGfRx4qngdsBXLHCvBmwYkWf36I_RFmrSrLSzrdot4Vg76vpGkwBU9WvWzIRYDepNF o31mT07y8_qwhZ0Clv.Bo4p3QIAlZkuOgNd_15UTSXjtLynTKH6xFUEWgADrT_LvKjSS76quEGcx jNXkgSA2c2B7gQ6AZIuDFpP59TBDyeNYSHNNGdhLaqEWSVyZ4Ebh_BGNDMv4EhX4uTW4rE.Y.o6o N7rw2yCvvPMCmi_jLUQMYL2xObkjV_QbkcH9yNOs3n4639IqPWuZLrQoCWFRn6UmaIR2L53L1noR 1_8QHh3v7gOVl.96LnELvNW_W2xQMZ5Ym6mi4nI_2JxcTITWad9iu7Rs.WgupU_k_HeNBELUUoux k49nlOYzNXLuIXgknPvTHGmznqUd6GvX9odDpYYIqpfAPDzfSTCxU4sVE7Mp0RMmJfUVT3_Py0hz RZKzwGmvKj4HQYVd8GvFnv57X6wPhWnP69GJt9R.Ud6VunSSouqg5H4R78H8SkJIk
Date: Mon, 13 Oct 2014 16:08:47 +0000
From: Bill Mills <wmills_92105@yahoo.com>
To: Torsten Lodderstedt <torsten@lodderstedt.net>, "Kitten@ietf.org" <Kitten@ietf.org>
Message-ID: <1602239841.299714.1413216527278.JavaMail.yahoo@jws10606.mail.bf1.yahoo.com>
In-Reply-To: <543914E8.8070507@lodderstedt.net>
References: <543914E8.8070507@lodderstedt.net>
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="----=_Part_299713_870851213.1413216527273"
Archived-At: http://mailarchive.ietf.org/arch/msg/kitten/I6ytbtcbbbpP8A_kRC_5-Q-Ly9M
Cc: "tjs@psaux.com" <tjs@psaux.com>
Subject: Re: [kitten] I-D Action: draft-ietf-kitten-sasl-oauth-16.txt
X-BeenThere: kitten@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
Reply-To: Bill Mills <wmills_92105@yahoo.com>
List-Id: Common Authentication Technologies - Next Generation <kitten.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/kitten>, <mailto:kitten-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/kitten/>
List-Post: <mailto:kitten@ietf.org>
List-Help: <mailto:kitten-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/kitten>, <mailto:kitten-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 13 Oct 2014 16:08:56 -0000

I totally agree that generic and interoperable OAuth client implementations need both endpoint discovery and client registration.  I disagree that this spec needs registration.  This spec is about using OAuth on resource servers which have nothing to do with authentication and token issuance. We might need to talk about client registration requirements in a token profile, but this draft doesn't define new tokens either.
On whether to specify the full OpenID Connect Discovery schema, I think a SHOULD is reasonable, I don't really like the MUST. 

     On Saturday, October 11, 2014 4:30 AM, Torsten Lodderstedt <torsten@lodderstedt.net> wrote:
   

 Hi all,

as one of the proposers (beside Hannes) of the change, I would like to explain the rationale.

> -16 is submitted, and there is one suggested change (which I was supposed to have added in already and blew it), which is to replace section 3.2.2 with the text (farther) below. My comments on the suggested text:

> #1)  I don't think the dynamic registration stuff is baked enough to want to pull that in to the "oauth-configuration" definition. I don't want to pull it in because I don't think dynamic registration is required for SASL/OAUTH (as evidenced by the Google and Outlook.com implementations.


Existing implementations at Google and Outlook.com are no evidence against dynamic client registration. They demonstrate that it is possible
to implement the server side. But we are talking about clients (more precisely about generic clients). I'm not aware of any generic
client implementing the SASL mechanisms in the moment. I recommend taking a look at https://bugzilla.mozilla.org/show_bug.cgi?id=849540.

Before I dive into the registration details, I would like to give my personal summary why this SASL profile is needed.
  
In my opinion, one of the main purposes of this mechanism is to allow generic clients to authorize access to standard protocols, such as IMAP,
using OAuth Access Tokens. This offers the following advantages:

- multi-factor authn: An increasing number of service providers (e.g. Google, Yahoo, Apple) offer 2-factor authentication to their users,
but only for apps and web sites. Why? It currently does not work in conjunction with IMAP and the like. Instead, application-specific passwords
must be used, which offer a terrible user experience and therefore are a significant burden for better Internet security. Using OAuth access tokens
allows to decouple service access and authentication/authorization process. So the authorization server can choose the appropriate/available
mechanisms to authenticate at its discretion. This also allows to use any kind of (provider-specific) multi-factor authentication methods also
in the context of IMAP and the like.

- Furthermore, using OAuth also allows to use refresh tokens as persistent credential for service login, that way eleminating the need to store user
passwords on devices.
  
So basically, the SASL OAuth profile can (at least in my opinion) be a major leap forward in Internet security.

Why does this require dynamic registration?

Well, OAuth requires any client to possess a client_id (and client_secret) with the particular authorization server. Nowadays developers typically
register with the authz server's provider out of band and bake the credentials into the software package. This works for clients, which
are directly programmed against a certain deployment/API, such as Facebook, but is inappropriate (if not unfeasible) for generic
clients using standardized protocols, e.g. Thunderbird.

Or do you want to register the Thunderbird deveopers with every e-Mail/Calendar-provider in the world up-front?

I don't think so. That's why the OAuth WG came up with the specification for dynamic client registration, which allows
the client to dynamically obtain client credentials from the authorization server. It basically solves the client credential challenge for generic
clients, but it does integrate the registration step into an overall process.

That's why I think we must define a way for a generic SASL client to, based on user-provided data, find the appropriate authorization server and
register with it. I think the SASL mechanism should specify how those mechanisms are used in concert in order to authorize service access using OAuth.
Otherwise, the SASL mechanism can only be used for point to point integrations among partners but never for generic clients.

So I think true interoperability calls for addition of registration as well.

Regarding state of dynamic client registration: It's not ratified yet but already sent to IESG for publication.
Beside that it is already implement in existing OpenId Connect deployments.

> #2)  I didn't really want to make all of the OpenID elements required but I don't have a strong opinion here, my initial intent was to use the OpenID Discovery format as an existing format to be re-used here but leave it flexible.

Agreed. Using the format as specified by OpenID Connect makes sense. As generic OAuth differs from OpenID Connect, the WG should (probably in cooperation with
the OAuth WG) discuss, which elements are really needed.

> #3)  I am against recommending scope names at all in any way.  I would not include the last sentence of paragraph 5 below and strike the scope names.


Given there is already a response parameter scope, which intructs the client on what scope to use in the authz request, I tend to agree. I'm not yet fully
convinced whether this approach will work. But let's give it a try.

kind regards,
Torsten.



>  New text for 3.2.2:
> -----------------------
> 3.2.2.  Server Response to Failed Authentication
>
>
> For a failed authentication the server returns a JSON [RFC4627]
> formatted error result, and fails the authentication.  The error
> result consists of the following values:
>
>
> status (REQUIRED):  The authorization error code.  Valid error
> codes are defined in the IANA "OAuth Extensions Error Registry"
> specified in the OAuth 2 core specification.
>
>
> scope (OPTIONAL):  An OAuth scope which is valid to access the
> service.  This may be empty which implies that unscoped tokens
> are required, or a scope value.  If a scope is specified then a
> single scope is preferred, use of a space separated list of
> scopes is NOT RECOMMENDED.
>
>
> oauth-configuration (OPTIONAL):  The URL for a document following
> the OpenID Provider Configuration Information schema, as
> described in Section 3 of the OpenID Connect Discovery
> [OpenID.Discovery], that is appropriate for the user.  The
> server MAY return different URLs for users from different
> domains and a client MUST NOT cache a single returned value and
> assume it applies for all users/domains that the server
> suports.  The returned discovery document MUST have all data
> elements required by the OpenID Connect Discovery specification
> populated.  In addition, the discovery document MUST contain
> the 'registration_endpoint' element to learn about the endpoint
> to be used with the Dynamic Client Registration protocol
> [I-D.ietf-oauth-dyn-reg] to obtain the minimum number of
> parameters necessary for the OAuth protocol exchange to
> function.  Authorization servers MUST implement the
> authorization code grant and other grant types MAY be
> supported.  Furthermore, authorization servers MUST implement
> the ability to issue refresh tokens for use with native
> applications to benefit from an abbreviated protocol exchange.
> The use of the 'offline_access' scope, as defined in
> [OpenID.Core] is RECOMMENDED to give clients the capability to
> explicitly request a refresh token.
>
>
> If the resource server provides a scope (as part of the element of
> the configuration payload) then the client MUST always request
> scoped tokens from the token endpoint.  This specification
> RECOMMMENDs the use of the following scopes:
>
> imap:  The 'imap' scope value is used to interact with IMAP mail
> servers.
>
> pop3:  The 'pop3' scope value is used to interact with POP3 mail
> servers.
>
> xmpp:  The 'xmpp' scope value is used to interact with XMPP servers.
>
>
>
> If the resource server provides no scope to the client then the
> client SHOULD presume an empty scope (unscoped token) is needed.
>
>
> Since clients may interact with a number of application servers,
> such as email servers and XMPP servers, they need to have a way
> to determine whether dynamic client registration has been performed
> already and whether an already available refresh token can be
> re-used to obtain an access token for the desired resource server.
> This specification RECOMMENDs that a client uses the information in
> the 'issue' element to make this determination.
> -----------------------
>
>
> I think we're getting very close :)
>
> -bill