getTokenWithImplicitGrantFlow method
Requests an Access Token to the OAuth2 endpoint using the Implicit grant flow (https://tools.ietf.org/html/rfc6749#page-31)
Implementation
Future<AccessTokenResponse> getTokenWithImplicitGrantFlow(
{required String clientId,
List<String>? scopes,
bool enableState = true,
String? state,
httpClient,
BaseWebAuth? webAuthClient,
Map<String, dynamic>? webAuthOpts,
Map<String, dynamic>? customParams}) async {
httpClient ??= http.Client();
webAuthClient ??= this.webAuthClient;
if (enableState) state ??= randomAlphaNumeric(25);
final authorizeUrl = getAuthorizeUrl(
clientId: clientId,
responseType: 'token',
scopes: scopes,
enableState: enableState,
state: state,
redirectUri: redirectUri,
customParams: customParams);
// Present the dialog to the user
try {
final result = await webAuthClient.authenticate(
url: authorizeUrl,
callbackUrlScheme: customUriScheme,
redirectUrl: redirectUri,
opts: webAuthOpts);
final fragment = Uri.splitQueryString(Uri.parse(result).fragment);
if (enableState) {
final checkState = fragment['state'];
if (state != checkState) {
throw Exception(
'"state" parameter in response doesn\'t correspond to the expected value');
}
}
return AccessTokenResponse.fromMap({
'access_token': fragment['access_token'],
'token_type': fragment['token_type'],
'scope': fragment['scope'] ?? scopes,
'expires_in': fragment['expires_in'],
'http_status_code': 200
});
} on PlatformException {
return AccessTokenResponse.errorResponse();
}
}