OpenID Connect 클라이언트를 구현하기 위한 Flutter/Dart 패키지로, 신뢰할 수 있는 인증을 위해 아이덴티티 공급자와 통합할 수 있습니다. OAuth 2.0 흐름, 토큰 관리 및 잘 알려진 엔드포인트를 통한 제공자 구성 발견을 지원합니다. Google, Auth0 또는 사용자 정의 ID 공급자와의 통합을 간소화하며, PKCE를 사용한 인가 코드 흐름을 포함한 복잡한 인증 워크플로우를 처리합니다. 크로스 플랫폼 사용을 위해 설계되어 Android, iOS, Web, macOS, Windows, Linux에서 원활하게 작동합니다. 표준화되고 안전한 사용자 인증이 필요한 앱에 적합합니다.
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.