Oauth 如何从渡槽服务器获取刷新令牌

Oauth 如何从渡槽服务器获取刷新令牌,oauth,dart,refresh-token,aqueduct,dart-server,Oauth,Dart,Refresh Token,Aqueduct,Dart Server,渡槽文档说服务器应该返回一个刷新令牌。应该是这样的: { "access_token" : "Abca09zzzza2o2kelmzlli3ijlka", "token_type" : "bearer", "refresh_token" : "lkmLIAmooa898nm20jannnnnxaww", "expire_in" : 3600 } 但这是服务器实际提供的: { "access_token": "uArVqRgpGKv98aNJpziSmTQiFaX2Ebr

渡槽文档说服务器应该返回一个刷新令牌。应该是这样的:

{
  "access_token" : "Abca09zzzza2o2kelmzlli3ijlka",
  "token_type" : "bearer",
  "refresh_token" : "lkmLIAmooa898nm20jannnnnxaww",
  "expire_in" : 3600
}
但这是服务器实际提供的:

{
    "access_token": "uArVqRgpGKv98aNJpziSmTQiFaX2Ebrz",
    "token_type": "bearer",
    "expires_in": 86399
}
没有
刷新\u令牌

以下是我的控制器的外观:

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;
  }
}
class DemoChannel扩展了ApplicationChannel{
ManagedContext上下文;
AuthServer;
@凌驾
Future prepare()异步{
listen((rec)=>print($rec${rec.error???“}${rec.stackTrace???”);
final config=WordConfig(options.configurationFilePath);
最终数据模型=ManagedDataModel.fromCurrentMirrorSystem();
最终persistentStore=PostgreSQLPersistentStore.fromConnectionInfo(
config.database.username,
config.database.password,
config.database.host,
config.database.port,
config.database.databaseName);
上下文=ManagedContext(数据模型、persistentStore);
最终authStorage=ManagedAuthDelegate(上下文);
authServer=authServer(authStorage);
}
@凌驾
控制器获取入口点{
最终路由器=路由器();
路由器
.route(“/寄存器”)
.link(()=>RegisterController(上下文,authServer));
路由器
.route(“/auth/token”)
.link(()=>AuthController(authServer));
路由器
.route('/words/[:id]'))
.link(()=>授权人承载人(authServer))
.link(()=>WordsController(上下文));
返回路由器;
}
}
我的
AuthController
只是渡槽附带的标准控制器。在源代码中我甚至没有看到任何需要调整的参数


如何使服务器发回刷新令牌?

听起来您正在验证公共OAuth 2客户端。根据规则,公共客户端不能有刷新令牌。您必须使用保密客户。当客户有秘密时,他是保密的。创建客户端时使用-secret选项

正如我所理解的(从你所说的关于公共客户端的内容来看),移动应用程序(比如Flutter应用程序)不应该使用客户端机密,因为它可以从源代码中反编译(尽管这不是严格的规则)。在这种情况下,只要旧令牌过期,就应该使用用户凭据来获取新的访问令牌。对吗?