Return-Path: <jricher@mit.edu>
X-Original-To: oauth@ietfa.amsl.com
Delivered-To: oauth@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1])
 by ietfa.amsl.com (Postfix) with ESMTP id 550F51A7004
 for <oauth@ietfa.amsl.com>; Mon,  1 Dec 2014 16:42:10 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.21
X-Spam-Level: 
X-Spam-Status: No, score=-4.21 tagged_above=-999 required=5
 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-2.3,
 SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01] 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 X4hgmra4vbtC for <oauth@ietfa.amsl.com>;
 Mon,  1 Dec 2014 16:42:06 -0800 (PST)
Received: from dmz-mailsec-scanner-2.mit.edu (dmz-mailsec-scanner-2.mit.edu
 [18.9.25.13])
 (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
 (No client certificate requested)
 by ietfa.amsl.com (Postfix) with ESMTPS id A74ED1A701B
 for <oauth@ietf.org>; Mon,  1 Dec 2014 16:42:05 -0800 (PST)
X-AuditID: 1209190d-f793c6d000001ec0-27-547d0adc7e9d
Received: from mailhub-auth-3.mit.edu ( [18.9.21.43])
 (using TLS with cipher AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by dmz-mailsec-scanner-2.mit.edu (Symantec Messaging Gateway) with SMTP id
 4E.73.07872.CDA0D745; Mon,  1 Dec 2014 19:42:04 -0500 (EST)
Received: from outgoing.mit.edu (outgoing-auth-1.mit.edu [18.9.28.11])
 by mailhub-auth-3.mit.edu (8.13.8/8.9.2) with ESMTP id sB20g3rc028263;
 Mon, 1 Dec 2014 19:42:04 -0500
Received: from artemisia.richer.local
 (static-96-237-195-53.bstnma.fios.verizon.net [96.237.195.53])
 (authenticated bits=0) (User authenticated as jricher@ATHENA.MIT.EDU)
 by outgoing.mit.edu (8.13.8/8.12.4) with ESMTP id sB20fxXm008923
 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NOT);
 Mon, 1 Dec 2014 19:42:02 -0500
Content-Type: multipart/signed;
 boundary="Apple-Mail=_7A8F6DAA-D6A2-4F12-BF0C-C8CBB0954526";
 protocol="application/pgp-signature"; micalg=pgp-sha1
Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\))
From: Justin Richer <jricher@mit.edu>
In-Reply-To: <BN3PR0301MB1234973440252E2F6A36D770A67D0@BN3PR0301MB1234.namprd03.prod.outlook.com>
Date: Mon, 1 Dec 2014 19:41:58 -0500
Message-Id: <4B1239F5-5DD3-4F1B-8691-75E8B07F3891@mit.edu>
References: <BN3PR0301MB12348944618D97E9C2B87E6EA67C0@BN3PR0301MB1234.namprd03.prod.outlook.com>
 <375CE45E-8896-4BD1-B398-ECE53A464BF7@mit.edu>
 <BN3PR0301MB1234973440252E2F6A36D770A67D0@BN3PR0301MB1234.namprd03.prod.outlook.com>
