[Openid-specs-mobile-profile] Async authentication with polling and callback
Torsten Lodderstedt
torsten at lodderstedt.net
Sat Dec 3 08:50:10 UTC 2016
Hi Petteri,
thanks for your proposal.
One question popped up when I read the sequence for the callback case: how does the server know where to send the callback in step 3?
best regards,
Torsten.
> Am 01.12.2016 um 16:58 schrieb Petteri Stenius <Petteri.Stenius at ubisecure.com>:
>
> Hello everybody
>
> At the Paris meeting in September there was some discussion about polling and callback mechanisms related to asynchronous functions.
>
> These mechanisms exist in both UQ and SIBA draft specifications. Polling is also defined in OAuth Device Flow draft.
>
> This proposal is an attempt to generalize async polling and callback mechanisms:
>
> · Define polling on the http level, not an application level function
> · Callback is only a simple notification request, a client initiated request is required to fetch the actual content
>
> The two proposals work together, and make for example switching between polling and callback mechanisms very easy.
>
> Thanks,
> Petteri
>
>
> Polling defined on the http level
>
> Define mechanism with HTTP 303 redirect and Retry-After response header.
>
> 303 redirect is used to define polling as sequence of http redirects the client follows until async operation completes and response appears.
> The client MUST wait time indicated by Retry-After header before following a redirect. Failing to do so would result in 503 Service Unavailable error (with Retry-After header).
> Semantics is comparable to "Wait a moment, the response will soon appear at this location"
>
> The server is allowed to implement "long polling" by holding a response up to 30 seconds (see https://tools.ietf.org/html/rfc6202#section-5.5)
>
> Example of polling sequence:
>
> 1. Client begins async operation
>
> POST /begin-async-operation HTTP/1.1
>
> 2. Server response with 303 status indicates client must begin polling for response. Server encodes state into querystring of redirect uri
>
> HTTP/1.1 303 See Other
> Location: /async-response?opaque-server-state-1
> Retry-After: 10
>
> 3. Client waits at least 10 seconds before following the redirect
>
> GET /async-response?opaque-server-state-1 HTTP/1.1
>
> 4. Server response with new uri where querystring has changed
>
> HTTP/1.1 303 See Other
> Location: /async-response?opaque-server-state-2
> Retry-After: 10
>
> 5. Client again waits before following the redirect
>
> GET /async-response?opaque-server-state-2 HTTP/1.1
>
> 6. Server response with content when async operation has completed
>
> HTTP/1.1 200 OK
>
> "completed"
>
>
> Callback is a simple notification request
>
> My proposal for callback mechanism is a simple notification request.
> Server encodes any state it needs into querystring of the notification request.
> For the client the querysring is opaque and the client must pass it as-is when fetching the actual content from the server.
> Using a simple notification request removes the requirement for client to authenticate the callback request from server.
>
> Example of callback sequence:
>
> 1. Client begins async operation
>
> POST /begin-async-operation HTTP/1.1
>
> 2. Server response with 202 status indicates client needs to wait for callback
>
> HTTP/1.1 202 Accepted
>
> 3. When async operation completes server sends a notification request to client. Server encodes state into querystring of notification uri
>
> GET /callback?opaque-server-state-3 HTTP/1.1
>
> 4. Client response is not processed by server
>
> HTTP/1.1 204 No Content
>
> 5. Client creates request uri and fetches content from server
>
> GET /async-response?opaque-server-state-3 HTTP/1.1
>
> 6. Server response with content
>
> HTTP/1.1 200 OK
>
> "completed"
>
>
>
> Related discussion
>
> [Openid-specs-mobile-profile] Async authentication
> http://lists.openid.net/pipermail/openid-specs-mobile-profile/Week-of-Mon-20161010/000615.html
>
> [OAUTH-WG] polling in the device flow
> https://www.ietf.org/mail-archive/web/oauth/current/msg02939.html
>
> [OAUTH-WG] Device Flow: Alternative to Polling
> https://www.ietf.org/mail-archive/web/oauth/current/msg16723.html
>
> References
>
> OAuth 2.0 Device Flow
> https://tools.ietf.org/html/draft-ietf-oauth-device-flow-03
>
> HTTP/1.1 Semantics and Content
> https://tools.ietf.org/html/rfc7231
>
> Retry-After
> https://tools.ietf.org/html/rfc7231#section-7.1.3
>
> Best Practices for the Use of Long Polling
> https://tools.ietf.org/html/rfc6202
>
>
> _______________________________________________
> Openid-specs-mobile-profile mailing list
> Openid-specs-mobile-profile at lists.openid.net
> http://lists.openid.net/mailman/listinfo/openid-specs-mobile-profile
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openid.net/pipermail/openid-specs-mobile-profile/attachments/20161203/ce3cfb5d/attachment-0001.html>
More information about the Openid-specs-mobile-profile
mailing list