Subject: Re: [tram] FW: New Version Notification for draft-reddy-tram-turn-third-party-authz-00.txt

From: "Tirumaleswar Reddy (tireddy)" <[email-masked]>
Date: Tue, 18 Feb 2014 05:34:18 +0000

Hi Oleg,

Please see inline [TR1]

From: Oleg Moskalenko [mailto:[email-masked]]
Sent: Monday, February 17, 2014 11:59 PM
To: Tirumaleswar Reddy (tireddy)
Cc: [email-masked]<mailto:[email-masked]>
Subject: Re: [tram] FW: New Version Notification for draft-reddy-tram-turn-third-party-authz-00.txt

Hi Tiru
please see below as [Oleg]:

On Mon, Feb 17, 2014 at 3:10 AM, Tirumaleswar Reddy (tireddy) <[email-masked]<mailto:[email-masked]>> wrote:
Hi Oleg,

Thanks for the review. Please see inline [TR]

From: Oleg Moskalenko [mailto:[email-masked]<mailto:[email-masked]>]
Sent: Sunday, February 16, 2014 10:31 AM
To: Tirumaleswar Reddy (tireddy)
Cc: [email-masked]<mailto:[email-masked]>
Subject: Re: [tram] FW: New Version Notification for draft-reddy-tram-turn-third-party-authz-00.txt

Hi Tiru
I have some comments:
1) Section 4. Obtaining a Token Using OAuth, figure 4

I believe that the sequence of messages is incorrect. The TURN server most probably will contact the Authorization server AFTER it gets the Allocate request. But on the figure 4, it looks like it somehow can predict the incoming request. The correct sequence must be, in the general case:
   Access Token Request (1) from client to Auth server
   Access Token + Session Key (2) from Auth server to client
   Allocate request from client to TURN server (3)
   Get Token from TURN Server to Auth server (4)
   Token metadata from Auth Server to TURN server (5)
   Allocate response from TURN server to the client (6)
[TR] Good catch, fixed it. It got messed when we were changing from self-contained to handle token.

The sequence shown on the figure 4 is possible only is the Auth Server and TURN server are somehow closely integrated and that is unnecessary.
[TR] Yes, the AS and TURN server have to be integrated. There may be ways to standardize this, but this is not in the scope of this doc right away.

[Oleg]: I am afraid that if we require that AS and TURN to be provided by the same company, it may affect the adoption of this approach.

[TR1] Agreed, it may be true in few cases that the same company provides AS and TURN.

2) The document is saying that the client when communicating to the Auth Server uses HTTP requests with JSON (REST API ?). May be it would be helpful if the communication protocol between TURN server and Auth server would be mentioned, too.
[TR] Drafts in OAuth WG like https://tools.ietf.org/html/draft-richer-oauth-introspection-04 discuss the communication mechanism b/w Resource Server and Authorization server.  You may also want to look into http://www.ietf.org/mail-archive/web/oauth/current/msg08607.html which discusses such communication mechanism already implemented but for a different purpose. I guess it all worked because Resource server and Authorization server are developed by the same company but with this use case we may have to discuss if standardization is required for the communication mechanism.

[Oleg]: As I said, if the AS and TURN in practice will have to be provided by the same company, then that may be a problem - it will affect the standard adoption by the WebRTC community. I'll have to explore the current situation with the open-source OAuth servers - whether they provide a viable "introspection" protocol. I hope some protocol recommendations can be provided for third-party AS communications.

[TR1] Agreed.

3) Section 7.2:

   OAuth does not impose any limitation on the length of the access token but since
   STUN messages cannot exceed 548 bytes (Section 7.1 of [RFC5389]),
   access token length needs to be restricted to fit within the maximum
   STUN message size.

I am not sure that the STUN (Binding ?) max message size is relevant here and worth mentioning at all - because this doc is about TURN, and the TURN messages are often much larger than 548 bytes (especially when carrying the video traffic). So I see no relevance of the 548 limit to the new authentication standard. And that limitation of 548 bytes is applicable only to the cases when we suspect that the path MTU is really really low and that is an extremely rare case.
[TR] Good point. But RFC 5766 recommends to restrict the size (Section 2.7 Avoiding Fragmentation)

<snip>

   As a guideline, sending a maximum of 500 bytes of application data in
   a single TURN message (by the client on the client-to-server leg) or
   a UDP datagram (by the peer on the peer-to-server leg) will generally
   avoid IP fragmentation.

</snip>

[Oleg]: We recently had a discussion about that in WebRTC forum, with Justin. He is saying that the WebRTC client tools (Chrome) assume the minimum practical MTU as 1280 and that limit is used for media traffic. And he is right that this MTU is a real modern practical limit.

[TR1] And depending on the initial number of allocations (let's say X) it would consume that much additional bandwidth (X*Length of the token)

4) Are we sure that we want to limit the OAuth applicability only to the long-term credentials mechanism ? I see no technical or philosophical reasons why not to use it for short-term credentials mechanism, too. It would be a more "symmetric" approach.
[TR] what is the use case for short-term credential mechanism with TURN ?