To: Anthony Nadalin <tonynad@microsoft.com>
X-Mailer: Apple Mail (2.1878.6)
X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrDKsWRmVeSWpSXmKPExsUixCmqrXuHqzbE4P4iIYuTb1+xWWyau43R
 gcljyZKfTB6tO/6yBzBFcdmkpOZklqUW6dslcGVsv5BTcGcOU8X8rZ3MDYzbvzJ2MXJySAiY
 SBxbdZAJwhaTuHBvPVsXIxeHkMBsJoklG9exgySEBDYwSnzo8YVI3GCSeDf/FVgVs8AkRon+
 i7OZQap4BQwkluzaBGYLC5hJrFvawgZiswmoSkxf0wK2glMgUeLhhhlgNSwCKhLzp+wHO4MZ
 qObLgvdMEHOsJO4seQJ1xhNGibONt8GKRAS0JU68X8kMcau8xIcPx9knMArMQnbILCSHzAIb
 nCSx/+JaJghbW2LZwtdQcQOJp52vWDHF9SXevJsDVS8vsf3tHKi4pcTimTdYIGxbiVt9C6Bq
 7CQeTVvEuoCRexWjbEpulW5uYmZOcWqybnFyYl5eapGukV5uZoleakrpJkZwxEny7mB8d1Dp
 EKMAB6MSD++J8zUhQqyJZcWVuYcYJTmYlER5F34ECvEl5adUZiQWZ8QXleakFh9iVAHa9WjD
 6guMUix5+XmpSiK8j0FaeVMSK6tSi/JhyqQ5WJTEeTf94AsREkhPLEnNTk0tSC2CycpwcChJ
 8O7krA0REixKTU+tSMvMKUFIM3FwHmKU4OABGv4NpIa3uCAxtzgzHSJ/ilFRSpxXD5jqhARA
 EhmleXC9sET5ilEc6C1h3n0g7TzAJAvX/QpoMBPQYIbmSpDBJYkIKakGRt/s3XcEywXTXrwy
 Ov4370/Uc8O3K/mK33oGB0Wsr1Jn+sNaJNRwWjihVuLtiX27jxk62K7YtfX4sg3zOVfLSJ6Q
 efuEfZmm0KVpaXl2fKnbnshdkP8415Rrl8KXxqtnN1m0p+hurnuZcnVC6Y/vx47u4v1wMLv9
 pvND18yFyoLn6k629VtpTlNiKc5INNRiLipOBAD6ZCCEbwMAAA==
Archived-At: http://mailarchive.ietf.org/arch/msg/oauth/6bBFvbtVneUV6ES8Mz1Z3TAlb4w
Cc: "oauth@ietf.org" <oauth@ietf.org>
Subject: Re: [OAUTH-WG] draft-ietf-oauth-introspection
X-BeenThere: oauth@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: OAUTH WG <oauth.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/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, 02 Dec 2014 00:42:10 -0000


--Apple-Mail=_7A8F6DAA-D6A2-4F12-BF0C-C8CBB0954526
Content-Type: multipart/alternative;
	boundary="Apple-Mail=_DBB884AC-34D1-4CEA-ADC1-B3CB701B0BF2"


--Apple-Mail=_DBB884AC-34D1-4CEA-ADC1-B3CB701B0BF2
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=windows-1252

> 1.       Is the metadata (introspection response) being returned from =
the authorization endpoint or from the token or a combination of both ?

As I said below, ultimately it=92s about the token and what it =
represents. If the token was issued through use of the authorization =
endpoint, then it=92s likely that there=92s some context from that =
authorization endpoint tied to the token that can be returned.

> 2.       =93context=94 there may be no context other than the token, =
are you expecting the authorization endpoint to always keep a context of =
how/why the token was issued ?

If you=92re asking if stateless tokens can be supported with this, then =
yes, that=92s fine. If the token=92s completely on its own (like a =
structured token generated as an assertion and used as an OAuth 2.0 =
access token) and a server=92s able to unpack that for a client without =
access to other pieces of context, then that=92s what it returns. But in =
that case, if you=92re issuing stateless tokens, with self-contained =
metadata and expirations and no other context to be conveyed beyond =
what=92s already inside the token, then you=92d probably just tell your =
protected resources how to parse and handle them directly.=20

> 3.       The specification should clearly state which type of tokens =
are supported and what profiles/bindings are supported, like JWT Bearer, =
etc.

That=92s opaque to the protected resource for purposes of this protocol, =
just like a token is opaque to a client for purposes of 6749/6750 OAuth. =
The introspection protocol supports whatever tokens are supported by the =
AS, so we don=92t need to list token types, but maybe we can be clearer =
about the opaqueness of the token value in this process. Since these are =
OAuth tokens and not assertions, no bindings or profiles are needed =
beyond this. It=92s a simple query-response and it=92s up to the server =
to know how to fulfill this contract.=20

> 4.       If I have an SAML Bearer assertion, and the SAML assertion is =
encrypted and have no way to know this, it can potentially fail if it =
can=92t be decrypted but as far as I can tell I=92m not sending an =
encrypted token since this is just a SAML assertion, not sure how one =
really determines what is wrong

If the AS can=92t decrypt the token then it can=92t introspect it. So it =
doesn=92t in this case. And if you=92re issuing encrypted OAuth tokens =
with no means to decrypt them back at the AS, then you probably wouldn=92t=
 offer an introspection service to begin with. This is covered in the =
security considerations section already.

