> I would argue TLS basically prevents leakage and not replay

Doesn’t token binding, which is esentially a TLS extension, prevent some forms 
of token replay?

--
Jim Manico
@Manicode
Secure Coding Education
+1 (808) 652-3805

> On Nov 22, 2019, at 7:26 AM, Richard Backman, Annabelle 
> <richanna=40amazon....@dmarc.ietf.org> wrote:
> 
> 
> > Yes of course. But this is the HMAC *tag* not the original key.
> Sure. And if the client attenuates the macaroon, it is used as a key that the 
> client proves possession of by presenting the chained HMAC. Clients doing 
> DPoP aren’t proving possession of the “original key” (i.e., a key used to 
> generate the access token) either.
>  
> > Well, you don’t have to return a key from the token endpoint for a start.
> Yes, that’s what I meant by saying that it eliminates key negotiation. Though 
> I suppose it’s more correct to say that it inlines it. The AS still provides 
> a key, it just happens to be part of the access token.
>  
> Macaroons are an interesting pattern, but not because they’re not doing PoP. 
> Proof of possession is pretty core to the whole idea of digital signatures 
> and HMACs. What makes them interesting is the way they inline key 
> distribution. Whether or not they’re applicable to DPoP depends, ultimately, 
> on the use cases DPoP is targeting and the threats it is trying to mitigate.
>  
> – 
> Annabelle Richard Backman
> AWS Identity
>  
>  
> From: Neil Madden <neil.mad...@forgerock.com>
> Date: Friday, November 22, 2019 at 3:09 PM
> To: "Richard Backman, Annabelle" <richa...@amazon.com>
> Cc: Brian Campbell <bcampb...@pingidentity.com>, oauth <oauth@ietf.org>
> Subject: Re: [OAUTH-WG] New Version Notification for 
> draft-fett-oauth-dpop-03.txt
>  
> On 22 Nov 2019, at 01:42, Richard Backman, Annabelle <richa...@amazon.com> 
> wrote:
>  
> Macaroons are built on proof of possession. In order to add a caveat to a 
> macaroon, the sender has to have the HMAC of the macaroon without their 
> caveat.
>  
> Yes of course. But this is the HMAC *tag* not the original key. They can’t 
> change anything the AS originally signed. 
> 
> 
> The distinctive property of macaroons as I see it is that they eliminate the 
> need for key negotiation with the bearer. How much value this has over the AS 
> just returning a symmetric key alongside the access token in the token 
> request, I’m not sure.
>  
> Well, you don’t have to return a key from the token endpoint for a start. The 
> client doesn’t need to create and send any additional token. The whole thing 
> works with existing standards and technologies and can be incrementally 
> adopted as required. If RSes do token introspection already then they need 
> zero changes to support this.
> 
> 
> There are key distribution challenges with that if you are doing validation 
> at the RS, but validation at the RS using either approach means you’ve lost 
> protection against replay by the RS. This brings us back to a core question: 
> what threats are in scope for DPoP, and in what contexts?
>  
> Agreed, but validation at the RS is premature optimisation in many cases. And 
> if you do need protection against that the client can even append a 
> confirmation key as a caveat and retrospectively upgrade a bearer token to a 
> pop token. They can even do transfer of ownership by creating copies of the 
> original token bound to other certificates/public keys. 
>  
> Neil
>  
> 
> 
>  
> – 
> Annabelle Richard Backman
> AWS Identity
>  
>  
> From: OAuth <oauth-boun...@ietf.org> on behalf of Neil Madden 
> <neil.mad...@forgerock.com>
> Date: Friday, November 22, 2019 at 4:40 AM
> To: Brian Campbell <bcampb...@pingidentity.com>
> Cc: oauth <oauth@ietf.org>
> Subject: Re: [OAUTH-WG] New Version Notification for 
> draft-fett-oauth-dpop-03.txt
>  
> At the end of my previous email I mentioned that you can achieve some of the 
> same aims as DPoP without needing a PoP mechanism at all. This email is that 
> follow-up.
>  
> OAuth is agnostic about the format of access tokens and many vendors support 
> either random string database tokens or JWTs. But there are other choices for 
> access token format, some of which have more interesting properties. In 
> particular, Google proposed Macaroons a few years ago as a "better cookie" 
> [1] and I think they systematically address many of these issues when used as 
> an access token format.
>  
> For those who aren't familiar with them, Macaroons are a bit like a HS256 
> JWT. They have a location (a bit like the audience in a JWT) and an 
> identifier (an arbitrary string) and then are signed with HMAC-SHA256 using a 
> secret key. (There's no claims set or headers - they are very minimal). In 
> this case the secret key would be owned by the AS and used to sign 
> macaroon-based access tokens. Validating the token would be done via token 
> introspection at the AS.
>  
> The clever bit is that anybody at all can append "caveats" to a macaroon at 
> any time, but nobody can remove one once added. Caveats are restrictions on 
> the use of a token - they only ever reduce the authority granted by the 
> token, never expand it. The AS can validate the token and all the caveats 
> with its secret key. So, for example, if an access token was a macaroon then 
> the client could append a caveat to reduce the scope, or reduce the expiry 
> time, or reduce the audience, and so on.
>  
> The really clever bit is that the client can keep a copy of the original 
> token and create restricted versions to send to different resource servers. 
> Because HMAC is very cheap, the client can even do this before each and every 
> request. (This is what the original paper refers to as "contextual caveats"). 
> This means that a client can be issued a single access token from the AS with 
> broad scope and applicable to many different RS and can then locally create 
> restricted copies for each individual RS.
>  
> The relevance to DPoP is that the client could even append caveats equivalent 
> to "htm" and "htu" just before sending the access token to the RS, and maybe 
> add an "exp" for 5 seconds in the future, reduce the scope, and so on:
>  
>   newAccessToken = accessToken.withCaveats({
>     exp: now + 5seconds,
>     scope: "a b",
>     htm: "POST",
>     ....
>   });
>   httpClient.post(data, Authorization: Bearer newAccessToken);
>  
> Note that the client doesn't need anything extra here - no keys, extra tokens 
> etc. They just have the access token and a macaroon library.
>  
> The RS will see an opaque access token, send it to the AS for introspection. 
> The AS however, will see and validate the new caveats on the token and return 
> an introspection response with the restricted scope and expiry time, and 
> return the htm/htu restrictions that the RS can then enforce. 
>  
> For clients this is transparent until they want to take advantage of it and 
> then they can just use an off-the-shelf macaroon library. For the RS it is 
> also completely transparent. All the (relatively small) complexity lives in 
> the AS, which just has to be able to produce and verify macaroons and take 
> caveats into account when performing token introspection - e.g. the returned 
> scope should be the intersection of the original token scope and any scope 
> caveats. But I don't think this would be too much effort.
>  
> [1]: https://ai.google/research/pubs/pub41892
>  
> -- Neil
> 
> 
> 
> On 21 Nov 2019, at 06:23, Brian Campbell <bcampb...@pingidentity.com> wrote:
>  
> Yeah, suggestions and/or an MTI about algorithm support would probably be 
> worthwhile. Perhaps also some defined means of signaling when an unsupported 
> algorithm is used along with any other reason a DPoP is invalid or rejected. 
>  
> There are a lot of tradeoffs in what claims are required and what protections 
> are provided etc. The aim of what was chosen was to do just enough to provide 
> some reasonable protections against reuse or use in a different context while 
> being simple to implement and deploy.
>  
>  
> On Wed, Nov 20, 2019 at 6:34 AM Neil Madden <neil.mad...@forgerock.com> wrote:
> Thanks for the reply, Brian. 
>  
> Collecting my thoughts up here rather than responding blow by blow.
>  
> Public key signatures are simpler in some respects, more complex in others.. 
> There are currently 10 public key JWS signature schemes defined 
> (ES256/384/512, RS256/384/512, PS256/384/512, EdDSA) - does an RS potentially 
> have to support them all? If not, how do they negotiate algorithm support 
> with the client?
>  
> On the other hand, the ECDH scheme I proposed can be implemented by adapting 
> an existing ECDH-ES encryption support in a JWT library. For example, I 
> discovered while playing with this that our own internal library can 
> implement the full flow I described entirely via the existing public API [1], 
> so it's not necessarily as complex as it first looks. I even knocked up a 
> from-scratch implementation in WebCrypto (JavaScript) without too much code 
> [2].
>  
> But I admit that using an existing JWT library to sign a JWT with an existing 
> algorithm is even easier, and that counts for a lot. Perhaps we can make 
> concrete suggestions/requirements about algorithm support? e.g. "The RS MUST 
> support RS256 and SHOULD support EdDSA. Other algorithms MAY be supported." 
>  
> With regards to replay protection, I think there are at least two reasonable 
> positions:
>  
> 1. We assume that TLS is secure and don't try to defend against any 
> compromise at that level. (Clearly none of the TLS-based PoP mechanisms 
> survive if TLS is compromised, by definition). In this case the main attack 
> to defend against is a malicious RS replaying the access token elsewhere. 
> Simply signing the origin of the RS would be enough to prevent this attack, 
> while letting the client reuse the same JWT for many requests (and the RS to 
> cache the JWT validation). None of "jti", "htu", or "htm" seem relevant to 
> this model.
>  
> 2. We don't assume that TLS is secure (or it's not fully end-to-end) and try 
> to provide some defense in depth against a MitM attacker replaying a token 
> against the same RS. There is a graduated series of steps you can take here, 
> depending on how much you want to prevent this:
>    a. The DPoP token can be replayed for arbitrary requests to the same RS 
> but has a short time limit (e.g., exp claim or RS-enforced max lifetime from 
> iat)
>    b. The DPoP token can be replayed for the same request (htu/htm claims)
>    c. The DPoP token can't be replayed at all - either because of jti 
> blacklisting on the RS or a challenge-response protocol on each request.
>  
> (There are also variants such as including a hash of the request 
> body/headers, or encoding an ETag into the JWT).
>  
> I think either are reasonable design goals, but aiming for 2 adds more value. 
> I think aiming for 2a is a reasonable default baseline that allows the client 
> to reuse a DPoP token for a few requests, reducing the cost of the signature 
> (and the RS can cache the validated JWT). Support for 2b or 2c can then be 
> listed as optional additions.
>  
> PS - 2a/2b can be achieved without PoP. I'll save that for another email in 
> the next few days though.
>  
> [1]: https://gist.github.com/NeilMadden/685ea66fb79d37a50c2310f853bd9496
> [2]: https://gist.github.com/NeilMadden/70e1b232a3b273de02ed731eb36ec4a7
>  
>  
> -- Neil
> 
> 
> 
> On 19 Nov 2019, at 07:43, Brian Campbell <bcampb...@pingidentity.com> wrote:
>  
>  
> 
> On Thu, Nov 14, 2019 at 7:20 PM Neil Madden <neil.mad...@forgerock.com> wrote:
> I can't attend Singapore either in person or remotely due to other 
> commitments. I broadly support adoption of this draft, but I have some 
> comments/suggestions about it.
>  
> Thanks Neil. And sorry to hear that you won't be in Singapore. This kind of 
> stuff is definitely more easily discussed in person (for me anyway). But I'll 
> try and comment on your comments here as best I can. I also plan to also 
> mention them in the Wednesday and/or Thursday presentation. 
>  
> Section 2 lists the main objective as being to harden against 
> compromised/malicious AS or RS, which may attempt to replay captured tokens 
> elsewhere. While this is a good idea, a casual reader might wonder why a 
> simple audience claim in the access token/introspection response is not 
> sufficient to prevent this. Because interactions between the client and RS 
> are supposed to be over TLS, is the intended threat model one in which these 
> protections have broken down? ("counterfeit" in the description suggests 
> this). Or is the motivation that clients want to get a single broad-scoped 
> access token (for usability/performance reasons) and use it to access 
> multiple resource servers without giving each of them the ability to replay 
> the token to the other servers? Or are we thinking of a phishing-type 
> vulnerability were a general-purpose client might accidentally visit a 
> malicious site which prompts for an access token that the client then blindly 
> goes off and gets? (UMA?) It's not clear to me which of these scenarios is 
> being considered, so it would be good to tighten up this section.
>  
> It is admittedly a bit loose and I agree it'd be good to tighten it up. But 
> part of why it's loose is that it tries to offer some protections for all 
> those scenarios and more such as a general lost/stolen token. It's 
> effectively trying to provide as many of the same types of 
> protections/assurances that you'd get with TLS based PoP mechanisms (like 
> OAuth MTLS or Token binding) to the extent that can be done at the HTTP 
> application layer. Which can't realistically be exactly the same but can 
> maybe be kinda close while actually being accessible and implementable 
> because it's all done at the application layer. There are trade-offs, of 
> course, and the document writers have endeavored to find a good balance in 
> the trade-off decisions we've made. But that doesn't mean they are 
> necessarily the right decisions or are closed to discussion. To the casual 
> reader I would say that it turns out that getting an appropriate simple 
> audience claim into an access token isn't nearly as simple as it might seem. 
> And while it will prevent RS to RS replay (as long as both RSs aren't legit 
> audiences) it doesn't help with preventing the use of tokens stolen or leaked 
> by other means (including for refresh tokens issued to public clients). 
>  
> Another potential motivation is for mobile apps. Some customers of ours would 
> like to tie access/refresh tokens to private key material generated on a 
> secure element in the device, that can only be accessed after local biometric 
> authentication (e.g. TouchID/FaceID on iOS). I have suggested using mTLS 
> cert-bound tokens for this, but have heard some pushback due to the 
> difficulty of configuring support for client certs across diverse 
> infrastructure. A simple JWT-based solution like DPoP could fill this need.
>  
> It's maybe not stated in the draft but this kind of thing is among the 
> objectives (in my mind anyway). 
>  
>  
> My main concerns with the draft though are about efficiency and scalability 
> of the proposed approach:
>  
> 1. The requirement to use public key signatures, along with the anti-replay 
> nonce, means that the RS is required to perform an expensive signature 
> verification check on every request. That is not going to scale up well. 
> While there are more efficient schemes like Ed25519 now, these are still 
> typically an order of magnitude slower than HMAC and the latency and CPU 
> overhead is likely to be a non-starter for many APIs (especially when you're 
> billed by CPU usage). Public key signatures are also notoriously fragile (see 
> e.g. the history of nonce reuse/leakage vulnerabilities in ECDSA or 
>  
> Yes, asymmetric is more processing intensive than symmetric. But if you take 
> away the distributed replay check (see next response), it will scale out just 
> fine. I'm not so sure latency is a real issue here - while these operations 
> are an order of magnitude slower we're still talking about times that are not 
> perceptible to a human. CPU usage/cost is a part of a trade-off for the 
> simplicity afforded by public/private keys.  And it is significantly simpler. 
> The design you sketched out is admittedly quite clever but it's not even in 
> the same ballpark with respect to complexity. And, as you pointed out, the 
> other suggestion around symmetric keys has rather different security 
> properties while still adding complexity. Adding symmetric key support isn't 
> something that can just be added on easily. 
>  
>  
> 2. The advice for the RS to store a set of previously used nonces to prevent 
> replay will also hamper scalability, especially in large deployments where 
> such state would need to be replicated to all servers (or use sticky load 
> balancing, which comes with its own problems). This violates the 
> statelessness of HTTP, and it also potentially breaks idempotency of 
> operations: Think of the case where the JWT validation and replay protection 
> is done at an API gateway but then the call to the backend API server fails 
> for a transient reason. The client (or a proxy/library) cannot simply replay 
> the (idempotent) request in this case because it will be rejected by the 
> gateway. It must instead recreate the DPoP JWT, incurring additional 
> overheads.
>  
> The actual value of replay checking on jti is somewhat questionable. The DPoP 
> JWT only transits between client and server so a TLS MITM is likely needed to 
> steal a DPoP JWT. But we are assuming TLS works here. And an active MITM 
> could thwart this check by just being first to present DPoP JWT. I think the 
> jti check made its way into the draft mostly because it seemed like something 
> was needed to try and bring it closer to the TLS PoP models. Being aware of 
> the scalability concerns, I did endeavor to write the text in such a way so 
> as to leave some wiggle room in implementations/deployments with text like 
> '"jti" SHOULD be used by the server for replay detection and prevention` and 
> [ensure that] 'within a reasonable consideration of accuracy and resource 
> utilization, a JWT with the same "jti" value has not been received 
> previously'. The idea being that using something eventually consistent or 
> even local only to the runtime instance would be permissible. Perhaps that 
> allowance and the rational could be made more clear? Or would you suggest to 
> do away with the jti replay stuff al? Or something else? 
>  
> 3. Minor: The use of a custom header for communicating the DPoP proof will 
> require additional CORS configuration on top of that already done for the 
> Authorization header, and so adds a small amount of additional friction for 
> adoption. Given that CORS configuration changes often require approval by a 
> security team, this may make more of an impact than you'd expect.
>  
> Feels really minor. I mean, we could try to roll everything up under one 
> header. But it does seem unwarranted and would complicate things - at least 
> in the model we've got now where the proof is sent the same way ono all types 
> of requests. 
>  
>  
> It's also not clear to me exactly what threat the anti-replay nonce is 
> protecting against. It does nothing against the replay scenario discussed in 
> section 2, as I understand it - which really seems to be more of a MitM 
> scenario. Given that the connection between the client and the RS is supposed 
> to be over TLS, and TLS is already protected against replay attacks, I think 
> this part needs to be better motivated given the obvious costs of 
> implementing it.
>  
> I have a tentative suggestion for an alternative design which avoids these 
> problems, but at a cost of potentially more complexity elsewhere. I'll 
> summarise it here for consideration:
>  
> 1. The client obtains an access token in the normal way. When calling the 
> token endpoint it provides an EC/okp public key as the confirmation key to be 
> associated with the access/refresh tokens.
>  
> 2. The first time the client calls an RS it passes its access token in the 
> Authorization: Bearer header as normal. (If the RS doesn't support DPoP then 
> this would just succeed and no further action is required by the client - 
> allowing clients to opportunistically ask for DPoP without needing a priori 
> knowledge of RS capabilities).
>  
> 3. The RS introspects the access token and learns the EC public key 
> associated with the access token. As there is no DPoP proof with the access 
> token, the RS will generate a challenge in the following way:
>     o The RS generates an ephemeral EC key pair for the same curve as the 
> confirmation key (e.g. P-256 or X25519).
>     o The RS stores the ephemeral private key somewhere, associated with this 
> access token (see below for a scalable implementation choice)
>     o The RS encodes the ephemeral public key into a JWK (epk) and 
> base64url-encodes it. It uses this as a challenge to the client by sending 
> back a 401 response with WWW-Authenticate: DPoP <encoded-epk>
>  
> 4. The client decodes the epk challenge and performs an ECDH key agreement 
> between its private key and the challenge epk as per the method described for 
> the existing JWA ECDH-ES encryption algorithm. Rather than deriving an AES 
> key however, it derives a HMAC key for HS256. The "apu" value is set to the 
> access token (string value as ASCII bytes) and the "apv" value is set to the 
> hostname of the RS (e.g. "api.example.com"). This ensures that the derived 
> key is cryptographically bound to the context in which it is used.
>  
> 5. The client uses the HMAC key to create a DPoP proof JWT much like the one 
> in the current draft, but signed using the HS256 key. If a "kid" field was 
> present in the challenge JWK sent by the RS then the same value MUST be used 
> in the "kid" header of this discharge JWT. It retries its original request 
> sending Authorization: DPoP <hmac-jwt> at=<access_token>.
>  
> 6. The RS uses its stored ephemeral private key to derive the same HMAC key 
> and verify the DPoP discharge JWT. If it validates and all fields are correct 
> then the request is allowed.
>  
> Efficient implementation trick:
> Because the client is required to copy and "kid" value from the challenge 
> JWK, the RS can preemptively carry out the ECDH key agreement immediately and 
> generate the derived HMAC key. The RS can then encrypt this derived key using 
> a local authenticated encryption key (e.g. AES-GCM) and use that encrypted 
> value as the "kid" value in the challenge (perhaps along with some context or 
> an expiry time). That way the RS only needs to decrypt this kid value rather 
> than performing the ECDH key agreement on every request. This also avoids the 
> need for the RS to store any per-client state locally.
>  
> The challenge-response nature of the scheme prevents traditional replay 
> attacks in the case where a DPoP discharge JWT is accidentally leaked through 
> server logs or some other flaw, without needing to store nonces on the 
> server.. Using the RS's hostname in the key derivation process prevents mitm 
> attacks in a similar way to how FIDO/WebAuthn prevents this. Most 
> importantly, once a HS256 key has been derived between a client and RS they 
> can reuse that key for multiple requests, reducing the overhead of the ECDH 
> key agreement step. Either side can decide as a matter of policy how long to 
> let this occur and when to trigger a fresh challenge-response.
>  
> Because this fits within the standard HTTP authentication framework, it also 
> requires no additional CORS configuration and is relatively easy to plug in 
> to existing HTTP client libraries.
>  
> The main downside of this approach to me is the fact that you can't simply 
> reuse an existing JWT library to implement it, and so it will take time for 
> client libs to develop. (Although I think this might be achievable now with 
> existing *COSE* libraries). This would increase the risk of people 
> hand-rolling solutions, rather than using well-tested libraries. On the other 
> hand, it uses fairly widely supported primitives so e.g. an implementation 
> using WebCrypto is probably only a few dozen lines of code.
>  
> -- Neil
>  
> 
> 
> 
> On 31 Oct 2019, at 19:20, Brian Campbell 
> <bcampbell=40pingidentity....@dmarc.ietf.org> wrote:
>  
> Hello WG, 
>  
> Just a quick note to let folks know that -03 of the DPoP draft was published 
> earlier today. The usual various document links are in the forwarded message 
> below and the relevant snippet from the doc history with a summary of the 
> changes is included here for convenience. 
>  
> Hopefully folks will have time to read the (relativity) short document before 
> the meeting(s) in Singapore where (spoiler alert) I plan to ask that the WG 
> consider adoption of the draft. 
>  
> Thanks,
> 
>  -03
>    o  rework the text around uniqueness requirements on the jti claim in
>       the DPoP proof JWT
>    o  make tokens a bit smaller by using "htm", "htu", and "jkt" rather
>       than "http_method", "http_uri", and "jkt#S256" respectively
>    o  more explicit recommendation to use mTLS if that is available
>    o  added David Waite as co-author
>    o  editorial updates
>  
> ---------- Forwarded message ---------
> From: <internet-dra...@ietf.org>
> Date: Thu, Oct 31, 2019 at 11:53 AM
> Subject: New Version Notification for draft-fett-oauth-dpop-03.txt
> To: Torsten Lodderstedt <tors...@lodderstedt.net>, Michael Jones 
> <m...@microsoft.com>, John Bradley <ve7...@ve7jtb.com>, Brian Campbell 
> <bcampb...@pingidentity.com>, David Waite <da...@alkaline-solutions.com>, 
> Daniel Fett <m...@danielfett.de>
> 
> 
> 
> A new version of I-D, draft-fett-oauth-dpop-03.txt
> has been successfully submitted by Brian Campbell and posted to the
> IETF repository.
> 
> Name:           draft-fett-oauth-dpop
> Revision:       03
> Title:          OAuth 2.0 Demonstration of Proof-of-Possession at the 
> Application Layer (DPoP)
> Document date:  2019-10-30
> Group:          Individual Submission
> Pages:          15
> URL:            
> https://www.ietf.org/internet-drafts/draft-fett-oauth-dpop-03.txt
> Status:         https://datatracker.ietf.org/doc/draft-fett-oauth-dpop/
> Htmlized:       https://tools.ietf.org/html/draft-fett-oauth-dpop-03
> Htmlized:       https://datatracker.ietf.org/doc/html/draft-fett-oauth-dpop
> Diff:           https://www.ietf.org/rfcdiff?url2=draft-fett-oauth-dpop-03
> 
> Abstract:
>    This document describes a mechanism for sender-constraining OAuth 2.0
>    tokens via a proof-of-possession mechanism on the application level.
>    This mechanism allows for the detection of replay attacks with access
>    and refresh tokens.
> 
> 
> 
> 
> Please note that it may take a couple of minutes from the time of submission
> until the htmlized version and diff are available at tools.ietf.org.
> 
> The IETF Secretariat
> 
> 
> CONFIDENTIALITY NOTICE: This email may contain confidential and privileged 
> material for the sole use of the intended recipient(s). Any review, use, 
> distribution or disclosure by others is strictly prohibited..  If you have 
> received this communication in error, please notify the sender immediately by 
> e-mail and delete the message and any file attachments from your computer. 
> Thank you._______________________________________________
> OAuth mailing list
> OAuth@ietf.org
> https://www.ietf.org/mailman/listinfo/oauth
>  
> 
> CONFIDENTIALITY NOTICE: This email may contain confidential and privileged 
> material for the sole use of the intended recipient(s). Any review, use, 
> distribution or disclosure by others is strictly prohibited.  If you have 
> received this communication in error, please notify the sender immediately by 
> e-mail and delete the message and any file attachments from your computer. 
> Thank you.
>  
> 
> CONFIDENTIALITY NOTICE: This email may contain confidential and privileged 
> material for the sole use of the intended recipient(s). Any review, use, 
> distribution or disclosure by others is strictly prohibited.  If you have 
> received this communication in error, please notify the sender immediately by 
> e-mail and delete the message and any file attachments from your computer. 
> Thank you.
>  
> _______________________________________________
> OAuth mailing list
> OAuth@ietf.org
> https://www.ietf.org/mailman/listinfo/oauth
_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to