createAuthorizationRequest method

McpAuthorizationRequest createAuthorizationRequest({
  1. required McpAuthorizationServerMetadata authorizationServer,
  2. required Uri resource,
  3. required Uri redirectUri,
  4. Iterable<String>? scopes,
  5. McpPkcePair? pkce,
})

Implementation

McpAuthorizationRequest createAuthorizationRequest({
  required McpAuthorizationServerMetadata authorizationServer,
  required Uri resource,
  required Uri redirectUri,
  Iterable<String>? scopes,
  McpPkcePair? pkce,
}) {
  if (authorizationServer.clientIdMetadataDocumentSupported != true) {
    throw const McpOAuthClientMetadataException(
      'Authorization server does not advertise Client ID Metadata '
      'Document support.',
    );
  }
  if (authorizationServer.tokenEndpointAuthMethodsSupported?.contains(
        _noClientAuthentication,
      ) !=
      true) {
    throw const McpOAuthClientMetadataException(
      'Authorization server does not advertise public-client token '
      'endpoint authentication.',
    );
  }
  final redirectValue = redirectUri.toString();
  if (!redirectUris.any((uri) => uri.toString() == redirectValue)) {
    throw const McpOAuthClientMetadataException(
      'Redirect URI is not registered in the Client ID Metadata Document.',
    );
  }

  return createMcpAuthorizationRequest(
    authorizationServer: authorizationServer,
    resource: resource,
    clientId: clientId.toString(),
    redirectUri: redirectUri,
    scopes: scopes ?? this.scopes,
    pkce: pkce,
  );
}