> 5.       Should be spelled out what =93active=94 is supposed to mean =
so folks get the same results on different endpoints

As I said below, it means to answer =93is this token still good or not?=94=
 for a protected resource that can=92t answer that on its own, and I =
believe the current definition reflects that. Please submit text if the =
existing definition is insufficient or unclear to you.

 =97 Justin

> =20
> =20
> From: Justin Richer [mailto:jricher@mit.edu]=20
> Sent: Sunday, November 30, 2014 6:57 PM
> To: Anthony Nadalin
> Cc: oauth@ietf.org
> Subject: Re: [OAUTH-WG] draft-ietf-oauth-introspection
> =20
> Tony, thanks for the comments. Your timing is great, as I was just =
today sitting down to polish the introspection draft into a proper WG =
document ready for the last-call tomorrow. I=92ve just posted the =
updated draft, and I think that you=92ll find it addresses your =
concerns. More direct answers inline:
> =20
> =20
> On Nov 30, 2014, at 1:01 PM, Anthony Nadalin <tonynad@microsoft.com> =
wrote:
>=20
>=20
> Comments
> =20
> Intro
> =93about the authentication conext=94, not sure what this is since =
there is no authentication context in Oauth
> =20
> There are several authentication contexts in OAuth: the resource owner =
at the authorization endpoint, the client at the token endpoint, etc. =
Regardless, this is meant to be the context of the authorization =
decision, text now reads: "context in which the token was issued"
>=20
>=20
> Use of Oauth2, mixed with use of Oauth, pick one
> =20
> All usage changed to =93OAuth 2.0=94 throughout the document, let me =
know if I missed any.
>=20
>=20
> =93allows holder of a token to query=94 so anything/anyone that has a =
token can use this endpoint?
> =20
> Now reads authorized holder of the token and has stronger language and =
recommendations about requiring authorization on the endpoint to prevent =
public token fishing. This was already addressed in the security =
considerations section, but that has been propagated throughout the =
specification now.=20
>=20
>=20
> =20
> Introspection Endpoint
> Use of Oauth2, mixed with use of Oauth, pick one
> =20
> =20
> See above.
>=20
>=20
>=20
> Introspection Request
> The endpoint SHOULD also require some form of authentication=94, what =
about some form of authorization ? Why do we have to have another =
endpoint that we have to manage and then have a management API draft?]
> =20
> This is now clearer that it needs to be an authorized protected =
resource. This authorization may be carried through a credential =
mechanism as defined in OAuth 2.0, through an access token, or through =
some other mechanism.=20
>=20
>=20
> =20
> Token =96 is this any type of token ? how does the endpoint know that =
it can deal with this token type?
> =20
> Clarified that it=92s either the access_token from the token endpoint =
or the refresh_token from the token endpoint. You can use this with =
other token types, but that=92s not defined in this spec which concerns =
itself with RFC6749/RFC6750.=20
>=20
>=20
> So endpoint has to try to lookup token  to determine if it can maybe =
find out something about the token?
> =20
> That=92s the idea, the protected resource is asking an authoritative =
source (the authorization server) about a given token. I had always =
thought it was obvious that the authorization server would have to be =
able to know something about the token in order to provide an =
introspection service, but since that seems to have been unclear to some =
I=92ve made it explicit in the security considerations section.=20
>=20
>=20
> Can the one use the authorization code or does one have to get a token =
first?
> =20
> No, this is for tokens only. I don=92t see the point of introspecting =
an authorization code =97 those aren=92t sent to protected resources, =
they=92re sent to clients, which would in turn just hand it to the token =
endpoint to get a token. There=92s nothing else to find out about it.
>=20
>=20
>  Can I send a encrypted token and expect a proper response ?
> =20
> If the server can decrypt or otherwise understand the token, yes. I=92ve=
 pointed out this requirement in the security considerations section.=20
