The device flow is really made for cases where the client software can't open a full browser at all, like a limited set top box or embedded device. Since you can access a browser, you can very easily do an authorization code flow with a native app. The only "trick" is getting the code back to the application, and you've got several options there. The basics go like this:

0. App gets registered with the auth server (either by hand or using dynamic registration -- your pick, but it's a tradeoff: if the former, you probably won't be able to use a client_secret; if the latter, you can more easily have a client_secret but you have to manage multiple instances of the client with separate client_id's) 1. App needs to access protected API, so it creates a request URL to the authorization server's authorization endpoint (using response_type=code) 2. App opens the system browser (using whatever native system tools for this) with the authorization URL created in (1)
3. User goes to the authorization page in the web browser
4. User authenticates to the authorization server (however the auth server wants to authenticate the user)
5. User approves the application
6. Authorization server generates an auth code and appends it to the callback URL for the application. this is where you have a few options: 6a. Callback URL uses a custom URI scheme like "myapp://oauth?code=foobar" that opens up a callback to the running application. This is very common on mobile systems. 6b. Callback URL goes to trusted web page that displays the code to the user, the user copies and pastes this code into the application. This is hardy against technology differences but requires user input. 6c. Callback URL goes to a trusted backend service that takes the code and pushes it through some trusted means out to the application instance. Again, this is more common on mobile platforms than on the desktop. 6d. Callback URL goes to a temporary HTTP server stood up on localhost that is run by the app, like "http://localhost:93214/oauth?code=foobar";. Since the app is running this embedded web server and it's only on localhost, it can easily grab the code from the request. 6e. Callback URL goes to a trusted webpage that puts the code into the HTML title element or other portion of the page, and the app scans all open windows looking for a specific pattern. Google was fond of this hack, for some reason, but I wouldn't recommend it. 7. Once it has the code, App calls the Token Endpoint with the code and (if possible) its credentials, gets an access token (and optionally a refresh token).


Personally, I've written apps that do 6a, 6b, and 6d with various levels of complexity and success. All depends on what you have available on your platform.

Hope this helps,
 -- Justin


On 05/29/2013 12:31 AM, Vincent Tsang wrote:
The client is a native windows application, for instance, a document editor like MS Word. The editor can upload copies to the cloud (e.g. Amazon S3), then record the version history and notes associated with each cloud copy to our cloud service via our cloud application API (to be secured by OAuth access tokens). I think it's similar to the case with a media player application (like VLC/Windows Media Player) that sends playlist/history info to the cloud via some cloud application API. I'm just not sure which of the 4 scenarios described in the OAuth spec could fit in here...

Thanks.
Vincent


On Wed, May 29, 2013 at 11:38 AM, Nat Sakimura <sakim...@gmail.com <mailto:sakim...@gmail.com>> wrote:

    A little more application and user context would help.
    A use case, so to speak.

    Nat

    2013/05/29 12:04?Vincent Tsang <vincets...@gmail.com
    <mailto:vincets...@gmail.com>> ??????:

    > Hi Hannes,
    >
    > Thanks for your reply.
    > Actually I am new to OAuth and am simply trying to search for
    the best industrial practice for granting access tokens when the
    client to our application API is a simple windows applications,
    which in most cases runs on PC's with web browser installed.
    > Therefore the scenario doesn't quite match what is described in
    the document, as the user doesn't need a separate machine to
    perform the verification; it's just that the client application
    doesn't have internet browsing capability itself (in this sense
    it's similar to the "device" described in this document, though
    not quite) and so user needs to launch a separate browser application.
    > I ended up on this device profile spec just because it seems to
    match closer to our scenario when compared to the 4 cases
    described in the OAuth 2 spec, but it could be the case that I
    didn't understand it fully.
    > Maybe I should rephrase my question: could someone please advice
    what should be the best practice for granting OAuth tokens to
    clients which are native windows applications?
    >
    > Thanks.
    > Vincent
    >
    > _______________________________________________
    > OAuth mailing list
    > OAuth@ietf.org <mailto:OAuth@ietf.org>
    > https://www.ietf.org/mailman/listinfo/oauth




_______________________________________________
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