ACCESS_TOKEN与FRESH_TOKEN

本文详细介绍了OAuth2.0中的刷新令牌(refresh_token)机制,解释了其如何增强系统的安全性,并讨论了使用刷新令牌的风险及防范措施。

OAuth1.0中的access_token过期时间通常很长,安全性差。于是OAuth2.0推出了refresh_token。

OAuth2.0中,客户端用账户名,密码经过一定方式(比如先请求code),获得ACCESS_TOKEN,expire_in与refresh_token。 
然后在expire_in到期的时候,通过refresh_token获得新的access_token,expire_in,与refresh_token。 
refresh_token也有过期时间,当refresh_token过期的时候,则需要用户重新授权登录。 
注意: 
refresh_token只有在用户长期没有请求的情况下才会过期,因为每次请求token都会获得新的值。

那么这里有个风险:基本上,黑客一旦获得用户的access_token与refresh_token,而且用户之后的一段时间都没有更新,或者不再用这个app了,那么黑客就可以一直以用户的身份进行一些访问。 
当然,如果用户在别的地方再次通过用户名密码登录的话,则原来的access_token与refresh_token自然失效。

进而想到,为了防止一次泄露,造成一段时间内的账户不安全,app客户端应该在后台自动定时用refresh_token请求新的token值。这样,token及时变更,旧token有效时间减少,安全性也可得到一定的提高。

参考文章: 
http://blog.youkuaiyun.com/wenlei_zhouwl/article/details/7256082 
http://www.cnblogs.com/dudu/p/oauth-refresh-token.html

@task(name="[套餐模块]预约高清图") def book_hd_photo_task(cloud_photo_id: int): """ 任务层:封装预约高清图的逻辑,并区分业务成功、业务失败和系统错误。 Args: cloud_photo_id (int): 云相册图片ID。 Returns: dict: 如果预约因业务原因失败(如权益不足),返回错误信息字典。 bool: 如果预约成功,返回 True。 Raises: RuntimeError: 当API调用因网络或系统问题(如超时、服务器错误)失败时抛出。 """ logger = get_run_logger() logger.info(f" (套餐模块) 正在预约高清图,ID: {cloud_photo_id}...") current_access_token = get_fresh_user_token() try: # 调用API层 api_result = call_book_hd_photo_api(current_access_token, cloud_photo_id) # 只有在HTTP状态码为2xx(特别是204)时,代码才会执行到这里 # api_result 会是 {} logger.info(f" (套餐模块) 预约高清图成功,ID: {cloud_photo_id}") return api_result except requests.exceptions.HTTPError as e: # 这是最关键的部分:处理4xx/5xx错误,其中包含了业务错误 # 我们尝试从中解析JSON错误信息 error_details = {"code": "UNKNOWN_API_ERROR", "message": "无法解析API错误响应"} try: if e.response is not None: if e.response.text: error_details = e.response.json() else: error_details["message"] = f"API返回错误状态码: {e.response.status_code},但无响应体" except json.JSONDecodeError: # 如果不是JSON,就当作文本处理 if e.response is not None: error_details["message"] = e.response.text else: error_details["message"] = str(e) logger.warning(f" (套餐模块) 预约高清图失败,API返回业务错误,ID: {cloud_photo_id}。错误信息: {error_details}") return error_details except requests.exceptions.RequestException as e: # 处理网络层错误,如超时、连接失败等 error_msg = f"预约高清图任务失败,网络或系统错误: {e}" logger.warning(error_msg) raise RuntimeError(error_msg) from e except Exception as e: # 捕获任何其他未预期的异常 error_msg = f"预约高清图任务发生未知异常: {e}" logger.warning(error_msg, exc_info=True) raise RuntimeError(error_msg) from e 帮我解释这段代码
最新发布
12-25
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值