>=20
>=20
> What about a Proof of Possession Token?
> =20
> Yes, I think this fits great with PoP tokens, but those aren=92t =
defined well enough yet to say anything concrete. As the PoP work =
progresses, we can have an extension document to determine what needs to =
be done there. Note that we=92ll have to do the same thing with the =
Revocation RFC.
>=20
>=20
>  Introspection Response
> What is =93active=94 mean ? Is this up to the server to determine ?
> =20
> It means the token is live, hasn=92t been revoked, was actually issued =
by this server, isn=92t expired, and the protected resource that=92s =
asking has the right to know all that information. This is all up to the =
server to determine. If the server can=92t determine that information =
for its own tokens, it probably shouldn=92t be offering this service.
>=20
>=20
> =93scope OPTIONAL=94, is this the scope in the token or is this the =
scope that the introspection endpoint sources may have ? It=92s unclear =
if all these return values are from the token or from the introspection =
endpoint sources ?
> =20
> These are the scopes of the token. All return values are, as stated, =
metadata about the token itself that is being queried against.
>=20
>=20
> What error codes/conditions are there? Just the 400  (bad request)?
> =20
> The errors are more clearly spelled out. Most of it involves bad =
client authentication (when client credentials are used), bad =
authorization (when access tokens are used to access the introspection =
endpoint itself), or the like. If the token being introspected isn=92t =
good, that=92s still a 200 response =97 the request is fine, but the =
token being introspected isn=92t active, which is what=92s returned. =
This isn=92t an error, it=92s a valid answer to the question of =93what =
is this token?=94 that=92s being asked every time introspection is =
called.
>=20
>=20
> Can the endpoint return a encrypted response ?
> =20
> That=92s outside the scope of this document. It returns JSON like the =
rest of OAuth.
>=20
>=20
> What about PII such as user_id, aud ?
> =20
> This is now covered in the Privacy Considerations section, which =
wasn=92t A Thing when this draft was first written.
> =20
>  =97 Justin
>=20
>=20
> _______________________________________________
> OAuth mailing list
> OAuth@ietf.org
> https://www.ietf.org/mailman/listinfo/oauth
> =20


--Apple-Mail=_DBB884AC-34D1-4CEA-ADC1-B3CB701B0BF2
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=windows-1252

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Dwindows-1252"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: =
after-white-space;"><div><blockquote type=3D"cite"><div lang=3D"EN-US" =
link=3D"#0563C1" vlink=3D"#954F72"><div class=3D"WordSection1"><p =
class=3D"MsoListParagraph" style=3D"text-indent:-.25in;mso-list:l0 =
level1 lfo1"><span style=3D"color:#1F497D"><span =
style=3D"mso-list:Ignore">1.<span style=3D"font:7.0pt &quot;Times New =
Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span style=3D"color:#1F497D">Is the =
metadata (introspection response) being returned from the authorization =
endpoint or from the token or a combination of both =
?</span></p></div></div></blockquote><div><br></div><div>As I said =
below, ultimately it=92s about the token and what it represents. If the =
token was issued through use of the authorization endpoint, then it=92s =
likely that there=92s some context from that authorization endpoint tied =
to the token that can be returned.</div><br><blockquote type=3D"cite"><div=
 lang=3D"EN-US" link=3D"#0563C1" vlink=3D"#954F72"><div =
