2017-12-20 8 views
0

ダートでGoogleのFirebaseとGoogleのAPIを使用:.dartで、次の2つの.jsプログラムに相当するものが:グーグルFirebaseとAPI:生成アクセストークンとカスタムアクセストークン

  1. 生成サーバー上のアクセストークン:

;

var google = require("googleapis"); 

// Load the service account key JSON file. 
var serviceAccount = require("./xxxxxxxx.json"); 

// Define the required scopes. 
var scopes = [ 
    "https://www.googleapis.com/auth/userinfo.email", 
    "https://www.googleapis.com/auth/firebase.database" 
]; 

// Authenticate a JWT client with the service account. 
var jwtClient = new google.auth.JWT(
    serviceAccount.client_email, 
    null, 
    serviceAccount.private_key, 
    scopes 
); 

// Use the JWT client to generate an access token. 
jwtClient.authorize(function(error, tokens) { 
    if (error) { 
    console.log("Error making request to generate access token:", error); 
    } else if (tokens.access_token === null) { 
    console.log("Provided service account does not have permission to generate access tokens"); 
    } else { 
    var accessToken = tokens.access_token; 
    console.log(accessToken); 
    // See the "Using the access token" section below for information 
    // on how to use the access token to send authenticated requests to 
    // the Realtime Database REST API. 
    } 
}); 

と2:

サーバーと(テストのためここでは1に混入)クライアント側でカスタムアクセストークンを生成します。

var google = require("googleapis"); 

var serviceAccount = require("xxxxxxxx.json"); 

var admin = require("firebase-admin"); 

admin.initializeApp({ 
    credential: admin.credential.cert(serviceAccount), 
    databaseURL: "xxxx" 
}); 

var firebase = require("firebase"); 


    var config = { 
    apiKey: "xxxx", 
    authDomain: "xxxxxx", 
    databaseURL: "xxxx", 
    projectId: "xxxx", 
    storageBucket: "xxx", 
    messagingSenderId: "xxxxx" 
    }; 

firebase.initializeApp(config); 


var uid = "some-uid"; 


var additionalClaims = { 
    premiumAccount: true 
}; 



admin.auth().createCustomToken(uid/*, additionalClaims*/) 
    .then(function(customToken) { 




    // begin client use, actually in browser. Here for testing. 

     firebase.auth().signInWithCustomToken(customToken).then(
     function(d){ 

      var fbref = firebase.database().ref('/users/'+uid ); 

       fbref.set({ 
       username: "name", 
       email: "email", 
       profile_picture : "imageUrl" 
       }).catch(function(error) { 
       console.log("Kann nicht setzen: " + error); 
      }); 

      var userId = firebase.auth().currentUser.uid; 

      return firebase.database().ref('/users/' + userId).once('value').then(function(snapshot) { 

      console.log(snapshot.val()); 
      }); 
     }  
    ).catch(function(error) { 
     var errorCode = error.code; 
     var errorMessage = error.message; 

    }); 

    // end client use 

    }) 
    .catch(function(error) { 
    console.log("Error creating custom token:", error); 
    }); 

私が何を知りたいです私が必要とするパッケージ、およびそのドキュメントを入手できる場所。

少なくとも、ダーツプログラムへの簡単な翻訳が役立ちます。

答えて

1

sulutionはトークンに署名するために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()); 
} 
1

したいダートパッケージはこちらです:https://pub.dartlang.org/packages/firebase

私たちは、サーバー側のダートのためにこれを行いますいくつかのコードを持っている:https://github.com/firebase/firebase-dart/blob/master/lib/src/assets/assets_io.dart

あなたは

https://pub.dartlang.org/packages/googleapis_auth

と似た何かを行うことができるかもしれません

ブラウザAPI用のドキュメント:https://www.dartdocs.org/documentation/googleapis_auth/0.2.3+6/googleapis_auth.auth_browser/googleapis_auth.auth_browser-library.html

関連する問題