Как получить токен обновления с сервера Aqueduct - PullRequest
0 голосов
/ 19 мая 2019

В документах Aqueduct говорится, что сервер должен вернуть токен обновления. Это должно выглядеть так:

{
  "access_token" : "Abca09zzzza2o2kelmzlli3ijlka",
  "token_type" : "bearer",
  "refresh_token" : "lkmLIAmooa898nm20jannnnnxaww",
  "expire_in" : 3600
}

Но вот что на самом деле дает сервер:

{
    "access_token": "uArVqRgpGKv98aNJpziSmTQiFaX2Ebrz",
    "token_type": "bearer",
    "expires_in": 86399
}

Нет refresh_token.

Вот как выглядит мой контроллер:

class DemoChannel extends ApplicationChannel {
  ManagedContext context;
  AuthServer authServer;

  @override
  Future prepare() async {
    logger.onRecord.listen((rec) => print("$rec ${rec.error ?? ""} ${rec.stackTrace ?? ""}"));

    final config = WordConfig(options.configurationFilePath);
    final dataModel = ManagedDataModel.fromCurrentMirrorSystem();
    final persistentStore = PostgreSQLPersistentStore.fromConnectionInfo(
        config.database.username,
        config.database.password,
        config.database.host,
        config.database.port,
        config.database.databaseName);

    context = ManagedContext(dataModel, persistentStore);

    final authStorage = ManagedAuthDelegate<User>(context);
    authServer = AuthServer(authStorage);
  }

  @override
  Controller get entryPoint {
    final router = Router();

    router
        .route('/register')
        .link(() => RegisterController(context, authServer));

    router
        .route('/auth/token')
        .link(() => AuthController(authServer));

    router
        .route('/words/[:id]')
        .link(() => Authorizer.bearer(authServer))
        .link(() => WordsController(context));

    return router;
  }
}

Мой AuthController является просто стандартным, который поставляется с Акведуком. Я даже не видел параметров для настройки в исходном коде.

Как заставить сервер отправлять обратно токен обновления?

1 Ответ

1 голос
/ 19 мая 2019

Похоже, вы аутентифицируете публичного клиента OAuth 2. Как правило, общедоступный клиент не может иметь токен обновления. Вы должны использовать конфиденциальный клиент. Клиент является конфиденциальным, когда у него есть секрет. Используйте параметр -secret при создании вашего клиента.

...