class=3D"WordSection1"><p class=3D"MsoListParagraph" =
style=3D"text-indent:-.25in;mso-list:l0 level1 lfo1"><span =
style=3D"color:#1F497D"><o:p></o:p></span></p><p =
class=3D"MsoListParagraph" style=3D"text-indent:-.25in;mso-list:l0 =
level1 lfo1"><!--[if !supportLists]--><span style=3D"color:#1F497D"><span =
style=3D"mso-list:Ignore">2.<span style=3D"font:7.0pt &quot;Times New =
Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span style=3D"color:#1F497D">=93contex=
t=94 there may be no context other than the token, are you expecting the =
authorization endpoint to always keep a context of how/why the token was =
issued ?</span></p></div></div></blockquote><div><br></div><div>If =
you=92re asking if stateless tokens can be supported with this, then =
yes, that=92s fine. If the token=92s completely on its own (like a =
structured token generated as an assertion and used as an OAuth 2.0 =
access token) and a server=92s able to unpack that for a client without =
access to other pieces of context, then that=92s what it returns. But in =
that case, if you=92re issuing stateless tokens, with self-contained =
metadata and expirations and no other context to be conveyed beyond =
what=92s already inside the token, then you=92d probably just tell your =
protected resources how to parse and handle them =
directly.&nbsp;</div><br><blockquote type=3D"cite"><div lang=3D"EN-US" =
link=3D"#0563C1" vlink=3D"#954F72"><div class=3D"WordSection1"><p =
class=3D"MsoListParagraph" style=3D"text-indent:-.25in;mso-list:l0 =
level1 lfo1"><span style=3D"color:#1F497D"><o:p></o:p></span></p><p =
class=3D"MsoListParagraph" style=3D"text-indent:-.25in;mso-list:l0 =
level1 lfo1"><!--[if !supportLists]--><span style=3D"color:#1F497D"><span =
style=3D"mso-list:Ignore">3.<span style=3D"font:7.0pt &quot;Times New =
Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span style=3D"color:#1F497D">The =
specification should clearly state which type of tokens are supported =
and what profiles/bindings are supported, like JWT Bearer, etc.
</span></p></div></div></blockquote><div><br></div><div>That=92s opaque =
to the protected resource for purposes of this protocol, just like a =
token is opaque to a client for purposes of 6749/6750 OAuth. The =
introspection protocol supports whatever tokens are supported by the AS, =
so we don=92t need to list token types, but maybe we can be clearer =
about the opaqueness of the token value in this process. Since these are =
OAuth tokens and not assertions, no bindings or profiles are needed =
beyond this. It=92s a simple query-response and it=92s up to the server =
to know how to fulfill this contract.&nbsp;</div><br><blockquote =
type=3D"cite"><div lang=3D"EN-US" link=3D"#0563C1" vlink=3D"#954F72"><div =
class=3D"WordSection1"><p class=3D"MsoListParagraph" =
style=3D"text-indent:-.25in;mso-list:l0 level1 lfo1"><span =
style=3D"color:#1F497D"><o:p></o:p></span></p><p =
class=3D"MsoListParagraph" style=3D"text-indent:-.25in;mso-list:l0 =
level1 lfo1"><!--[if !supportLists]--><span style=3D"color:#1F497D"><span =
style=3D"mso-list:Ignore">4.<span style=3D"font:7.0pt &quot;Times New =
Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span style=3D"color:#1F497D">If I =
have an SAML Bearer assertion, and the SAML assertion is encrypted and =
have no way to know this, it can potentially fail if it can=92t be =
decrypted but as far as I can tell I=92m not sending an encrypted
 token since this is just a SAML assertion, not sure how one really =
determines what is =
wrong</span></p></div></div></blockquote><div><br></div><div>If the AS =
can=92t decrypt the token then it can=92t introspect it. So it doesn=92t =
in this case. And if you=92re issuing encrypted OAuth tokens with no =
means to decrypt them back at the AS, then you probably wouldn=92t offer =
an introspection service to begin with. This is covered in the security =
considerations section already.</div><br><blockquote type=3D"cite"><div =
lang=3D"EN-US" link=3D"#0563C1" vlink=3D"#954F72"><div =
class=3D"WordSection1"><p class=3D"MsoListParagraph" =
style=3D"text-indent:-.25in;mso-list:l0 level1 lfo1"><span =
style=3D"color:#1F497D"><o:p></o:p></span></p><p =
class=3D"MsoListParagraph" style=3D"text-indent:-.25in;mso-list:l0 =
level1 lfo1"><!--[if !supportLists]--><span style=3D"color:#1F497D"><span =
style=3D"mso-list:Ignore">5.<span style=3D"font:7.0pt &quot;Times New =
Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span style=3D"color:#1F497D">Should =
be spelled out what =93active=94 is supposed to mean so folks get the =
same results on different =
endpoints</span></p></div></div></blockquote><div><br></div><div>As I =
said below, it means to answer =93is this token still good or not?=94 =
for a protected resource that can=92t answer that on its own, and I =
believe the current definition reflects that. Please submit text if the =
existing definition is insufficient or unclear to =
you.</div><div><br></div><div>&nbsp;=97 Justin</div><br><blockquote =
type=3D"cite"><div lang=3D"EN-US" link=3D"#0563C1" vlink=3D"#954F72"><div =
class=3D"WordSection1"><p class=3D"MsoListParagraph" =
style=3D"text-indent:-.25in;mso-list:l0 level1 lfo1"><span =
style=3D"color:#1F497D"><o:p></o:p></span></p><p =
class=3D"MsoListParagraph"><span =
style=3D"color:#1F497D">&nbsp;</span></p><p class=3D"MsoNormal"><a =
name=3D"_MailEndCompose"><span =
style=3D"color:#1F497D">&nbsp;</span></a></p>
<div>
<div style=3D"border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt =
0in 0in 0in"><p class=3D"MsoNormal"><b>From:</b> Justin Richer [<a =
href=3D"mailto:jricher@mit.edu">mailto:jricher@mit.edu</a>] <br>
<b>Sent:</b> Sunday, November 30, 2014 6:57 PM<br>
<b>To:</b> Anthony Nadalin<br>
<b>Cc:</b> <a href=3D"mailto:oauth@ietf.org">oauth@ietf.org</a><br>
<b>Subject:</b> Re: [OAUTH-WG] =
draft-ietf-oauth-introspection<o:p></o:p></p>
</div>
</div><p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p><p =
class=3D"MsoNormal">Tony, thanks for the comments. Your timing is great, =
as I was just today sitting down to polish the introspection draft into =
a proper WG document ready for the last-call tomorrow. I=92ve just =
posted the updated draft, and I think that you=92ll
 find it addresses your concerns. More direct answers inline:<span =
