John,

I am a little bit confused :)
Are you talking about a SPA type of client application and concerning the
POST will reload the browser DOM from the RS domain? If that is the case,
even the current spec using a redirect with fragment in URL will have the
same behavior, right?

On Fri, Jul 1, 2016 at 4:06 PM, John Bradley <[email protected]> wrote:

> I take it that Web-hosted client resource is part of the client.
>
> I think perhaps you have client and resource serve r mixed up a bit in
> your diagram.
>
> Yes you could do that but it is not a great way to build the client as it
> will blow away context.
> You can do it but people generally want to start the application in the
> browser first and then call out to the IdP  in a iFrame.
>
> What you propose would work more or less.  I don’t see it as a pattern
> that I would necessarily recommend over the current fragment encoding.
>
> If we mover to post message it would include API  for logout and session
> management, not just login.
>
> John B.
>
>
> On Jul 1, 2016, at 6:43 PM, Liyu Yi <[email protected]> wrote:
>
> Understood there is an Authorization Code grant type; here I am more
> focusing on the Implicit grant type.
>
> also when I mentioned POST, I did not mean postMessage, it is simply the
> HTTP POST. Specifically it is more like this ...
>
>
>
> 4.2 <https://tools.ietf.org/html/rfc6749#section-4.2>.  Implicit Grant 
> (modified)
>
>      +----------+
>      | Resource |
>      |  Owner   |
>      |          |
>      +----------+
>           ^
>           |
>          (B)
>      +----|-----+          Client Identifier     +---------------+
>      |         -+----(A)-- & Redirection URI --->|               |
>      |  User-   |                                | Authorization |
>      |  Agent  -|----(B)-- User authenticates -->|     Server    |
>      |          |                                |               |
>      |          |<---(C)- Response embedded JS -<|               |
>      |          |          with Access Token     +---------------+
>      |          |            in JS content, which will be posted to Resource 
> Server
>      |          |                                +---------------+
>      |          |----(D)-- JS post to RS URI --->|   Web-Hosted  |
>      |          |         with Access Token      |     Client    |
>      |          |                                |    Resource   |
>      |     (F)  |<---(E)----- RS Script --------<|               |
>      |          |         with Access Token      +---------------+
>      +-|--------+
>        |    |
>       (A)  (G) Access Token
>        |    |
>        ^    v
>      +---------+
>      |         |
>      |  Client |
>      |         |
>      +---------+
>
>
>
>                        Figure 4: Implicit Grant Flow
>
>
>    The flow illustrated in Figure 4 includes the following steps:
>
>    (A)  The client initiates the flow by directing the resource owner's
>         user-agent to the authorization endpoint.  The client includes
>         its client identifier, requested scope, local state, and a
>         redirection URI to which the authorization server will send the
>         user-agent back once access is granted (or denied).
>
>    (B)  The authorization server authenticates the resource owner (via
>         the user-agent) and establishes whether the resource owner
>         grants or denies the client's access request.
>
>    (C)  Assuming the resource owner grants access, the authorization
>         server responds with a JavaScript logic which automatically posts to
>         "redirection" URI provided earlier.  The JavaScript includes
>         the access token in the URI fragment.
>
>    (D)  The user-agent does the post with the access token. Granted,
>
>                   user agent can actually do post without the access token  
> in a different iframe,
>
>                   then use postMessage to pass the token over, but I do not 
> see why get it need that compexity.
>
>
>
> On Fri, Jul 1, 2016 at 3:13 PM, Josh Mandel <[email protected]> wrote:
>
>> Thanks John! Yes, we're following the CORS based flow you've described
>> below (though I should note that the actual redirection back to the client
>> could be a 302, or could be a simple Web link that the user follows from an
>> authorization page; this is up to the authorization server).
>>
>> Overall I don't argue that this flow is "more secure" than the implicit
>> flow -- though I believe it does help client developers avoid some common
>> pitfalls. (For example, clients that, through careless programming or poor
>> understanding of the spec, fail to validate incoming "state" are still not
>> susceptible to arbitrary token injection, which means at least they won't
>> readily be tricked into using a token designated for an entirely different
>> client. With poorly written implicit flow clients, this is an issue.)
>>
>> That said, I wasn't aiming to discuss the relative security; just wanted
>> to make sure I knew what you meant by "won't work well".
>>
>> Thanks again!
>>
>> -Josh
>> On Jul 1, 2016 18:02, "John Bradley" <[email protected]> wrote:
>>
>>> I am making a distinction between a browser talking to a Web server that
>>> is acting as a OAuth Client POST response mode = good , and a oauth client
>>> running in the browser user agent as a Java script application (that can’t
>>> directly capture a POST response back to the server)
>>>
>>> So it depends on where the client is actually running.
>>>
>>> Are you saying that you are using a 302 redirect from the authorization
>>> endpoint back to the server hosting the JS and then loading the JS
>>> including the code and then using CORES  to exchange the code for a AT?
>>>
>>> You can do that but I don’t think a public client like that is more
>>> secure than just using the fragment encoded response and is more work.
>>> It also may give the server a false sense of security.
>>>
>>> John B.
>>>
>>> On Jul 1, 2016, at 5:52 PM, Josh Mandel <[email protected]> wrote:
>>>
>>> I think the confusion here is that I'm not using HEART's OAuth profiles
>>> :-)
>>>
>>> I'm using the SMART profiles, where we do specify the use of an
>>> authorization code grant even for browser-based public clients (in which
>>> case, no client_secret is issued or used). I'm just trying to understand
>>> your perspective eon why this "won't work well". Perhaps you didn't mean
>>> this comment to refer to browser-based OAuth clients generally?
>>>
>>>   -Josh
>>>
>>> On Fri, Jul 1, 2016 at 5:45 PM, John Bradley <[email protected]> wrote:
>>>
>>>> I don’t think the post response mode is supported by heart so I suspect
>>>> that we are talking about different things.
>>>>
>>>> You are probably using the supported code flow that uses a 302 get to
>>>> return the code to the OAuth client on the server.
>>>> The Web server is then acting as a confidential client to exchange the
>>>> code via a POST (different POST) with the AS token_endpoint.
>>>>
>>>> The Token endpoint will return a access token (AT) and optional refresh
>>>> token (RT).
>>>>
>>>> The web page may be getting the server to make the OAuth calls on it’s
>>>> behalf to the Resource Server, or possibly you are passing the AT from the
>>>> server back to a Java script app that is using CORES to make calls directly
>>>> to the RS without going through the Web server.
>>>>
>>>> Passing the AT back to the user agent from the client is not
>>>> recommended.
>>>>
>>>> For in browser clients where the JS is using the AT to make the calls
>>>> directly to the RS via CORES the recommended approach is to use the
>>>> fragment encoded response via a 302 to deliver the AT directly to the
>>>> client (It never hits the backend Web server).
>>>>
>>>> However I believe In browser OAuth clients are not currently supported
>>>> in HEART, so I am not quite sure what you are doing.
>>>>
>>>> Perhaps Justin has a better answer.
>>>>
>>>> John B.
>>>>
>>>>
>>>> On Jul 1, 2016, at 5:33 PM, Josh Mandel <[email protected]> wrote:
>>>>
>>>> John,
>>>>
>>>> I appreciate your response. I'm hoping you can clarify why you say that
>>>> "HTTP POST... won't work well for... [a] single page OAuth client"?
>>>>
>>>> We commonly build single-page apps that act as OAuth clients for SMART
>>>> (e.g. this sample app
>>>> <https://github.com/smart-on-fhir/sample-apps/tree/9cd49fe5753a70795c73e1fe58297591c23ca591/authorize>
>>>>  ),
>>>> and we've had good experience with the technique. Could you elaborate?
>>>>
>>>>   -J
>>>>
>>>> On Fri, Jul 1, 2016 at 5:26 PM, John Bradley <[email protected]> wrote:
>>>>
>>>>> HEART only supports web server clients at the moment.   That might
>>>>> change in future to support native apps if that an be made to support the
>>>>> security requirements of Heath IT.
>>>>>
>>>>> So the thing HTTP POST responses won’t work well for is a type of in
>>>>> browser single page OAuth client.  That still needs fragment encoded
>>>>> responses or the new post-message Java Script API approach.
>>>>>
>>>>> John B.
>>>>>
>>>>>
>>>>> On Jul 1, 2016, at 5:16 PM, Josh Mandel <[email protected]> wrote:
>>>>>
>>>>> Thanks Justin,
>>>>>
>>>>> To clarify: John's comment and my question were about POST. (I do
>>>>> understand the behavior of HTTP POST and of window.postMessage; these are
>>>>> totally different things.) From my perspective in SMART Health IT, we use
>>>>> the OAuth 2.0 authorization code flow, including HTTP POST, in our 
>>>>> authorization
>>>>> spec <http://docs.smarthealthit.org/authorization/> even for public
>>>>> clients, and it has worked very well for us, with about a dozen electronic
>>>>> health record servers supporting this approach. That's why I was curious 
>>>>> to
>>>>> hear John's perspective about limitations.
>>>>>
>>>>>   -J
>>>>>
>>>>> On Fri, Jul 1, 2016 at 5:09 PM, Oleg Gryb <[email protected]> wrote:
>>>>>
>>>>>> > POST will send things to the server, which isn’t desirable if your
>>>>>> client is solely in the browser
>>>>>> Why it's not desirable, assuming that we disregard performance? You
>>>>>> can generate HTTP POST from JS, e.g. through an AJAX call. What is wrong
>>>>>> with this?
>>>>>>
>>>>>>
>>>>>> ------------------------------
>>>>>> *From:* Justin Richer <[email protected]>
>>>>>> *To:* Josh Mandel <[email protected]>
>>>>>> *Cc:* Oleg Gryb <[email protected]>; "<[email protected]>" <[email protected]>;
>>>>>> Liyu Yi <[email protected]>
>>>>>> *Sent:* Friday, July 1, 2016 2:00 PM
>>>>>>
>>>>>> *Subject:* Re: [OAUTH-WG] Security concern for URI fragment as
>>>>>> Implicit grant
>>>>>>
>>>>>> POST will send things to the server, which isn’t desirable if your
>>>>>> client is solely in the browser. postMessage is a browser API and not to 
>>>>>> be
>>>>>> confused with HTTP POST. postMessage messages stay (or can stay) within 
>>>>>> the
>>>>>> browser, which is the intent here.
>>>>>>
>>>>>>  — Justin
>>>>>>
>>>>>> On Jul 1, 2016, at 4:56 PM, Josh Mandel <[email protected]> wrote:
>>>>>>
>>>>>> John,
>>>>>>
>>>>>> Could you clarify what you mean by "POST doesn't really work"? Do
>>>>>> you just mean that CORS support (e.g., http://caniuse.com/#feat=cors)
>>>>>> isn't universal, or something more?
>>>>>>
>>>>>> On Fri, Jul 1, 2016 at 4:51 PM, John Bradley <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>> Yes but POST doesn't really work for in browser apps.
>>>>>>
>>>>>> If it is a server app it should be using the code flow with GET or
>>>>>> POST as you like.
>>>>>>
>>>>>> If we do a  post message based binding it will be targeted at in
>>>>>> browser applications.
>>>>>>
>>>>>> John B.
>>>>>>
>>>>>> On Fri, Jul 1, 2016 at 4:42 PM, Liyu Yi <[email protected]> wrote:
>>>>>>
>>>>>> BTW, I do not see any significant performance concerns for post.
>>>>>> Parsing and executing the Javascript logic for post operation will be on
>>>>>> the client side, no extra server load is introduced.
>>>>>>
>>>>>> Plus post will remove the size restriction of the URL length.
>>>>>>
>>>>>> -- Liyu
>>>>>>
>>>>>> On Fri, Jul 1, 2016 at 1:35 PM, Liyu Yi <[email protected]> wrote:
>>>>>>
>>>>>> Thanks for the great comments and advices.
>>>>>>
>>>>>> I think it is a good idea for the working group to revise the
>>>>>> fragment part in the spec, since there might be public available tools
>>>>>> already implemented this approach and people can end up with a solution
>>>>>> with serious security loopholes.
>>>>>>
>>>>>> The re-append issue can be mitigate by a logic on Resource Server
>>>>>> which carefully re-writes/removes the fragment in any redirect, if the 
>>>>>> the
>>>>>> redirect can not be avoided.
>>>>>>
>>>>>> -- Liyu
>>>>>>
>>>>>>
>>>>>> On Fri, Jul 1, 2016 at 11:33 AM, John Bradley <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>> This behaviour started changing around 2011
>>>>>>
>>>>>> From HTTP/1.1
>>>>>> See https://tools.ietf.org/html/rfc7231#section-7.1.2I
>>>>>>       f the Location value provided in a 3xx (Redirection) response
>>>>>> does
>>>>>>
>>>>>>    not have a fragment component, a user agent MUST process the
>>>>>>    redirection as if the value inherits the fragment component of the
>>>>>>    URI reference used to generate the request target (i.e., the
>>>>>>    redirection inherits the original reference's fragment, if any).
>>>>>>
>>>>>>    For example, a GET request generated for the URI reference
>>>>>>    "http://www.example.org/~tim"; might result in a 303 (See Other)
>>>>>>    response containing the header field:
>>>>>>
>>>>>>      Location: /People.html#tim
>>>>>>
>>>>>>    which suggests that the user agent redirect to
>>>>>>    "http://www.example.org/People.html#tim”
>>>>>>
>>>>>>
>>>>>>    Likewise, a GET request generated for the URI reference
>>>>>>    "http://www.example.org/index.html#larry"; might result in a 301
>>>>>>    (Moved Permanently) response containing the header field:
>>>>>>
>>>>>>      Location: http://www.example.net/index.html
>>>>>>
>>>>>>    which suggests that the user agent redirect to
>>>>>>    "http://www.example.net/index.html#larry";, preserving the original
>>>>>>    fragment identifier.
>>>>>>
>>>>>>
>>>>>>
>>>>>> This blog also explores the change.
>>>>>>
>>>>>> https://blogs.msdn.microsoft.com/ieinternals/2011/05/16/url-fragments-and-redirects/
>>>>>>
>>>>>>
>>>>>> On Jul 1, 2016, at 1:05 PM, Oleg Gryb <[email protected]> wrote:
>>>>>>
>>>>>> "Browsers now re-append  fragments across 302 redirects unless they
>>>>>> are explicitly cleared this makes fragment encoding less safe than it was
>>>>>>  when originally specified" - thanks Jim. Looks like a good reason for
>>>>>> vetting this flow out.
>>>>>>
>>>>>> John,
>>>>>> Please provide more details/links about re-appending fragments.
>>>>>>
>>>>>> Thanks,
>>>>>> Oleg.
>>>>>>
>>>>>>
>>>>>> ------------------------------
>>>>>> *From:* Jim Manico <[email protected]>
>>>>>> *To:* Oleg Gryb <[email protected]>
>>>>>> *Cc:* "[email protected]" <[email protected]>; Liyu Yi <[email protected]>
>>>>>> *Sent:* Thursday, June 30, 2016 10:25 PM
>>>>>> *Subject:* Re: [OAUTH-WG] Security concern for URI fragment as
>>>>>> Implicit grant
>>>>>>
>>>>>> Oleg! Hello! Great to see you pop up here with a similar concern.
>>>>>>
>>>>>> John Bradley just answered this thread with the details I was looking
>>>>>> for (thanks John, hat tip your way).
>>>>>>
>>>>>> He also mentioned details about fragment leakage:
>>>>>>
>>>>>> "Browsers now re-append  fragments across 302 redirects unless they
>>>>>> are explicitly cleared this makes fragment encoding less safe than it was
>>>>>> when originally specified"
>>>>>>
>>>>>> Again, I'm new here but I'm grateful for this conversation.
>>>>>>
>>>>>> Aloha,
>>>>>> --
>>>>>> Jim Manico
>>>>>> @Manicode
>>>>>>
>>>>>> On Jul 1, 2016, at 1:24 AM, Oleg Gryb <[email protected]> wrote:
>>>>>>
>>>>>> We've discussed access tokens in URI back in 2010 (
>>>>>> https://www.ietf.org/mail-archive/web/oauth/current/msg04043.html).
>>>>>> There were two major objectives when I was saying that it's not secure:
>>>>>>
>>>>>> 1. Fragment is not sent to a server by a browser. When I've asked if
>>>>>> this is true for every browser in the world, nobody was able to answer.
>>>>>> 2. Replacing with POST would mean a significant performance impact in
>>>>>> some high volume implementations (I think it was Goole folks who were
>>>>>> saying this, but I don't remember now).
>>>>>>
>>>>>> AFAIR, nobody was arguing about browsing history, so it's valid.
>>>>>>
>>>>>> So, 6 years later we're at square one with this and I hope that this
>>>>>> time the community will be more successful with getting rid of secrets in
>>>>>> URL.
>>>>>>
>>>>>> BTW, Jim, if you can come up with other scenarios when fragments can
>>>>>> leak, please share. It'll probably help the community with solving this
>>>>>> problem faster than in 6 years.
>>>>>>
>>>>>> Thanks,
>>>>>> Oleg.
>>>>>>
>>>>>>
>>>>>> ------------------------------
>>>>>> *From:* Jim Manico <[email protected]>
>>>>>> *To:* Liyu Yi <[email protected]>; [email protected]
>>>>>> *Sent:* Wednesday, June 29, 2016 7:30 AM
>>>>>> *Subject:* Re: [OAUTH-WG] Security concern for URI fragment as
>>>>>> Implicit grant
>>>>>>
>>>>>> > Shouldn’t it be more secure if we change to use a post method for
>>>>>> access token, similar to the SAML does?
>>>>>> I say yes. But please note I'm very new at this and someone with more
>>>>>> experience will have more to say or correct my comments.
>>>>>> Here are a few more details to consider.
>>>>>> 1) OAuth is a framework and not a standard, per se. Different
>>>>>> authorization servers will have different implementations that are not
>>>>>> necessarily compatible with other service providers. So there is no
>>>>>> standard to break, per se.
>>>>>> 2) Sensitive data in a URI is a bad idea. They leak all over the
>>>>>> place even over HTTPS. Even in fragments.
>>>>>> 3) Break the "rules" and find a way to submit sensitive data like
>>>>>> access tokens, session information or any other (even short term) 
>>>>>> sensitive
>>>>>> data in a secure fashion. This includes POST, JSON data payloads over
>>>>>> PUT/PATCH and other verbs - all over well configured HTTPS.
>>>>>> 4) If you really must submit sensitive data over GET , consider
>>>>>> JWT/JWS/JWE (with limited scopes/lifetimes) to provide message level
>>>>>> confidentiality and integrity.
>>>>>> Aloha,
>>>>>>
>>>>>> Jim Manico
>>>>>> Manicode Securityhttps://www.manicode.com
>>>>>>
>>>>>>
>>>>>> On 6/27/16 9:30 PM, Liyu Yi wrote:
>>>>>>
>>>>>> While we are working on a project with OAuth2 implementation, one
>>>>>> question arises from our engineers.
>>>>>> We noticed at
>>>>>> <https://tools.ietf.org/html/draft-ietf-oauth-v2-31#page-30>
>>>>>> https://tools.ietf.org/html/draft-ietf-oauth-v2-31#page-30, it is
>>>>>> specified that
>>>>>>
>>>>>> (C)  Assuming the resource owner grants access, the authorization
>>>>>>         server redirects the user-agent back to the client using the
>>>>>>         redirection URI provided earlier.  The redirection URI
>>>>>> includes
>>>>>>         the access token in the URI fragment.
>>>>>>
>>>>>> For my understanding, the browser keeps the URI fragment in the
>>>>>> history, and this introduces unexpected exposure of the access token. A
>>>>>> user without authorization for the resource can get the access token as
>>>>>> long as he has the access to the browser. This can happen in a shared
>>>>>> computer in library, or for an IT staff who works on other employee’s
>>>>>> computer.
>>>>>>
>>>>>> Shouldn’t it be more secure if we change to use a post method for
>>>>>> access token, similar to the SAML does?
>>>>>> I feel there might be something I missed here. Any advices will be
>>>>>> appreciated.
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> OAuth mailing 
>>>>>> [email protected]https://www.ietf.org/mailman/listinfo/oauth
>>>>>>
>>>>>>
>>>>>> --
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> OAuth mailing list
>>>>>> [email protected]
>>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> OAuth mailing list
>>>>>> [email protected]
>>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> OAuth mailing list
>>>>>> [email protected]
>>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> OAuth mailing list
>>>>>> [email protected]
>>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> OAuth mailing list
>>>>>> [email protected]
>>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>>>>
>>>>>>
>>>>>>
>>>>> _______________________________________________
>>>>> OAuth mailing list
>>>>> [email protected]
>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>
>
_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to