Dart中的Google Firebase和API:生成访问令牌和自定义访问令牌

Dart中的Google Firebase和API:生成访问令牌和自定义访问令牌,firebase,dart,firebase-authentication,Firebase,Dart,Firebase Authentication,在Dart中使用Google Firebase和Google API:在.Dart中是否有与以下两个.js程序等效的程序: 在服务器上生成访问令牌: ) 和2.: 在服务器端和客户端生成自定义访问令牌(此处混入一个用于测试): 我想知道我需要什么样的软件包,以及在哪里可以获得它的文档 至少粗略地翻译成dart程序会有帮助。您想要的dart软件包在这里: 我们有一些用于服务器端Dart的代码: 你也许可以做一些类似的事情 浏览器API的文档位于此处:您想要的Dart包位于此处: 我们有一些用于服

在Dart中使用Google Firebase和Google API:在.Dart中是否有与以下两个.js程序等效的程序:

  • 在服务器上生成访问令牌:
  • )

    和2.:

    在服务器端和客户端生成自定义访问令牌(此处混入一个用于测试):

    我想知道我需要什么样的软件包,以及在哪里可以获得它的文档


    至少粗略地翻译成dart程序会有帮助。

    您想要的dart软件包在这里:

    我们有一些用于服务器端Dart的代码:

    你也许可以做一些类似的事情


    浏览器API的文档位于此处:

    您想要的Dart包位于此处:

    我们有一些用于服务器端Dart的代码:

    你也许可以做一些类似的事情


    这里的浏览器API文档:

    解决方案是找到一个使用RSA签名令牌的jwt库,RSA似乎是现有库中不太流行的替代方案

    pubspec.yaml:

    dependencies:
      firebase: "4.2.0+1"
      just_jwt: "1.3.1"
    
    createCustomToken.dart:

    import 'dart:async';
    import 'dart:convert' as convert;
    import 'package:just_jwt/just_jwt.dart' as jj;
    
    Future main() async {
    
      String client_email = "xxxxxxx";
    
      final DateTime issuedAt = new DateTime.now();
      final DateTime expiresAt = issuedAt.add(const Duration(minutes: 30));
    
      String uid = "some-uid";
      jj.EncodedJwt encodedJwt;
      Map<String, Object> payload = {
        "iss": client_email,
        "sub": client_email,
        "aud":        "xxxxxx",
        "iat": (issuedAt.millisecondsSinceEpoch / 1000).floor(),
        "exp": (issuedAt.millisecondsSinceEpoch / 1000).floor() + (60 * 30),
        "uid": uid,
        "claims": {}
      };
      var sign = jj.toTokenSigner(jj.createRS256Signer("xxxxxxxxxx"));
      Map<String, jj.TokenSigner> signer = {'RS256': sign};
      jj.Encoder encoder = new jj.Encoder(jj.composeTokenSigners(signer));
      jj.Jwt jwt = new jj.Jwt.RS256(payload);
      encodedJwt = await encoder.convert(jwt);
      print(encodedJwt.toString());
    }
    
    导入'dart:async';
    导入“dart:convert”作为convert;
    将“package:just_jwt/just_jwt.dart”作为jj导入;
    Future main()异步{
    字符串client_email=“xxxxxxx”;
    final DateTime issuedAt=new DateTime.now();
    final DateTime expiresAt=issuedAt.add(常数持续时间(分钟:30));
    String uid=“some uid”;
    jj.EncodedJwt EncodedJwt;
    映射有效负载={
    “iss”:客户的电子邮件,
    “sub”:客户的电子邮件,
    “澳元”:“xxxxxx”,
    “iat”:(发布时间为毫秒秒秒秒/1000)。地板(),
    “exp”:(以毫秒/1000.floor()为单位发布)+(60*30),
    “uid”:uid,
    “索赔”:{}
    };
    var sign=jj.toTokenSigner(jj.createRS256Signer(“xxxxxxxxx”);
    映射签名者={'RS256':sign};
    jj.Encoder编码器=新的jj.Encoder(jj.composeTokenSigners(签名者));
    jj.Jwt Jwt=新的jj.Jwt.RS256(有效载荷);
    encodedJwt=等待编码器转换(jwt);
    打印(encodedJwt.toString());
    }
    
    解决方案是找到一个jwt库,该库使用RSA对令牌进行签名,RSA似乎是现有库中不太流行的替代方案

    pubspec.yaml:

    dependencies:
      firebase: "4.2.0+1"
      just_jwt: "1.3.1"
    
    createCustomToken.dart:

    import 'dart:async';
    import 'dart:convert' as convert;
    import 'package:just_jwt/just_jwt.dart' as jj;
    
    Future main() async {
    
      String client_email = "xxxxxxx";
    
      final DateTime issuedAt = new DateTime.now();
      final DateTime expiresAt = issuedAt.add(const Duration(minutes: 30));
    
      String uid = "some-uid";
      jj.EncodedJwt encodedJwt;
      Map<String, Object> payload = {
        "iss": client_email,
        "sub": client_email,
        "aud":        "xxxxxx",
        "iat": (issuedAt.millisecondsSinceEpoch / 1000).floor(),
        "exp": (issuedAt.millisecondsSinceEpoch / 1000).floor() + (60 * 30),
        "uid": uid,
        "claims": {}
      };
      var sign = jj.toTokenSigner(jj.createRS256Signer("xxxxxxxxxx"));
      Map<String, jj.TokenSigner> signer = {'RS256': sign};
      jj.Encoder encoder = new jj.Encoder(jj.composeTokenSigners(signer));
      jj.Jwt jwt = new jj.Jwt.RS256(payload);
      encodedJwt = await encoder.convert(jwt);
      print(encodedJwt.toString());
    }
    
    导入'dart:async';
    导入“dart:convert”作为convert;
    将“package:just_jwt/just_jwt.dart”作为jj导入;
    Future main()异步{
    字符串client_email=“xxxxxxx”;
    final DateTime issuedAt=new DateTime.now();
    final DateTime expiresAt=issuedAt.add(常数持续时间(分钟:30));
    String uid=“some uid”;
    jj.EncodedJwt EncodedJwt;
    映射有效负载={
    “iss”:客户的电子邮件,
    “sub”:客户的电子邮件,
    “澳元”:“xxxxxx”,
    “iat”:(发布时间为毫秒秒秒秒/1000)。地板(),
    “exp”:(以毫秒/1000.floor()为单位发布)+(60*30),
    “uid”:uid,
    “索赔”:{}
    };
    var sign=jj.toTokenSigner(jj.createRS256Signer(“xxxxxxxxx”);
    映射签名者={'RS256':sign};
    jj.Encoder编码器=新的jj.Encoder(jj.composeTokenSigners(签名者));
    jj.Jwt Jwt=新的jj.Jwt.RS256(有效载荷);
    encodedJwt=等待编码器转换(jwt);
    打印(encodedJwt.toString());
    }