Package selection guidance compiled from public package information, community data, and project usage.
A Flutter/Dart package for implementing OpenID Connect clients, enabling secure authentication with identity providers. It supports OAuth 2.0 flows, token management, and discovery of provider configurations via well-known endpoints. The library simplifies integration with services like Google, Auth0, or custom Identity Providers by handling complex authentication workflows, including authorization code flow with PKCE. Designed for cross-platform use, it works seamlessly across Android, iOS, Web, macOS, Windows, and Linux. Ideal for apps requiring standardized, secure user authentication.
Use cases
Integrating with OpenID Connect identity providers
Implementing secure login flows in mobile and web apps
Managing OAuth 2.0 tokens and sessions
Supporting single sign-on (SSO) scenarios
Building authenticated Flutter applications with external identity providers
Key features
Supports OpenID Connect and OAuth 2.0 flows
Automatic discovery of provider configuration
PKCE support for enhanced security
Cross-platform compatibility
Token storage and refresh handling
Well-documented API and examples
Suitable for
Developers building secure Flutter apps with external auth
Library for working with OpenID Connect and implementing clients.
It currently supports these features:
discover OpenID Provider metadata
parsing and validating id tokens
basic tools for implementing implicit and authorization code flow
authentication for command line tools
RP initiated logout
Besides authentication providers that support OpenID Connect, this
library can also work with other authentication providers supporting
oauth2, like Facebook. For these providers, some features (e.g. discovery and id tokens)
will not work. You should define the metadata for those providers manually, except
for Facebook, which is predefined in the library.
Usage
Below are some examples of how to use the library. For more examples, see the example folder. It contains full examples of how to use the library with a keycloak server in a flutter, command line and browser application.
A simple usage example:
import'package:openid_client/openid_client.dart';
main() async {
// print a list of known issuersprint(Issuer.knownIssuers);
// discover the metadata of the google OPvar issuer = awaitIssuer.discover(Issuer.google);
// create a clientvar client = newClient(issuer, "client_id", "client_secret");
// create a credential object from authorization codevar c = client.createCredential(code: "some received authorization code");
// or from an access token
c = client.createCredential(accessToken: "some received access token");
// or from an id token
c = client.createCredential(idToken: "some id token");
// get userinfovar info = await c.getUserInfo();
print(info.name);
// get claims from id token if presentprint(c.idToken?.claims?.name);
// create an implicit authentication flowvar f = newFlow.implicit(client);
// or an explicit flow
f = newFlow.authorizationCode(client);
// set the redirect uri
f.redirectUri = Uri.parse("http://localhost");
// do something with the authentication urlprint(f.authenticationUrl);
// handle the result and get a credential object
c = await f.callback({
"code": "some code",
});
// validate an id tokenvar violations = await c.validateToken();
}
Usage example on flutter
// import the io versionimport'package:openid_client/openid_client_io.dart';
// use url launcher package import'package:url_launcher/url_launcher.dart';
authenticate(Uri uri, String clientId, List<String> scopes) async {
// create the clientvar issuer = awaitIssuer.discover(uri);
var client = newClient(issuer, clientId);
// create a function to open a browser with an urlurlLauncher(String url) async {
if (awaitcanLaunch(url)) {
awaitlaunch(url, forceWebView: true);
} else {
throw'Could not launch $url';
}
}
// create an authenticatorvar authenticator = newAuthenticator(client,
scopes: scopes,
port: 4000, urlLancher: urlLauncher);
// starts the authenticationvar c = await authenticator.authorize();
// close the webview when finishedcloseWebView();
// return the user inforeturnawait c.getUserInfo();
}
Usage example on command line
// import the io versionimport'package:openid_client/openid_client_io.dart';
authenticate(Uri uri, String clientId, List<String> scopes) async {
// create the clientvar issuer = awaitIssuer.discover(uri);
var client = newClient(issuer, clientId);
// create an authenticatorvar authenticator = newAuthenticator(client,
scopes: scopes,
port: 4000);
// starts the authenticationvar c = await authenticator.authorize(); // this will open a browser// return the user inforeturnawait c.getUserInfo();
}
Usage example in browser
// import the browser versionimport'package:openid_client/openid_client_browser.dart';
authenticate(Uri uri, String clientId, List<String> scopes) async {
// create the clientvar issuer = awaitIssuer.discover(uri);
var client = newClient(issuer, clientId);
// create an authenticatorvar authenticator = newAuthenticator(client, scopes: scopes);
// get the credentialvar c = await authenticator.credential;
if (c==null) {
// starts the authentication
authenticator.authorize(); // this will redirect the browser
} else {
// return the user inforeturnawait c.getUserInfo();
}
}
Please file feature requests and bugs at the issue tracker.
Sponsor
Creating and maintaining this package takes a lot of time. If you like the result, please consider to :heart: sponsor.
With your support, I will be able to further improve and support this project.
Also, check out my other dart packages at pub.dev.