getAuthorizationUrl method

  1. @override
Future<String> getAuthorizationUrl({
  1. required List<String> scopes,
  2. String? state,
  3. Map<String, String>? additionalParams,
})
override

Get authorization URL

Implementation

@override
Future<String> getAuthorizationUrl({
  required List<String> scopes,
  String? state,
  Map<String, String>? additionalParams,
}) async {
  final metadata = await _discoverMetadata();
  final pkce = _generatePkce();

  // Store code verifier for later use
  _codeVerifier = pkce['code_verifier']!;

  final params = <String, String>{
    'response_type': 'code',
    'client_id': config.clientId,
    'code_challenge': pkce['code_challenge']!,
    'code_challenge_method': config.codeChallengeMethod,
    if (config.redirectUri != null) 'redirect_uri': config.redirectUri!,
    if (scopes.isNotEmpty) 'scope': scopes.join(' '),
    if (state != null) 'state': state,
    ...?additionalParams,
  };

  final uri = Uri.parse(
    metadata.authorizationEndpoint,
  ).replace(queryParameters: params);

  return uri.toString();
}