2017-08-11 26 views
0

Web2pyで構築されたいくつかのREST APIでは、トークンベースの認証を実現しようとしています。私はバージョン2.14.6(安定版)を使用しています。ドキュメントで述べたように、私はその手順に従い、JWTを使用して認証保護されたリソースからデータを認証し、取得することができました。私は、次の手順を行っている:Web2py JWTベースの認証 - リフレッシュトークン

from gluon.tools import AuthJWT 

myjwt = AuthJWT(auth, secret_key='secret', user_param="email") 

def login_take_token(): 
    return myjwt.jwt_token_manager() 

@myjwt.allows_jwt() 
@auth.requires_login() 
def get_my_service(): 
    my_code 

だからこの構成では、私は「login_take_tokenを」機能も「get_my_service」から必要なデータを取得するための呼び出しを行ったときに、トークンを取得することができています。以下は、サービスコールです:これは私たちを返すトークンは

/app/controller/get_my_service?_token=<TOKEN_RECEIVED> 

を言う

/app/controller/login_take_token?email=abc.com&password=abc123 

これは私達にログインに成功に必要な予想データを返します。

私の質問は、私たちがトークンを使用して、新しいアクティブ・トークンを取得するためにlogin_take_tokenに電話をかけることができますよりも、トークンの有効期限が切れている場合、web2pyのドキュメントで説明したように、です。しかし、この以下の呼び出しではトークンは返されませんが、「トークンは期限切れです」という出力とともに400のBad Requestが返されます。

/app/controller/login_take_token?_token=<TOKEN_RECEIVED> 

新しいトークンを取得するには、古いトークン(有効期限切れ)でどのように呼び出しを行うべきですか。現在のトークンがすでに有効期限が切れている場合は、どちらもトークンを認証しないでもリフレッシュすることができることを意味し、デフォルト、verify_expiration=Trueことで

よろしく

答えて

4

、。あなたは有効期限が切れたトークンとリフレッシュを許可したい場合はリフレッシュが要求されたときに(まだ認証の有効期限を確認しながら)、あなたは条件付きでverify_expirationを変更することができます。

def login_take_token(): 
    myjwt.verify_expiration = False # This will allow refresh with an expired token. 
    return myjwt.jwt_token_manager() 

注意を、そのデフォルトに追加の引数、refresh_expiration_deltaは、そこにあります60 * 60(すなわち、60分)。元のトークンが発行されてからの時間がrefresh_expiration_deltaより大きい場合、リフレッシュ要求は拒否され、新しいトークンを取得するために再認証が必要になります。

デフォルトの有効期限が5分でデフォルトのリフレッシュ有効期限デルタが60分の場合、再認証を強制する前に最大12個のリフレッシュトークンを取得できます(5分ごとに正確にリフレッシュを要求したと仮定します) )。リフレッシュトークンを発行する期間を延長する場合は、もちろん、refresh_expiration_deltaを高い値に設定することができます。