2017-09-15 4 views
0

Django rest apiをTokboxとともにDebianサーバに実行しています。私はそれが正常に動作していたpython仮想環境を介して実行していたが、いくつかの理由でそれを環境から取り除く必要がある。私はそのようにした場合は、すべての依存関係をinstallinし、それが実行してしまった後に、次のエラーを得た:両方のキーが的環境変数として保存され、正常に戻されvenvを実行していないときは、OpenTokのコンストラクタ/ create_sessionが失敗する

raise RequestError('Failed to create session: %s' % str(e))

opentok.exceptions.RequestError: Failed to create session: Failed to create session, invalid credentials

、私はそれらをログに記録することができ、彼らは正しいです。また、私は再びpython仮想環境を有効にすると、エラーが消えます。レコードの

、エラーを引き起こす私のコードの行は、次のとおりです。

opentok = OpenTok(api_key, api_secret) 
session = opentok.create_session(media_mode=MediaModes.routed) 

ソースコードで例外を発生させる機能は以下の通りです:

try: 
     response = requests.post(self.session_url(), data=options, headers=self.headers(), proxies=self.proxies) 
     response.encoding = 'utf-8' 

if response.status_code == 403: 
      raise AuthError('Failed to create session, invalid credentials') 

最初に私apiの鍵とapiの秘密に行われた何らかの暗号化またはハッシングでなければならないと考えました。 Tokboxは実際にはjwtを使用しますが、コンストラクタによって呼び出される関数で行われるため、仮想環境を使用しないときにも行われます。要求の中の上と呼ばれる機能headers()は以下の通りです:

def headers(self): 
    """For internal use.""" 
    return { 
     'User-Agent': 'OpenTok-Python-SDK/' + __version__ + ' ' + platform.python_version(), 
     'X-OPENTOK-AUTH': self._create_jwt_auth_header() 
    } 

def _create_jwt_auth_header(self): 
    payload = { 
        'ist': 'project', 
        'iss': self.api_key, 
        'iat': int(time.time()), # current time in unix time (seconds) 
        'exp': int(time.time()) + (60*3), # 3 minutes in the future (seconds) 
        'jti': '{0}'.format(0, random.random()) 
       } 

    return jwt.encode(payload, self.api_secret, algorithm='HS256') 
+0

唯一のことは、多分ということは、あなたのインストールがでファイル「opentok.py」を置い

検索あなたがJWTを期限切れにしている、あるいは過去または何かになっている別の環境を使用しているときは、時間は同期していません。それは可能ですか? –

+0

@AdamUllman日付と時刻がvenvの内外で正しく表示されているようです。他のアイデア? –

+0

@AdamUllman時間は正しいように見えましたが、それは確かに時間の問題でした。ソリューションの投稿について –

答えて

1

サーバーの時間が正しいように見えたが、私はそれではなかったと思います。これを解決するには、jwt関数の 'iat'から時間を引く。 tokboxサポートのおかげで解決策を見つけることができました。以下の行が表示さのような

find/-name opentok.py 

その後substract 3600:頭に浮かぶ

def _create_jwt_auth_header(self): 
    payload = { 
        'ist': 'project', 
        'iss': self.api_key, 
        'iat': int(time.time()) - 3600, # three minutes ago (seconds) 
        'exp': int(time.time()) + (60*3), # 3 minutes in the future (seconds) 
        'jti': '{0}'.format(0, random.random()) 
       } 

    return jwt.encode(payload, self.api_secret, algorithm='HS256') 
関連する問題