server_auth 0.2.1 copy "server_auth: ^0.2.1" to clipboard
server_auth: ^0.2.1 copied to clipboard

Framework-agnostic authentication runtime capabilities for server ecosystems.

example/main.dart

import 'package:server_auth/server_auth.dart';

Future<void> main() async {
  runProviderExample();
  await runJwtExample();
  await runBearerAdapterExample();
  await runGateExample();
}

void runProviderExample() {
  final google = googleProvider(
    const GoogleProviderOptions(
      clientId: 'demo-google-client-id',
      clientSecret: 'demo-google-client-secret',
      redirectUri: 'https://example.com/auth/callback/google',
    ),
  );

  print('provider id = ${google.id}');
}

Future<void> runJwtExample() async {
  const sessionOptions = JwtSessionOptions(
    secret: 'replace-with-a-strong-secret',
    issuer: 'example-app',
    audience: <String>['example-api'],
    maxAge: Duration(minutes: 30),
  );

  final issued = issueAuthJwtToken(
    options: sessionOptions,
    claims: <String, dynamic>{
      'sub': 'user_42',
      'roles': <String>['admin'],
    },
  );

  final verifier = JwtVerifier(options: sessionOptions.toVerifierOptions());
  final payload = await verifier.verifyToken(issued.token);
  print('jwt subject = ${payload.subject}');
}

class _ExampleRequestContext {
  final Map<String, Object?> attributes = <String, Object?>{};

  void setAttribute(String key, Object? value) {
    attributes[key] = value;
  }
}

Future<void> runBearerAdapterExample() async {
  const sessionOptions = JwtSessionOptions(
    secret: 'replace-with-a-strong-secret',
    issuer: 'example-app',
    audience: <String>['example-api'],
    maxAge: Duration(minutes: 30),
  );
  final issued = issueAuthJwtToken(
    options: sessionOptions,
    claims: <String, dynamic>{'sub': 'user_99'},
  );

  final verifier = JwtVerifier(options: sessionOptions.toVerifierOptions());
  final context = _ExampleRequestContext();
  await verifyJwtBearerAuthorizationAndWriteAttributes<_ExampleRequestContext>(
    authorizationHeader: 'Bearer ${issued.token}',
    verifier: verifier,
    setAttribute: context.setAttribute,
    context: context,
    onVerified: (payload, ctx) {
      ctx.setAttribute('verified_sub', payload.subject);
    },
  );

  print('jwt attr subject = ${context.attributes[jwtSubjectAttribute]}');
}

Future<void> runGateExample() async {
  final gates = AuthGateService<Map<String, dynamic>>();
  gates.register(
    'posts.update',
    rolesGate(<String>['editor', 'admin'], any: true),
  );

  final principal = AuthPrincipal(id: 'user_42', roles: <String>['admin']);
  final allowed = await gates.can(
    'posts.update',
    context: <String, dynamic>{'resourceId': 'post_1'},
    principal: principal,
  );

  print('can update post = $allowed');
}
0
likes
150
points
685
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Framework-agnostic authentication runtime capabilities for server ecosystems.

Repository (GitHub)
View/report issues

Funding

Consider supporting this project:

www.buymeacoffee.com

License

MIT (license)

Dependencies

cbor, crypto, crypto_keys, cryptography, einvoicesign, hashlib, http, http_parser, jose, pointycastle, server_contracts, x509, xml

More

Packages that depend on server_auth