createAuthExternalProviderRuntimeConformanceEngine function

Engine createAuthExternalProviderRuntimeConformanceEngine({
  1. AuthSessionStrategy sessionStrategy = AuthSessionStrategy.session,
})

Creates an auth engine backed only by deterministic external providers.

Provider token and key requests are handled by an in-process scripted HTTP client. The fixture never reads live secrets or opens a provider network connection.

Implementation

Engine createAuthExternalProviderRuntimeConformanceEngine({
  AuthSessionStrategy sessionStrategy = AuthSessionStrategy.session,
}) {
  final providerClient = _createProviderClient();
  final manager = AuthManager(
    AuthOptions<EngineContext>(
      store: InMemoryAuthStore(),
      storeMode: AuthStoreMode.ephemeral,
      providers: <AuthProvider>[
        _createOidcProvider(),
        _RuntimeCallbackProvider(),
      ],
      plugins: <AuthServerPlugin<EngineContext>>[
        UsernamePlugin<EngineContext>(),
      ],
      passwordHasher: const _ConformancePasswordHasher(),
      sessionStrategy: sessionStrategy,
      jwtOptions: const JwtSessionOptions(
        secret: 'runtime-jwt-secret-with-at-least-32-bytes',
        cookieName: _jwtCookieName,
        secure: false,
      ),
      httpClient: providerClient,
      cookiePolicy: AuthCookiePolicy.development,
    ),
  );
  final sessionKey = base64.encode(
    List<int>.generate(32, (index) => 127 - index),
  );
  final engine = Engine(
    config: EngineConfig(
      security: const EngineSecurityFeatures(csrfProtection: false),
    ),
    providers: <ServiceProvider>[
      ...Engine.defaultProviders,
      RoutedSessionsProvider(
        SessionConfig.cookie(
          appKey: 'base64:$sessionKey',
          cookieName: authExternalProviderRuntimeCookieName,
          options: SessionOptions(
            secure: false,
            httpOnly: true,
            sameSite: SameSite.lax,
          ),
        ),
      ),
    ],
  );
  engine.addGlobalMiddleware(sessionMiddleware());
  engine.addGlobalMiddleware(SessionAuth.sessionAuthMiddleware());
  AuthRoutes(manager).register(engine.defaultRouter);
  return engine;
}