メニュー

Rate this page:

Thanks for rating this page!

We are always striving to improve our documentation quality, and your feedback is valuable to us. How could this documentation serve you better?

Syncトークンを発行する

Syncアプリケーションでは、成果物は2つの部分に分けられます。

  • ユーザーがSyncオブジェクトとやりとりする、SDKによって動作するクライアントApp(ブラウザー、iOS、Android)
  • アクセストークンを提供してユーザーのアイデンティティーを保証するバックエンドサーバー

Twilio SDKによって動作するアプリケーションの実行にはアクセストークンが必要になるため、その多くはトークンの取得に下記のようなコードがあります。

function fetchAccessToken(handler) {
  // We use jQuery to make an Ajax request to our server to retrieve our 
  // Access Token
  $.getJSON('/token', function(data) {
      // The data sent back from the server should contain a long string, which
      // is the token you'll need to initialize the SDK. This string is in a format
      // called JWT (JSON Web Token) - more at http://jwt.io
      console.log(data.token);

      // Since the starter app doesn't implement authentication, the server sends
      // back a randomly generated username for the current client, which is how
      // they will be identified while sending messages. If your app has a login
      // system, you should use the e-mail address or username that uniquely identifies
      // a user instead.
      console.log(data.identity);

      handler(data);
  });
}

このガイドでは、サーバーでこのリクエストを処理する方法を説明し、クライアントに対して有効なトークンを作成する方法を説明します。

バックエンドでアクセストークンを作成する

サーバーでは、送信されたトークンリクエストに基づいて、このユーザーは誰なのかこのユーザーに何を実行することを許可する必要があるのかを決定する必要があります。このためには既存のログインシステム(セッションCookieの使用やAPIトークン、または今日APIリクエストやページのセキュリティーを確保するあらゆるメカニズム)を使用することができます。 ユーザーが誰なのかを気にしなくて良い場合は、一時的なアイデンティティーを割り当てることもあります。 ユーザーが誰なのかを判断する方法は、アプリケーションごとに違ってきます。

リクエストを行なっているユーザーの認証が済んだと仮定した場合、バックエンドは署名済みのトークンを応答することが必要です。 下記は、Node.jsでこれらのトークンを生成する例になります。

require('dotenv').load();
var http = require('http');
var path = require('path');

var AccessToken = require('twilio').jwt.AccessToken;
var SyncGrant = AccessToken.SyncGrant;
var express = require('express'); 

// Create Express webapp
var app = express();
app.use(express.static(path.join(__dirname, 'public')));

/*
Generate an Access Token for a Sync application user - it generates a random
username for the client requesting a token, and takes a device ID as a query
parameter.
*/
app.get('/token', function(request, response) {

    // 
    // This is the most critical part of your backend code, as you must identify the user and (possibly)
    // challenge them with some authentication scheme. To determine the identity, you might use:
    //    * A session datum consistently identifying one anonymous visitor,
    //    * A session key identifying a logged-in user
    //    * OAuth credentials identifying a logged-in user
    //    * A random username for all comers.
    //
    var identity = authenticatedSenderOf(request);

    // Create a "grant" identifying the Sync service instance for this app.
    var syncGrant = new SyncGrant({
        serviceSid: process.env.TWILIO_SYNC_SERVICE_SID,
    });

    // Create an access token which we will sign and return to the client,
    // containing the grant we just created and specifying his identity.
    var token = new AccessToken(
        process.env.TWILIO_ACCOUNT_SID,
        process.env.TWILIO_API_KEY,
        process.env.TWILIO_API_SECRET
    );
    token.addGrant(syncGrant);
    token.identity = identity;

    // Serialize the token to a JWT string and include it in a JSON response
    response.send({
        identity: identity,
        token: token.toJwt()
    });
});

// Create http server and run it
var server = http.createServer(app);
var port = process.env.PORT || 3000;
server.listen(port, function() {
    console.log('Express server running on *:' + port);
});

SDKに作成されたトークンを適用する

アクセストークンが取得できたら、クライアント上でSync SDKを初期化して、Syncオブジェクトを購読するなど、楽しいことができるようになります。 以下に、トークン文字列を使用してJavaScriptでクライアントを初期化する方法を示します。

fetchAccessToken(initializeSync);

function initializeSync(tokenResponse) {
  var syncClient = new Twilio.Sync.Client(tokenResponse.token);

  // Use syncClient here
}

クライアントを初期化すると、すべての SDK の機能にアクセスできるようになります。

トークンの有効期限を処理する

After supplying the access token to Sync SDK initially, renewing the token prior to its expiry is important for ensuring that your Sync application is a great user experience. For long living applications, you should refresh the token when either tokenAboutToExpire or tokenExpired events occur. Handling just one of them is sufficient. The tokenAboutToExpire trigger takes place three minutes before the JWT access token expiry.

syncClient.on('tokenAboutToExpire', function() {
  // Obtain a JWT access token: https://www.twilio.com/docs/sync/identity-and-access-tokens
  var token = '<your-access-token-here>';
  syncClient.updateToken(token);
}); 
Rate this page:

ヘルプが必要ですか?

We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd browsing the Twilio tag on Stack Overflow.