style=3D"font-size:12.0pt"><o:p></o:p></span></p>
<div><p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div><p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<div>
<div><p class=3D"MsoNormal">On Nov 30, 2014, at 1:01 PM, Anthony Nadalin =
&lt;<a href=3D"mailto:tonynad@microsoft.com">tonynad@microsoft.com</a>&gt;=
 wrote:<o:p></o:p></p>
</div><p class=3D"MsoNormal"><br>
<br>
<o:p></o:p></p>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<div><p class=3D"MsoNormal">Comments<o:p></o:p></p><p =
class=3D"MsoNormal">&nbsp;<o:p></o:p></p><p =
class=3D"MsoNormal">Intro<o:p></o:p></p><p class=3D"MsoNormal">=93about =
the authentication conext=94, not sure what this is since there is no =
authentication context in Oauth<o:p></o:p></p>
</div>
</blockquote>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">There are several authentication contexts in OAuth: =
the resource owner at the authorization endpoint, the client at the =
token endpoint, etc. Regardless, this is meant to
 be the context of the authorization decision, text now reads: "context =
in which the token was issued"<o:p></o:p></span></p>
</div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif"><br>
<br>
<o:p></o:p></span></p>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<div><p class=3D"MsoNormal">Use of Oauth2, mixed with use of Oauth, pick =
one <o:p></o:p></p>
</div>
</blockquote>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">All usage changed to =93OAuth 2.0=94 throughout the =
document, let me know if I missed any.<o:p></o:p></span></p>
</div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif"><br>
<br>
<o:p></o:p></span></p>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<div><p class=3D"MsoNormal">=93allows holder of a token to query=94 so =
anything/anyone that has a token can use this endpoint?<o:p></o:p></p>
</div>
</blockquote>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">Now reads authorized holder of the token and has =
stronger language and recommendations about requiring authorization on =
the endpoint to prevent public token fishing. This
 was already addressed in the security considerations section, but that =
has been propagated throughout the specification =
now.&nbsp;<o:p></o:p></span></p>
</div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif"><br>
<br>
<o:p></o:p></span></p>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<div><p class=3D"MsoNormal">&nbsp;<o:p></o:p></p><p =
class=3D"MsoNormal">Introspection Endpoint<o:p></o:p></p><p =
class=3D"MsoNormal">Use of Oauth2, mixed with use of Oauth, pick =
one<o:p></o:p></p>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
</div>
</blockquote>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">See above.<o:p></o:p></span></p>
</div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif"><br>
<br>
<br>
<o:p></o:p></span></p>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<div><p class=3D"MsoNormal">Introspection Request <o:p></o:p></p><p =
class=3D"MsoNormal">The endpoint SHOULD also require some form of =
authentication=94, what about some form of authorization ? Why do we =
have to have another endpoint that we have to manage and then have a =
management API draft?]<o:p></o:p></p>
</div>
</blockquote>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">This is now clearer that it needs to be an authorized =
protected resource. This authorization may be carried through a =
credential mechanism as defined in OAuth 2.0, through
 an access token, or through some other =
