TokenObject.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
  5. @AUTHOR: ASJRD018
  6. @NAME: AnsjerOA
  7. @software: PyCharm
  8. @DATE: 2018/8/13 15:36
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. @file: TokenObject.py
  12. @Contact: chanjunkai@163.com
  13. """
  14. from Ansjer.config import OAUTH_ACCESS_TOKEN_SECRET, OAUTH_REFRESH_TOKEN_SECRET, OAUTH_ACCESS_TOKEN_TIME, \
  15. OAUTH_REFRESH_TOKEN_TIME
  16. import jwt, time
  17. from Object.RedisObject import RedisObject
  18. class TokenObject:
  19. def __init__(self, token=None, returntpye='currency'):
  20. if token == 'local':
  21. token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTg0MzUxODk2MjgyMTM4MDAxMzgwMDAiLCJsYW5nIjoiZW4iLCJ1c2VyIjoiMTM2ODAzMTc1OTYiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1ODcyNzcwNjB9.c0LV_XyxwbzUlYqMJqx7vw9f19Jv-0kGnUHuu_go-mo'
  22. if token == 'test':
  23. token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJleHAiOjE1Njk5OTg4OTYsInVzZXJJRCI6IjE1MTU2NDI2MjMzNzkzOTUxMzgwMDEzODAwMSIsImxhbmciOiJlbiIsIm1fY29kZSI6IjEyMzQxMzI0MzIxNCJ9.VAQtT9AbCCfXcrNj9DL5cvVasMDoI7AP8ptgU1GoMu8'
  24. self.token = token
  25. self.lang = None
  26. self.userID = None
  27. self.user = ''
  28. self.code = 0
  29. # 令牌校验
  30. self.valid()
  31. self.returntpye = returntpye
  32. def valid(self):
  33. if self.token is None:
  34. self.code = 309
  35. return
  36. try:
  37. self.token= self.token.replace("Bearer ", "")
  38. res = jwt.decode(self.token, OAUTH_ACCESS_TOKEN_SECRET, algorithms='HS256')
  39. # print(res)
  40. self.userID = res.get('userID', None)
  41. self.lang = res.get('lang', None)
  42. self.user = res.get('user', '')
  43. # 刷新登录时间
  44. # if self.userID:
  45. # print(self.user)
  46. # redisObj = RedisObject(db=3)
  47. # redisObj.set_data(key=self.userID, val=self.user, expire=300)
  48. except jwt.ExpiredSignatureError as e:
  49. print('过期')
  50. print(repr(e))
  51. self.code = 309
  52. return
  53. except Exception as e:
  54. self.code = 309
  55. return
  56. else:
  57. if not self.userID:
  58. self.code = 309
  59. return
  60. else:
  61. if self.userID:
  62. self.code = 0
  63. return res
  64. else:
  65. self.code = 309
  66. return
  67. # token加密
  68. def generate(self, data={}):
  69. try:
  70. access_expire = int(OAUTH_ACCESS_TOKEN_TIME.total_seconds())
  71. refresh_expire = int(OAUTH_REFRESH_TOKEN_TIME.total_seconds())
  72. now_stamp = int(time.time())
  73. access_data = data
  74. refresh_data = data
  75. access_data['exp'] = access_expire + now_stamp
  76. refresh_data['exp'] = refresh_expire + now_stamp
  77. access_token = jwt.encode(access_data,
  78. OAUTH_ACCESS_TOKEN_SECRET,
  79. algorithm='HS256')
  80. refresh_token = jwt.encode(
  81. refresh_data,
  82. OAUTH_REFRESH_TOKEN_SECRET,
  83. algorithm='HS256')
  84. res = {
  85. 'access_token': access_token.decode('utf-8'),
  86. 'access_expire': access_expire,
  87. 'refresh_expire': refresh_expire,
  88. 'refresh_token': refresh_token.decode('utf-8'),
  89. }
  90. if self.returntpye=='pc':
  91. res = {
  92. 'token': access_token.decode('utf-8'),
  93. 'access_expire': access_expire,
  94. 'refresh_expire': refresh_expire,
  95. 'refresh_token': refresh_token.decode('utf-8'),
  96. }
  97. except Exception as e:
  98. self.code = 309
  99. print(repr(e))
  100. else:
  101. self.code = 0
  102. return res
  103. # 过期掉refresh_token
  104. def expire_refresh_token(self):
  105. try:
  106. userID = self.userID
  107. lang = self.lang
  108. user = self.user
  109. refresh_data = {'userID': userID, 'lang': lang, 'user': user, 'exp': 0} # 过期时间置0
  110. refresh_data = jwt.encode(refresh_data, OAUTH_REFRESH_TOKEN_SECRET, algorithm='HS256')
  111. return refresh_data
  112. except Exception as e:
  113. self.code = 309
  114. return False
  115. def encryption(self, data={}):
  116. try:
  117. access_expire = int(OAUTH_ACCESS_TOKEN_TIME.total_seconds())
  118. refresh_expire = int(OAUTH_REFRESH_TOKEN_TIME.total_seconds())
  119. now_stamp = int(time.time())
  120. access_data = data
  121. refresh_data = data
  122. access_data['exp'] = access_expire + now_stamp
  123. refresh_data['exp'] = refresh_expire + now_stamp
  124. access_token = jwt.encode(access_data,
  125. OAUTH_ACCESS_TOKEN_SECRET,
  126. algorithm='HS256')
  127. return access_token.decode('utf-8')
  128. except Exception as e:
  129. self.code = 309
  130. print(repr(e))
  131. else:
  132. self.code = 0
  133. return res
  134. def refresh(self):
  135. if not self.token:
  136. self.code = 309
  137. return
  138. try:
  139. res = jwt.decode(self.token, OAUTH_REFRESH_TOKEN_SECRET, algorithms='HS256')
  140. except jwt.ExpiredSignatureError as e:
  141. print('过期')
  142. print(repr(e))
  143. self.code = 309
  144. except Exception as e:
  145. self.code = 309
  146. print(repr(e))
  147. else:
  148. self.code = 0
  149. userID = res.get('userID', '')
  150. user = res.get('user', '')
  151. lang = self.lang
  152. refreshRes = self.generate(data={'userID': userID, 'lang': lang, 'user': user})
  153. return refreshRes
  154. # import jwt
  155. #
  156. #
  157. # token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySUQiOiIxNTMzODg0NDE4NTE5MTM4MDAxMzgwMDAiLCJleHAiOjE1NTU1NTEwNjUsInVzZXIiOiIxMTFAcXEuY29tIiwibGFuZyI6ImVuIn0.waPlfIBucSA7rFfnsxOKIVJ_cL6xiP33cAiz1IDoteY'
  158. # res = jwt.decode(token, 'a+jbgnw%@1%zy^=@dn62%', algorithms='HS256')
  159. # print(res)