2014-11-18 5 views
3

Flask-RESTful 서비스를 설정 중이며 사용자 인증이 작동합니다. 내가 사용하는 방법은 다음과 같습니다Flask RESTful 사용자 토큰 폐기

class token(Resource): 
    decorators = [auth.login_required] 
    def post(self): 
     username = g.user 
     return_token = generate_auth_token(username) 
     return {'token':return_token.decode()}, 200 

를 그리고 저장할 필요가 없도록 토큰은 다음과 같은 확인 :

def generate_auth_token(username, expiration=600): 
    gen_serial = Serializer(secret_key, expires_in=expiration) 
    return gen_serial.dumps({'username': username}) 

다음과 같이 내가 사용자에게 토큰을 전달 서버 측 :

def verify_auth_token(auth_token): 
    serial = Serializer(secret_key) 
    try: 
     data = serial.loads(auth_token) 
    except SignatureExpired: 
     return None 
    except BadSignature: 
     return None 
    serial_user = data['username'] 
    return serial_user 

그러나 이것은 내가 만료 토큰 서버 측을 저장하지 않고 만료되기 전에 사용자를 로그 아웃하는 방법을 확실하지 오전, 잘 작동하는 것 같다. 내 생각은 사용자가 로그 아웃하려고 할 때 가비지 토큰을 돌려주는 것이지만, 이것이 우아하고 안전한 솔루션이라고 생각하지 않습니다.

모든 도움말이 도움이 될 것입니다.

+0

사용자가 시작한 logou입니까? t 또는 서버가 시작 했습니까? –

+0

사용자가 시작하려고합니다. 목표는 사용자가 작업이 끝나면 로그 아웃을 클릭하는 것입니다. 그렇지 않으면 토큰이 일정 기간 후에 만료됩니다. –

답변

1

쓰레기 토큰은 단순히 데이터 인코딩하지보다는 : 그 시점에서

def invalidate(self): 
    return_token = generate_auth_token() 
    return {'token':return_token.decode()}, 200 

:

def generate_auth_token(username=None, expiration=600): 
    gen_serial = Serializer(secret_key, expires_in=expiration) 
    data = {'username': username} if username is not None else {} 
    return gen_serial.dumps(data) 

는 그런 다음 로그인을 필요로하며, 사용자 이름없이 토큰을 반환하는 invalidate 엔드 포인트를 가질 수를 아마도 누락 된 사용자 이름 입력란을 처리 할 수 ​​있습니다.

def verify_auth_token(auth_token): 
    serial = Serializer(secret_key) 
    try: 
     data = serial.loads(auth_token) 
    except SignatureExpired: 
     return None 
    except BadSignature: 
     return None 
    serial_user = data.get('username') 
    return serial_user 
+0

고마워요! 약간의 테스트가 진행되는 동안이 방법이 효과가 있다고 생각합니다. –

+2

@Sean : OP 질문을 이해하지 못했지만 해법이 유효하기 전에 유효한 토큰을 어떻게 무효화합니까? 유효한 토큰을 얻은 다음'invalidate()'엔드 포인트를 호출하면 원래 토큰은 만료 될 때까지 여전히 유효하고 사용할 수 있습니다. 권리? – Miguel

+0

@Miguel - 정확함. 클라이언트는 토큰을 없애기를 원하기 때문에 토큰을 명시 적으로 "교환"할 수 있기를 원합니다. 그러나 악의적 인 클라이언트 또는 man-in-the-middle은 만료 될 때까지 유효한 토큰을 계속 사용할 수 있습니다. –