mechanism.&nbsp;<o:p></o:p></span></p>
</div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif"><br>
<br>
<o:p></o:p></span></p>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<div><p class=3D"MsoNormal">&nbsp;<o:p></o:p></p><p =
class=3D"MsoNormal">Token =96 is this any type of token ? how does the =
endpoint know that it can deal with this token type?
<o:p></o:p></p>
</div>
</blockquote>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">Clarified that it=92s either the access_token from =
the token endpoint or the refresh_token from the token endpoint. You can =
use this with other token types, but that=92s not
 defined in this spec which concerns itself with =
RFC6749/RFC6750.&nbsp;<o:p></o:p></span></p>
</div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif"><br>
<br>
<o:p></o:p></span></p>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<div><p class=3D"MsoNormal">So endpoint has to try to lookup token =
&nbsp;to determine if it can maybe find out something about the =
token?<o:p></o:p></p>
</div>
</blockquote>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">That=92s the idea, the protected resource is asking =
an authoritative source (the authorization server) about a given token. =
I had always thought it was obvious that the authorization
 server would have to be able to know something about the token in order =
to provide an introspection service, but since that seems to have been =
unclear to some I=92ve made it explicit in the security considerations =
section.&nbsp;<o:p></o:p></span></p>
</div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif"><br>
<br>
<o:p></o:p></span></p>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<div><p class=3D"MsoNormal">Can the one use the authorization code or =
does one have to get a token first?<o:p></o:p></p>
</div>
</blockquote>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">No, this is for tokens only. I don=92t see the point =
of introspecting an authorization code =97 those aren=92t sent to =
protected resources, they=92re sent to clients, which would
 in turn just hand it to the token endpoint to get a token. There=92s =
nothing else to find out about it.<o:p></o:p></span></p>
</div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif"><br>
<br>
<o:p></o:p></span></p>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<div><p class=3D"MsoNormal">&nbsp;Can I send a encrypted token and =
expect a proper response ?<o:p></o:p></p>
</div>
</blockquote>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">If the server can decrypt or otherwise understand the =
token, yes. I=92ve pointed out this requirement in the security =
considerations section.&nbsp;<o:p></o:p></span></p>
</div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif"><br>
<br>
<o:p></o:p></span></p>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<div><p class=3D"MsoNormal">What about a Proof of Possession Token? =
<o:p></o:p></p>
</div>
</blockquote>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">Yes, I think this fits great with PoP tokens, but =
those aren=92t defined well enough yet to say anything concrete. As the =
PoP work progresses, we can have an extension document
 to determine what needs to be done there. Note that we=92ll have to do =
the same thing with the Revocation RFC.<o:p></o:p></span></p>
</div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif"><br>
<br>
<o:p></o:p></span></p>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<div><p class=3D"MsoNormal">&nbsp;Introspection =
Response<o:p></o:p></p><p class=3D"MsoNormal">What is =93active=94 mean =
? Is this up to the server to determine ?
<o:p></o:p></p>
</div>
</blockquote>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">It means the token is live, hasn=92t been revoked, =
was actually issued by this server, isn=92t expired, and the protected =
resource that=92s asking has the right to know all that
 information. This is all up to the server to determine. If the server =
can=92t determine that information for its own tokens, it probably =
shouldn=92t be offering this service.<o:p></o:p></span></p>
</div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif"><br>
<br>
<o:p></o:p></span></p>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<div><p class=3D"MsoNormal">=93scope OPTIONAL=94, is this the scope in =
the token or is this the scope that the introspection endpoint sources =
may have ? It=92s unclear if all these return values are from the token =
or from the introspection endpoint sources ?<o:p></o:p></p>
</div>
</blockquote>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">These are the scopes of the token. All return values =
are, as stated, metadata about the token itself that is being queried =
against.<o:p></o:p></span></p>
</div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif"><br>
<br>
<o:p></o:p></span></p>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<div><p class=3D"MsoNormal">What error codes/conditions are there? Just =
the 400&nbsp; (bad request)?<o:p></o:p></p>
</div>
</blockquote>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">The errors are more clearly spelled out. Most of it =
involves bad client authentication (when client credentials are used), =
bad authorization (when access tokens are used
 to access the introspection endpoint itself), or the like. If the token =
being introspected isn=92t good, that=92s still a 200 response =97 the =
request is fine, but the token being introspected isn=92t active, which =
is what=92s returned. This isn=92t an error, it=92s a valid
 answer to the question of =93what is this token?=94 that=92s being =
