Dart library to use for Google OAuth2 authentication / Client-side flow
Go to Google APIs Console and:
- Create a new Project,
- Create a new
Client ID
for web applications in "API Access" - You should select the "APIS and AUTH > Credentials" left menu item in the new APIs console and click on the "Create new Client ID" button, - Set JavaScript origins to your server or for example
http://127.0.0.1:3030/
for local testing in Dartium
Add this dependency to your pubspec.yaml
dependencies:
google_oauth2_client: '>=0.3.4'
Import the library in your dart application
import "package:google_oauth2_client/google_oauth2_browser.dart";
Initialize the library with your parameters
final auth = new GoogleOAuth2(
"YOUR CLIENT ID HERE",
["scope1", "scope2", ...],
tokenLoaded: oauthReady,
autoLogin: <true/false>);
The oauthReady
function (a function you must define) will be called once your app has a valid OAuth token to call the APIs.
If you set autoLogin
to true
and the user has authorized the app in the past, this will happen automatically.
Otherwise, you need to call auth.login()
to trigger a confirmation dialog.
Once you have an access token you can use the following to send authenticated requests to the API.
var request = new HttpRequest();
request.onLoad.listen(...)
request.open(method, url);
request.setRequestHeader("Authorization", "${auth.token.type} ${auth.token.data}");
request.send();
Or you can use the authenticate
method of the OAuth2 class that takes a request, refreshes the access token if necessary and returns a request with the headers set correctly.
var request = new HttpRequest();
request.onLoad.listen(...);
request.open(method, url);
auth.authenticate(request).then((request) => request.send());
If you have an access token already (f.e. by using the Chrome Extension Identity API) you can use the SimpleOAuth2 class instead, that also supports the authenticate
method.
var auth = new SimpleOAuth2(myToken);
var request new HttpRequest();
request.onLoad.listen(...);
request.open(method, url);
auth.authenticate(request).then((request) => request.send());
See example/oauth_example.dart for example login and request.
Import the library in your dart application
import "package:google_oauth2_client/google_oauth2_console.dart";
Setup the identifier
and secret
by creating a Google Installed App client id in APIs Console
String identifier = "YOUR IDENTIFIER HERE";
String secret = "YOUR SECRET HERE";
List scopes = ["scope1", "scope2", ...];
final auth = new OAuth2Console(identifier: identifier, secret: secret, scopes: scopes);
When making calls the OAuth2Console
provides a widthClient
method that will provide you with the http.Client
which to make requests. This may change in the future, for now it handles if the client has not allowed access to this application. credentials are stored locally by default in a file named credentials.json
. Also by default the application does not check googles certificates, a certificate is provided ca-certificates.crt. Place the certificate in the same folder as the application curl will check cert before executing.
Future clientCallback(http.Client client) {
var completer = new Completer();
final url = "https://www.googleapis.com/plus/v1/people/me";
client.get(url).then((http.Response response) {
var data = JSON.parse(response.body);
print("Logged in as ${data["displayName"]}");
});
return completer.future;
};
auth.withClient(clientCallback);
Example below, the user needs to open the link provided to allow for offline support of the application.
~/dart/dart-google-oauth2-library/example$ dart oauth_example_console.dart
Client needs your authorization for scopes [https://www.googleapis.com/auth/plus.me]
In a web browser, go to https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force&response_type=code&client_id=299615367852-n0kfup30mfj5emlclfgud9g76itapvk9.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A60476&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fplus.me
Then click "Allow access".
Waiting for your authorization...
Authorization received, processing...
Successfully authorized.
Logged in as Adam Singer
Currently console oauth2 does not work on windows yet. Mac and Linux should work if curl
is in your path. curl
is being used for passing the auth token from the browser back to the application.
No guarantees about the security or functionality of this libary
Copyright (c) 2013-2014 Gerwin Sturm & Adam Singer
Licensed under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy of
the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations under
the License
------------------------
Based on http://code.google.com/p/google-api-dart-client
Copyright 2012 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy of
the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations under
the License