Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 <h1 class="page_title">Identify User</h1> | |
| 2 <p> | |
| 3 Web authentication protocols utilize HTTP features, | |
|
not at google - send to devlin
2012/08/01 20:41:04
random file which is getting detected as an "add"
| |
| 4 but packaged apps run inside the app container; | |
| 5 they don’t load over HTTP and can’t perform redirects or set cookies. | |
| 6 </p> | |
| 7 <p> | |
| 8 Use the <a href="experimental.identity.html">Chrome Identity API</a> | |
| 9 to authenticate users: | |
| 10 the <code>getAuthToken</code> for users logged into their Google Account and | |
| 11 the <code>launchWebAuthFlow</code> for users logged into a non-Google account. | |
| 12 If your app uses its own server to authenticate users, you will need to use the latter. | |
| 13 </p> | |
| 14 <p class="note"> | |
| 15 <b>API Samples: </b> | |
| 16 Want to play with the code? | |
| 17 Check out the | |
| 18 <a href="https://github.com/GoogleChrome/chrome-app-samples/tree/master/identity ">identity</a> sample. | |
| 19 </p> | |
| 20 <h2 id="how">How it works</h2> | |
| 21 <p> | |
| 22 Apps that use Google accounts | |
| 23 need to specify the OAuth2 client ID | |
| 24 and scopes in their manifest. | |
| 25 When users install the apps, | |
| 26 the OAuth2 permissions are displayed along with the Chrome permissions. | |
| 27 Once a user accepts the permissions, | |
| 28 the apps can get the access token | |
| 29 using <code>getAuthToken</code>. | |
| 30 </p> | |
| 31 <p> | |
| 32 Apps that want to perform authentication | |
| 33 with any provider must call <code>launchAuthFlow</code>. | |
| 34 This method uses a browser pop-up to show the provider pages | |
| 35 and captures redirects to the specific URL patterns. | |
| 36 The redirect URLs are passed to the app | |
| 37 and the app extracts the token from the URL. | |
| 38 </p> | |
| 39 <h2 id="google">Google account authentication</h2> | |
| 40 <p> | |
| 41 Here are the five steps you need to complete: | |
| 42 </p> | |
| 43 <ol> | |
| 44 <li>Add permissions to your manifest and upload your app.</li> | |
| 45 <li>Copy key in the installed <code>manifest.json</code> to your source manifest.</li> | |
| 46 <li>Get your client ID.</li> | |
| 47 <li>Update your manifest to include the client ID and scopes.</li> | |
| 48 <li>Get the authentication token.</li> | |
| 49 </ol> | |
| 50 <h3>Add permissions and upload app</h3> | |
| 51 <p> | |
| 52 The identity API is still experimental. | |
| 53 You need to make sure the experimental | |
| 54 and identity permissions are in your manifest. | |
| 55 You can then upload your app to the apps and extensions management page | |
| 56 (see <a href="publish_app.html">Publish</a>). | |
| 57 </p> | |
| 58 <pre> | |
| 59 "permissions": [ | |
| 60 "experimental", | |
| 61 "identity" | |
| 62 ] | |
| 63 </pre> | |
| 64 <h3>Copy key to your manifest</h3> | |
| 65 <p> | |
| 66 You need to copy the key in the installed | |
| 67 <code>manifest.json</code> to your source manifest. | |
| 68 This ensures that the key isn't overridden anytime your reload your app | |
| 69 or share the app with other users. | |
| 70 It's not the most graceful task, but here's how it goes: | |
| 71 </p> | |
| 72 <ol> | |
| 73 <li>Go to your | |
| 74 <a href="http://www.chromium.org/user-experience/user-data-direc tory">user data directory</a>. | |
| 75 Example on MacOs: <code>~/Library/Application\ Support/Google/Ch rome/Default/Extensions</code></li> | |
| 76 <li>List the installed apps and extensions and match your app ID on the apps and extensions management page | |
| 77 to the same ID here.</li> | |
| 78 <li>Go to the installed app directory (this will be a version within the app ID). | |
| 79 Open the installed <code>manifest.json</code> | |
| 80 (pico is a quick way to open the file).</li> | |
| 81 <li>Copy the "key" in the installed <code>manifest.json</code> and paste it into your app's source manifest file.</li> | |
| 82 </ol> | |
| 83 <h3>Get your client ID</h3> | |
| 84 <p> | |
| 85 Setting up the client ID is currently not available externally | |
| 86 via <a href="https://devconsole-canary.corp.google.com/apis/">Google APIs Consol e</a>. | |
| 87 So to setup the OAuth2 client ID, | |
| 88 email <a href="mailto:chrome-apps-auth-requests@google.com">chrome-apps-auth-req uest@google.com</a> | |
| 89 with your stable app ID and | |
| 90 we will reply appropriately with your OAuth2 client ID. | |
| 91 </p> | |
| 92 <h3>Update your manifest</h3> | |
| 93 <p> | |
| 94 You need to update your manifest to include | |
| 95 the client ID and scopes. | |
| 96 Here's the sample "oauth2" for the | |
| 97 <a href="https://github.com/GoogleChrome/chrome-app-samples/tree/master/gdocs">g docs sample</a>: | |
| 98 </p> | |
| 99 <pre> | |
| 100 "oauth2": { | |
| 101 "client_id": "665859454684.apps.googleusercontent.com", | |
| 102 "scopes": [ | |
| 103 "https://docs.google.com/feeds/", | |
| 104 "https://docs.googleusercontent.com/", | |
| 105 "https://spreadsheets.google.com/feeds/", | |
| 106 "https://www.googleapis.com/auth/drive.file" | |
| 107 ] | |
| 108 } | |
| 109 </pre> | |
| 110 <h3>Get the token</h3> | |
| 111 <p> | |
| 112 You are now ready to get the auth token: | |
| 113 </p> | |
| 114 <pre> | |
| 115 chrome.experimental.identity.getAuthToken(function(token) { }) | |
| 116 </pre> | |
| 117 <h2 id="non">Non-Google account authentication</h2> | |
| 118 <p> | |
| 119 Here are the three steps you need to complete: | |
| 120 </p> | |
| 121 <ol> | |
| 122 <li>Register with the provider.</li> | |
| 123 <li>Add permissions for provider resources that your app will access.</l i> | |
| 124 <li>Get the authentication token.</li> | |
| 125 </ol> | |
| 126 <h3>Register with the provider</h3> | |
| 127 <p> | |
| 128 You need to register an OAuth2 client ID with the provider | |
| 129 and configure the client ID as a website. | |
| 130 For the redirect URI to be entered during registration, | |
| 131 use the URL of the form: | |
| 132 <code>https://<extension-id>.chromiumapp.org/<anything-here></code> | |
| 133 </p> | |
| 134 <p> | |
| 135 For example, if you app ID is abcdefghijklmnopqrstuvwxyzabcdef and | |
| 136 you want provider_cb to be the path, | |
| 137 to distinguish it with redirect URIs from other providers, | |
| 138 you should use: | |
| 139 <code>https://abcdefghijklmnopqrstuvwxyzabcdef.chromiumapp.org/provider_cb</code > | |
| 140 </p> | |
| 141 <h3>Add permissions for provider</h3> | |
| 142 <p> | |
| 143 To make cross-original XHRs to Google API endpoints, | |
| 144 you need to whitelist those patterns in the permissions: | |
| 145 </p> | |
| 146 <pre> | |
| 147 "permissions": [ | |
| 148 ... | |
| 149 "https://docs.google.com/feeds/", | |
| 150 "https://docs.googleusercontent.com/", | |
| 151 “https://www.website-of-provider-with-user-photos.com/photos/” | |
| 152 ] | |
| 153 </pre> | |
| 154 <h3>Get the token</h3> | |
| 155 <p> | |
| 156 To get the token: | |
| 157 </p> | |
| 158 <pre> | |
| 159 chrome.experimental.identity.launchWebAuthFlow( | |
| 160 {‘url’: ‘<url-to-do-auth>’, ‘interactive’: true}, | |
| 161 function(redirect_url) { // Extract token from redirect_url }); | |
| 162 </pre> | |
| 163 <p> | |
| 164 The <url-to-do-auth> is whatever the URL is to do auth to the provider from a website. | |
| 165 For example, let us say that you are performing OAuth2 flow with a provider | |
| 166 and have registered your app with client id 123456789012345 and | |
| 167 you want access to user’s photos on the provider’s website: | |
| 168 <code>https://www.website-of-provider-with-user-photos.com/dialog/oauth?client_i d=123456789012345&<br>redirect_uri=https://abcdefghijklmnopqrstuvwxyzabcdef. chromiumapp.org/provider_cb&response_type=token&scope=user_photos</code> | |
| 169 </p> | |
| 170 <p> | |
| 171 The provider will perform authentication and if appropriate, | |
| 172 will show login and/or approval UI to the user. | |
| 173 It will then redirect to | |
| 174 <code>https://abcdefghijklmnopqrstuvwxyzabcdef.chromiumapp.org/provider_cb#authT oken=<auth-token></code> | |
| 175 </p> | |
| 176 <p> | |
| 177 Chrome will capture that and invoke the callback | |
| 178 of the app with the full redirect URL. | |
| 179 The app should extract the token out of the URL. | |
| 180 </p> | |
| 181 <h3>Interactive versus silent mode</h3> | |
| 182 <p> | |
| 183 When calling <code>launchWebAuthFlow</code>, | |
| 184 you can pass a flag (‘interactive’: true in the example above) | |
| 185 indicating whether you want the API to be called | |
| 186 in interactive mode or not (aka silent mode). | |
| 187 If you invoke the API in interactive mode, | |
| 188 the user is shown UI, if necessary, | |
| 189 to get the token (signin UI and/or approval UI; | |
| 190 or for that matter any provider specific UI). | |
| 191 </p> | |
| 192 <p> | |
| 193 If you invoke the API in silent mode, | |
| 194 the API will only return a token if the provider is able | |
| 195 to provide a token without showing any UI. | |
| 196 This is useful in cases when an app is doing the flow at app startup, for exampl e, | |
| 197 or in general in cases where there is no user gesture involved. | |
| 198 </p> | |
| 199 <p> | |
| 200 The best practice we suggest is to use silent mode | |
| 201 when there is no user gesture involved and use interactive mode | |
| 202 if there is a user gesture (for example, the user clicked the Sign In button in your app). | |
| 203 Note that we do not enforce gesture requirement. | |
| 204 </p> | |
| 205 <p class="backtotop"><a href="#top">Back to top</a></p> | |
| OLD | NEW |