asked every time introspection is called.<o:p></o:p></span></p>
</div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif"><br>
<br>
<o:p></o:p></span></p>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<div><p class=3D"MsoNormal">Can the endpoint return a encrypted response =
?<o:p></o:p></p>
</div>
</blockquote>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">That=92s outside the scope of this document. It =
returns JSON like the rest of OAuth.<o:p></o:p></span></p>
</div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif"><br>
<br>
<o:p></o:p></span></p>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<div><p class=3D"MsoNormal">What about PII such as user_id, aud =
?<o:p></o:p></p>
</div>
</blockquote>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">This is now covered in the Privacy Considerations =
section, which wasn=92t A Thing when this draft was first =
written.<o:p></o:p></span></p>
</div>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
<div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;=97 Justin<o:p></o:p></span></p>
</div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif"><br>
<br>
<o:p></o:p></span></p>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt"><p =
class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">_______________________________________________<br>
OAuth mailing list<br>
<a href=3D"mailto:OAuth@ietf.org">OAuth@ietf.org</a><br>
<a =
href=3D"https://www.ietf.org/mailman/listinfo/oauth">https://www.ietf.org/=
mailman/listinfo/oauth</a><o:p></o:p></span></p>
</blockquote>
</div><p class=3D"MsoNormal"><span =
style=3D"font-size:12.0pt;font-family:&quot;Times New =
Roman&quot;,serif">&nbsp;</span></p>
</div>
</div>
</div>

</blockquote></div><br><style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:#0563C1;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:#954F72;
	text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
	{mso-style-priority:34;
	margin-top:0in;
	margin-right:0in;
	margin-bottom:0in;
	margin-left:.5in;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
span.EmailStyle17
	{mso-style-type:personal;
	font-family:"Calibri",sans-serif;
	color:windowtext;}
span.EmailStyle18
	{mso-style-type:personal-reply;
	font-family:"Calibri",sans-serif;
	color:#1F497D;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-size:10.0pt;}
@page WordSection1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
	{page:WordSection1;}
/* List Definitions */
@list l0
	{mso-list-id:1005790463;
	mso-list-type:hybrid;
	mso-list-template-ids:-1812937448 67698703 67698713 67698715 =
67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
	{mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l0:level2
	{mso-level-number-format:alpha-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l0:level3
	{mso-level-number-format:roman-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:right;
	text-indent:-9.0pt;}
@list l0:level4
	{mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l0:level5
	{mso-level-number-format:alpha-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l0:level6
	{mso-level-number-format:roman-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:right;
	text-indent:-9.0pt;}
@list l0:level7
	{mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l0:level8
	{mso-level-number-format:alpha-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l0:level9
	{mso-level-number-format:roman-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:right;
	text-indent:-9.0pt;}
ol
	{margin-bottom:0in;}
ul
	{margin-bottom:0in;}
--></style></body></html>=

--Apple-Mail=_DBB884AC-34D1-4CEA-ADC1-B3CB701B0BF2--

--Apple-Mail=_7A8F6DAA-D6A2-4F12-BF0C-C8CBB0954526
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename=signature.asc
Content-Type: application/pgp-signature;
	name=signature.asc
Content-Description: Message signed with OpenPGP using GPGMail

-----BEGIN PGP SIGNATURE-----

iQEcBAEBAgAGBQJUfQrWAAoJEDPAngkbd+w99AQH/3HFF0g6CisDJu+gLE8jFb8c
weVun5j9yygptOOVsvFp1ChHsPn8OiEi5scitCz7hSmELXNkrfAGlC2u1Vq3tpRg
W9aA0q8J8xcvkowgyXlkvBx+7NP/UCotNTbdxfN4mF7BGvw85NjP9RfvY3/ZAbkG
8fz3Whx22UNhQhKeCa90iiabrDCPUpFBgiLoWRtdrRpBLKaLFQYn4cPIOrsG3++s
pcEtVPr2cCmHyLRM23EETkUaD7IwWdEB/7b2gKWnLO3H9UGQRVcV58AZ2QlsSZxh
Ll74vH1FF35GOp2LDMh57oWrr8tONwKPBdCZlv6yWRW0LXw2/v9kNAmpweXd5So=
=tTqZ
-----END PGP SIGNATURE-----

--Apple-Mail=_7A8F6DAA-D6A2-4F12-BF0C-C8CBB0954526--

