[Openid-specs-mobile-profile] Async authentication with polling and callback

nicolas.aillery at orange.com nicolas.aillery at orange.com
Fri Dec 2 16:23:36 UTC 2016


Hello Petteri,

   Your proposal is quite interesting.
   For the User Questioning API, I would have no objection to use your proposal in the drafts if it is adopted by the rest of the ecosystem,

Regards,

Nicolas

De : Openid-specs-mobile-profile [mailto:openid-specs-mobile-profile-bounces at lists.openid.net] De la part de Petteri Stenius
Envoyé : jeudi 1 décembre 2016 16:59
À : openid-specs-mobile-profile at lists.openid.net
Objet : [Openid-specs-mobile-profile] Async authentication with polling and callback

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



_________________________________________________________________________________________________________________________

Ce message et ses pieces jointes peuvent contenir des informations confidentielles ou privilegiees et ne doivent donc
pas etre diffuses, exploites ou copies sans autorisation. Si vous avez recu ce message par erreur, veuillez le signaler
a l'expediteur et le detruire ainsi que les pieces jointes. Les messages electroniques etant susceptibles d'alteration,
Orange decline toute responsabilite si ce message a ete altere, deforme ou falsifie. Merci.

This message and its attachments may contain confidential or privileged information that may be protected by law;
they should not be distributed, used or copied without authorisation.
If you have received this email in error, please notify the sender and delete this message and its attachments.
As emails may be altered, Orange is not liable for messages that have been modified, changed or falsified.
Thank you.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openid.net/pipermail/openid-specs-mobile-profile/attachments/20161202/18023a0c/attachment-0001.html>


More information about the Openid-specs-mobile-profile mailing list