[Oleg]: Currently WebRTC uses only the long-term credentials mechanism but still there is a TURN standard for the short-term mechanism. While I cannot provide any concrete example, I suppose there are some. And I believe that OAuth is orthogonal to the TURN auth mechanism used - they can be combined either way. So I see that coupling OAuth with the long-term mechanism is rather artificial.

[TR1] May be I am missing something
Are you referring to short-term mechanism defined in STUN ? (I don't see any discussion in http://tools.ietf.org/html/rfc5766 about this short-term mechanism)
The token given to the client has a lifetime and after the call is terminated the WebRTC server can revoke the token. This way the resources on the TURN server are no longer used by the client for some other purpose when not using WebRTC server.
This way it's short-term usage of the token only.

5) I'd put more definite wording how TURN server handles the token lifetime. What happens in the middle of the TURN session, is the auth token expires while the session is still active ? There may be two possible cases:
   - the token lifetime is applicable only to the session initiation procedure. When the TURN session has been already established, it can go indefinitely while the client is refreshing the session properly.
   - in second case when the token expires, the server rejects new requests from the client (in the same TURN session) until the client sends the new token data in re-authentication exchange.

I'd suggest the first case as an eisier case for the implementation.
[TR] The client MUST obtain a new token after the previously used one expires. As you point out an already established TURN session can continue, the new token is applicable for new requests.

[Oleg]: Tiru, I'd still like to hear a more definite language: what about "new requests" within the existing session ? They are allowed to use the old token - right ? When you are saying "new requests" you mean "new session allocation requests", right ?

[TR1]
These are my initial thoughts (we probably need more discussion on this topic):
[a] New token is definitely applicable for "new session allocation requests".  If the client uses the token after its lifetime then the TURN server MUST return error that the token is invalid which is in line with the steps defined in http://tools.ietf.org/html/rfc6749#section-1.5
[b] For "new request" within the existing session why not use the new token ? This way the client has to maintain only one token.  We can clarify in the draft that Refresh request can carry the new access token.
[c The actual lifetime provided by the server in the Allocate/refresh response should be less than or equal to the lifetime of the token.
Cheers,
-Tiru.

Regards,
Oleg

---

From: Oleg Moskalenko <[email-masked]>
Date: Mon, 17 Feb 2014 22:09:47 -0800

Hi Tiru

regarding the authentication mechanisms: yes, I am talking about section
10.1 of STUN RFC 5389:

http://tools.ietf.org/search/rfc5389#section-10.1

STUN defines both short-term mechanism and long-term mechanism. They differ
in the ways how the INTEGRITY field is calculated, and in some other minor
details. The names are somewhat unfortunate and confusing; the "short-term
mechanism" is NOT about short-lived ephemeral identities. The proposed
token-based authorization is equally applicable to both short-term and
long-term mechanisms - taking into account different INTEGRITY calculation
algorithms.

>From the pure technical point of view, I think that the token authorization
is equally applicable to the short-term mechanism than to the long-term
mechanism.

Of course the short-term mechanism is not very important in this context
because this proposed standard is mostly about WebRTC. But it would be
"cleaner" if the token authorization will be applied to the whole STUN/TURN
specs, not to a particular case of WebRTC. And may be some day WebRTC will
decide to adopt the short-term mechanism...

Regards,
Oleg

---

From: Oleg Moskalenko <[email-masked]>
Date: Mon, 17 Feb 2014 22:24:01 -0800

Hi Tiru

regarding the refresh requests, please below:

On Mon, Feb 17, 2014 at 9:34 PM, Tirumaleswar Reddy (tireddy) <
[email-masked]> wrote:

>   [Oleg]: Tiru, I'd still like to hear a more definite language: what
> about "new requests" within the existing session ? They are allowed to use
> the old token - right ? When you are saying "new requests" you mean "new
> session allocation requests", right ?
>
>
>
> [TR1]
>
> [a] New token is definitely applicable for "new session allocation
> requests".  If the client uses the token after its lifetime then the TURN
> server MUST return error that the token is invalid which is in line with
> the steps defined in http://tools.ietf.org/html/rfc6749#section-1.5
>
> [b] For "new request" within the existing session why not use the new
> token ? This way the client has to maintain only one token.  We can clarify
> in the draft that Refresh request can carry the new access token.
>
> [c The actual lifetime provided by the server in the Allocate/refresh
> response should be less than or equal to the lifetime of the token.
>
>
>
I re-read the appropriate section of STUN RFC 5389:

http://tools.ietf.org/search/rfc5389#section-10.2.2

and I have a feeling that the password in the existing TURN clients and
TURN servers is supposed to be cached for the lifetime of the session. If
we allow the token to be valid for the lifetime of the session that was
established with that token (for this particular session only) then
probably the draft specs will be easier to implement and it will be more
directly related to the original STUN RFC 5389.

But I have no strong opinion on that, it can be both ways.

Regards,
Oleg