1.ASP.NET Core认è¯åçåå®ç°
2.authing2.0是登录登录开源的吗
3.MaxKey单点登录认证系统-开源IAM产品
4.(四)Vue实用框架-Ruoyi(登录验证)
5.「博客应用」使用 Flask-Login 实现用户认证
6.fido是什么
ASP.NET Core认è¯åçåå®ç°
é常å¨åºç¨ç¨åºä¸ï¼å®å ¨å为åå两个æ¥éª¤ï¼éªè¯åææãéªè¯è´è´£æ£æ¥å½å请æ±è ç身份ï¼èææåæ ¹æ®ä¸ä¸æ¥å¾å°ç身份å³å®å½å请æ±è æ¯å¦è½å¤è®¿é®ææçèµæºã
æ¢ç¶å®å ¨ä»éªè¯å¼å§ï¼æ们ä¹å°±ä»éªè¯å¼å§ä»ç»å®å ¨ã
æ们å ä»æ¯è¾ç®åçåºæ¯å¼å§èèï¼ä¾å¦å¨ Web API å¼åä¸ï¼éè¦éªè¯è¯·æ±æ¹æ¯å¦æä¾äºå®å ¨ä»¤çï¼å®å ¨ä»¤çæ¯å¦ææãå¦ææ æï¼é£ä¹ API 端åºè¯¥æç»æä¾æå¡ãå¨å½åç©ºé´ Microsoft.AspNetCore.Authentication ä¸ï¼å®ä¹å ³äºéªè¯çæ ¸å¿æ¥å£ã对åºçç¨åºéæ¯ Microsoft.AspNetCore.Authentication.Abstractions.dllã
å¨ ASP.NET ä¸ï¼éªè¯ä¸å å« 3 个åºæ¬æä½ï¼
éªè¯æä½è´è´£åºäºå½å请æ±çä¸ä¸æï¼ä½¿ç¨æ¥èªè¯·æ±ä¸çä¿¡æ¯ï¼ä¾å¦è¯·æ±å¤´ãCookie ççæ¥æé ç¨æ·æ è¯ãæ建çç»ææ¯ä¸ä¸ª AuthenticateResult 对象ï¼å®æ示äºéªè¯æ¯å¦æåï¼å¦ææåçè¯ï¼ç¨æ·æ è¯å°å¯ä»¥å¨éªè¯ç¥¨æ®ä¸æ¾å°ã
常è§çéªè¯å æ¬ï¼
å¨ææ管çé¶æ®µï¼å¦æç¨æ·æ²¡æå¾å°éªè¯ï¼ä½æææ访é®çèµæºè¦æ±å¿ é¡»å¾å°éªè¯çæ¶åï¼æææå¡ä¼ååºè´¨è¯¢ãä¾å¦ï¼å½å¿åç¨æ·è®¿é®åéèµæºçæ¶åï¼æè å½ç¨æ·ç¹å»ç»å½é¾æ¥çæ¶åãæææå¡ä¼éè¿è´¨è¯¢æ¥ç¸åºç¨æ·ã
ä¾å¦
质询æä½åºè¯¥è®©ç¨æ·ç¥éåºè¯¥ä½¿ç¨ä½ç§éªè¯æºå¶æ¥è®¿é®è¯·æ±çèµæºã
å¨ææ管çé¶æ®µï¼å¦æç¨æ·å·²ç»éè¿äºéªè¯ï¼ä½æ¯å¯¹äºå ¶è®¿é®çèµæºå¹¶æ²¡æå¾å°è®¸å¯ï¼æ¤æ¶ä¼ä½¿ç¨æç»æä½ã
ä¾å¦ï¼
æç»è®¿é®å¤çåºè¯¥è®©ç¨æ·ç¥éï¼
å¨è¿ä¸ªåºæ¯ä¸ï¼å¯ä»¥çå°ï¼éªè¯éè¦æä¾çåºæ¬åè½å°±å æ¬äºéªè¯åéªè¯å¤±è´¥åçæç»æå¡ä¸¤ä¸ªæä½ãå¨ ASP.NET Core ä¸ï¼éªè¯è¢«ç§°ä¸º Authenticateï¼æç»è¢«ç§°ä¸º Forbidã å¨ä¾æ¶è´¹è 访é®çç½ç«ä¸ï¼å¦ææ们å¸æå¨éªè¯å¤±è´¥åï¼ä¸æ¯å API ä¸æ ·ç´æ¥è¿åä¸ä¸ªé误页é¢ï¼èæ¯å°ç¨æ·å¯¼èªå°ç»å½é¡µé¢ï¼é£ä¹ï¼å°±è¿éè¦å¢å ä¸ä¸ªæä½ï¼è¿ä¸ªæä½çæ¬è´¨æ¯å¸æç¨æ·å次æä¾å®å ¨åæ®ï¼å¨ ASP.NET Core ä¸ï¼è¿ä¸ªæä½è¢«ç§°ä¸º Challengeãè¿ 3 个æä½ç»åå¨ä¸èµ·ï¼å°±æ¯éªè¯æåºæ¬çè¦æ±ï¼ä»¥æ¥å£å½¢å¼è¡¨ç¤ºï¼å°±æ¯ IAuthenticationHandler æ¥å£ï¼å¦ä¸æ示ï¼
éªè¯çç»ææ¯ä¸ä¸ª AuthenticateResult 对象ãå¼å¾æ³¨æçæ¯ï¼å®è¿æä¾äºä¸ä¸ªéææ¹æ³ NoResult() ç¨æ¥è¿å没æå¾å°ç»æï¼éææ¹æ³ Fail() çæä¸ä¸ªè¡¨ç¤ºéªè¯å¼å¸¸çç»æï¼è Success() æååéè¦æä¾éªè¯ç¥¨æ®ã
éè¿éªè¯ä¹åï¼ä¼è¿åä¸ä¸ªå å«äºè¯·æ±è 票æ®çéªè¯ç»æã
å¨ GitHub ä¸æ¥ç AuthenticateResult æºç
é£ä¹éªè¯çä¿¡æ¯æ¥èªåªéå¢ï¼é¤äºåé¢ä»ç»ç 3 个æä½ä¹å¤ï¼è¿è¦æ±ä¸ä¸ªåå§åçæä½ Initializeï¼éè¿è¿ä¸ªæ¹æ³æ¥æä¾å½å请æ±çä¸ä¸æä¿¡æ¯ã
å¨ GitHub ä¸æ¥ç IAuthenticationHandler å®ä¹
æçæ¶åï¼æ们è¿å¸ææä¾ç»åºæä½ï¼å¢å ç»åºæä½çæ¥å£è¢«ç§°ä¸º IAuthenticationSignOutHandlerã
å¨ GitHub ä¸æ¥ç IAuthenticationSignOutHandler æºç
å¨ç»åºçåºç¡ä¸ï¼å¦æè¿å¸ææä¾ç»å½æä½ï¼é£ä¹å°±æ¯ IAuthenticationSignInHandler æ¥å£ã
å¨ GitHub ä¸æ¥ç IAuthenticationSignInHandler æºç
ç´æ¥å®ç°æ¥å£è¿æ¯æ¯è¾éº»ç¦çï¼å¨å½åç©ºé´ Microsoft.AspNetCore.Authentication ä¸ï¼å¾®è½¯æä¾äºæ½è±¡åºç±» AuthenticationHandler 以æ¹ä¾¿éªè¯æ§å¶å¨çå¼åï¼å ¶å®æ§å¶å¨å¯ä»¥ä»è¯¥æ§å¶å¨æ´¾çï¼ä»¥åå¾å ¶æä¾çæå¡ã
éè¿ç±»çå®ä¹å¯ä»¥çå°ï¼å®ä½¿ç¨äºæ³åãæ¯ä¸ªæ§å¶å¨åºè¯¥æä¸ä¸ªå¯¹åºè¯¥æ§å¶å¨çé ç½®é项ï¼éè¿æ³åæ¥æå®éªè¯å¤çå¨æ使ç¨çé 置类åï¼å¨æé å½æ°ä¸ï¼å¯ä»¥çå°å®è¢«ç¨äºè·å对åºçé ç½®é项对象ã
å¨ GitHub ä¸æ¥ç AuthenticationHandler æºç
éè¿ InitializeAsync()ï¼éªè¯å¤çå¨å¯ä»¥è·å¾å½å请æ±çä¸ä¸æ对象 HttpContextã
æç»ï¼ä½ä¸ºæ½è±¡ç±»ç ï¼å¸ææ´¾çç±»æ¥å®æè¿ä¸ªéªè¯ä»»å¡ï¼æ½è±¡æ¹æ³ HandleAuthenticateAsync() æä¾äºæ©å±ç¹ã
éªè¯çç»ææ¯ä¸ä¸ª AuthenticateResultã
èæç»æå¡åç®åçå¤ï¼ç´æ¥å¨è¿ä¸ªæ½è±¡åºç±»ä¸æä¾äºé»è®¤å®ç°ãç´æ¥è¿å HTTP ã
å©ä¸çä¸ä¸ªä¹ä¸æ ·ï¼æä¾äºé»è®¤å®ç°ãç´æ¥è¿å HTTP ååºã
å¯¹äº JWT æ¥è¯´ï¼å¹¶ä¸æ¶åå°ç»å ¥åç»åºï¼æ以å®éè¦ä»å®ç° IAuthenticationHandler æ¥å£çæ½è±¡åºç±» AuthenticationHandler æ´¾çåºæ¥å³å¯ãä» AuthenticationHandler æ´¾çåºæ¥ç JwtBearerHandler å®ç°åºäºèªå·±çé ç½®é项 JwtBearerOptionsãæ以该类å®ä¹å°±åå¾å¦ä¸æ示ï¼èæé å½æ°æ¾ç¶é åäºæ½è±¡åºç±»çè¦æ±ã
å¨ GitHub ä¸æ¥ç JwtBearerHandler æºç
çæ£çéªè¯åå¨ HandleAuthenticateAsync() ä¸å®ç°ãä¸é¢ç代ç æ¯ä¸æ¯å°±å¾çæäºï¼ä»è¯·æ±å¤´ä¸è·åé带ç JWT 访é®ä»¤çï¼ç¶åéªè¯è¯¥ä»¤ççæææ§ï¼æ ¸å¿ä»£ç å¦ä¸æ示ã
å¨ GitHub ä¸æ¥ç JwtBearerHandler æºç
å¨ ASP.NET Core ä¸ï¼ä½ å¯ä»¥ä½¿ç¨åç§éªè¯å¤çå¨ï¼å¹¶ä¸ä» ä» åªè½ä½¿ç¨ä¸ä¸ªï¼éªè¯æ§å¶å¨éè¦ä¸ä¸ªå称ï¼å®è¢«çä½è¯¥éªè¯æ¨¡å¼ Schema çå称ãJwt éªè¯æ¨¡å¼çé»è®¤åç§°å°±æ¯ "Bearer"ï¼éè¿å符串常é JwtBearerDefaults.AuthenticationScheme å®ä¹ã
å¨ GitHub ä¸æ¥ç JwtBearerDefaults æºç
æç»éè¿ AuthenticationBuilder çæ©å±æ¹æ³ AddJwtBearer() å° Jwt éªè¯æ§å¶å¨æ³¨åå°ä¾èµæ³¨å ¥ç容å¨ä¸ã
å¨ GitHub ä¸æ¥ç JwtBearerExtensions æ©å±æ¹æ³æºç
ä¸ç§éªè¯å¤çå¨ï¼å ä¸å¯¹åºçéªè¯é ç½®é项ï¼æ们å为å®èµ·ä¸ä¸ªååï¼ç»åèµ·æ¥å°±æ为ä¸ç§éªè¯æ¶æ Schemaãå¨ ASP.NET Core ä¸ï¼å¯ä»¥æ³¨åå¤ç§éªè¯æ¶æãä¾å¦ï¼ææçç¥å¯ä»¥ä½¿ç¨æ¶æçå称æ¥æå®æ使ç¨çéªè¯æ¶ææ¥ä½¿ç¨ç¹å®çéªè¯æ¹å¼ãå¨é ç½®éªè¯çæ¶åï¼é常设置é»è®¤çéªè¯æ¶æãå½æ²¡ææå®éªè¯æ¶æçæ¶åï¼å°±ä¼ä½¿ç¨é»è®¤æ¶æè¿è¡å¤çã
è¿å¯ä»¥
注åçéªè¯æ¨¡å¼ï¼æç»åæ AuthenticationSchemeï¼æ³¨åå°ä¾èµæ³¨å ¥æå¡ä¸ã
å¨ GitHub ä¸æ¥ç AuthenticationScheme æºç
åç§éªè¯æ¶æ被ä¿åå°ä¸ä¸ª IAuthenticationSchemeProvider ä¸ã
å¨ GitHub ä¸æ¥ç IAuthenticationSchemeProvider æºç
æç»ç使ç¨æ¯éè¿ IAuthenticationHandlerProvider æ¥å®ç°çï¼éè¿ä¸ä¸ªéªè¯æ¨¡å¼çå符串å称ï¼å¯ä»¥åå¾æ对åºçéªè¯æ§å¶å¨ã
å¨ GitHub ä¸æ¥ç IAuthenticationHandlerProvider æºç
å®çé»è®¤å®ç°æ¯ AuthenticationHandlerProviderï¼æºç 并ä¸å¤æã
å¨ GitHub ä¸æ¥ç AuthenticationHandlerProvider æºç
éªè¯ä¸é´ä»¶çå¤ç就没æé£ä¹å¤æäºã
æ¾å°é»è®¤çéªè¯æ¨¡å¼ï¼ä½¿ç¨é»è®¤éªè¯æ¨¡å¼çå称åå¾å¯¹åºçéªè¯å¤çå¨ï¼å¦æéªè¯æåçè¯ï¼æå½å请æ±ç¨æ·ç主ä½æ¾å°å½å请æ±ä¸ä¸æç User ä¸ã
éé¢è¿æä¸æ®µç¹å«ç代ç ï¼ç¨æ¥æ¾åºåªäºéªè¯å¤çå¨å®ç°äº IAuthenticationHandlerProviderï¼å¹¶ä¾æ¬¡è°ç¨å®ä»¬ï¼ççæ¯å¦éè¦æåç»æ¢è¯·æ±å¤çè¿ç¨ã
å¨ GitHub ä¸æ¥ç AuthenticationMiddle æºç
authing2.0是开源的吗
Authing 2.0不是开源的。Authing 2.0是认证认证一个身份认证与授权平台,它提供了安全高效的源码源码用户管理系统。虽然Authing 2.0具有强大的登录登录功能和灵活性,但根据我所了解的认证认证信息,它并没有被开源。源码源码java隐藏核心源码
首先,登录登录从Authing 2.0的认证认证官方介绍和宣传资料中,我们可以看到该平台是源码源码由专业的团队开发并维护的,而且它提供了商业化的登录登录服务。这通常意味着其源代码并不是认证认证公开可用的,而是源码源码作为商业产品的一部分进行销售和提供服务。
其次,登录登录开源项目通常会在其官方网站或代码托管平台上明确标注其开源属性和相关的认证认证许可证信息。然而,源码源码在Authing 2.0的官方渠道中,我们并没有找到这样的信息,这也进一步支持了Authing 2.0不是开源的结论。
最后,虽然Authing 2.0没有开源,但它仍然是一个值得关注的身份验证解决方案。它提供了丰富的API和灵活的配置选项,可以帮助开发者快速集成登录组件并构建完整的用户管理系统。此外,Authing 2.0还注重安全性,采用了多种加密技术和安全措施来保护用户数据的安全。
总的来说,虽然Authing 2.0不是天书世界游戏源码一个开源项目,但它作为一个商业化的身份验证与授权平台,提供了强大的功能和优质的服务,值得开发者和企业的关注和使用。如果需要更多关于Authing 2.0的详细信息或想要使用其服务,建议访问其官方网站或联系其销售团队进行了解。
MaxKey单点登录认证系统-开源IAM产品
MaxKey单点登录认证系统(Single Sign On System)是一款业界领先的企业级开源IAM产品,提供全面的身份管理和认证服务,支持OAuth 2.0/OpenID Connect、SAML 2.0、JWT、CAS、SCIM等标准协议,覆盖用户身份管理(IDM)、身份认证(AM)、单点登录(SSO)、RBAC权限管理和资源管理等功能。
MaxKey以其强大的功能和广泛的协议支持,为用户提供了一个简单、标准、安全和开放的管理平台,助力企业实现高效的用户认证和权限管理。
MaxKey官方网站提供了详细的文档和资源,帮助用户快速了解和使用产品。同时,官方QQ交流群和邮箱支持为用户提供实时的交流与技术支持。
MaxKey的代码托管在Gitee和GitHub上,开放的android源码加论文源代码让开发者可以自由地探索和定制,推动技术创新。
单点登录(Single Sign On)简称SSO,是一种简化用户登录流程的技术。它允许用户在登录认证中心后,无需在访问其他相互信任的应用系统时再次登录,大大提高了用户体验和工作效率。
MaxKey单点登录认证系统集成了丰富的功能模块,包括MaxKey认证、登录界面、主界面、MaxKey管理、访问报表、用户管理、应用管理等,为企业提供了全面的认证和管理解决方案。
(四)Vue实用框架-Ruoyi(登录验证)
在讨论Vue实用框架Ruoyi的登录验证机制时,一个关键点往往被忽略:对用户账号密码的校验过程。通常,我们通过AuthenticationManager.authenticate方法进行验证,但深入探究,我们会发现这个方法直接调用底层实现,这不禁引发疑问:账号密码是否真的会通过数据库进行校验?答案是肯定的,接下来我们将详细解释登录验证的完整流程。
在传统的登录验证场景中,我们通常需要实现以下逻辑:接收用户名和密码,验证其正确性,然后返回相应的超神战队 源码认证结果。Spring Security作为安全框架,正是为了实现这种逻辑而设计的。它通过一系列配置,包括加密器、用户服务对象、用户细节等,确保登录过程既安全又高效。
在深入Spring Security的认证流程时,需要关注其内部实现机制。尽管官方文档提供了丰富的配置指南,但真正了解其内部工作原理往往需要通过源码阅读。认证过程主要由三个部分组成:Principal(用户信息),Credentials(凭证信息,即密码),Authorities(权限信息)。最终,安全框架会生成一个带有用户详细信息的Authentication对象,用于后续的权限管理。
认证流程开始于生成未认证的UsernamePasswordAuthenticationToken对象,这是一个继承自Authentication类的对象。接下来,使用这个对象调用AuthenticationManager的authenticate方法进行认证。这个方法的实现逻辑较为复杂,会寻找特定的实现类进行具体认证操作。
在认证实现过程中,关键步骤在于将用户提供的用户名和密码与数据库中的信息进行对比,以确认其有效性。电子巡更系统 源码如果验证通过,认证过程会生成一个带有用户信息的Authentication对象,并返回该对象,完成认证流程。
在实际开发中,虽然Spring Security提供了默认的实现,但用户通常需要根据业务需求自定义UserDetails接口的实现类,以满足更具体的数据结构和验证逻辑。这包括对权限集合的处理,即在用户认证后获取其角色和权限信息,以支持后续的访问控制。
权限信息的获取通常涉及到UserDetailsService接口的实现,该接口负责从数据库中查询用户的角色信息,进而生成权限集合。在Ruoyi框架中,这些逻辑具体实现于UserDetailsServiceImpl类中,它通过用户的角色信息获取对应的菜单数据,形成一个Set集合,用于权限控制。
在完成认证流程后,系统会存储认证信息,以便在后续请求中进行权限验证。这一过程可能涉及Redis等缓存技术,以提高认证速度并降低数据库访问频率。
在实现登录验证功能时,开发者还需要关注异常处理和退出流程的实现,确保在登录失败或用户退出时,系统能够妥善处理状态并提供反馈。
最后,要实现基于JWT的登录验证,需要在Spring Security配置中禁用session机制,并自定义JWT过滤器。通过这种方式,可以将认证令牌与请求关联,从而实现更细粒度的权限控制。
「博客应用」使用 Flask-Login 实现用户认证
在 SuzyBlog 的博客应用中,我们将实现用户认证功能,使用 Flask-Login 管理用户登录和登出。首先,确保下载 SuzyBlog 的源代码,以配合本文的学习。
在前文中,虽然已经构建了博客前台,但用户登录状态的判断是基于模拟数据。接下来,我们将重点关注Admin用户的登录登出功能。
1. 安全存储用户密码
为了保护用户隐私,不能明文存储数据库中的密码。使用 werkzeug.security 提供的 generate_password_hash 函数生成散列值,通过 salt 增加随机性,即使泄露也难以逆向获取密码。Admin模型中,通过 password 特性属性和 validate_password 方法来处理这些操作。
2. 注册命令行初始化Admin
SuzyBlog 不在网页上提供注册功能,而是通过自定义命令行工具初始化Admin用户。flask init-admin 命令行允许用户输入用户名和密码,通过 click 模块的密码装饰器保护用户输入。
3. Flask-Login用户认证
在应用中,Flask-Login 被用于区分管理员(如使用admin账号登录)和普通访客。创建 LoginManager 实例,设置用户加载函数,使用current_user变量记录登录状态。用户登录后,可以在模板中轻松访问当前用户信息。
3.1 登录管理
创建login视图处理登录请求,验证用户身份。登录成功后,用户将被重定向回首页。同时,我们为模板的页脚添加了登录/登出链接,使用query参数next来记录用户来源。
3.2 登入与登出操作
login视图中,处理表单提交并验证用户信息,login_user函数用于登录,logout_user用于登出。登录后,用户ID会保存在session中,而登出则删除这些信息。
3.3 视图保护
使用@login_required装饰器保护需要登录的视图,未登录用户将被重定向至登录页面。蓝本的@before_request装饰器可以为蓝本下的所有视图提供登录保护。
至此,Flask-Login的使用帮助我们完善了用户认证流程,使得SuzyBlog的权限管理更加安全和有序。
fido是什么
FIDO是一种开放源代码标准,全称是Fast Identity Online(线上快速身份验证),旨在提供安全、便捷、私密的在线身份验证方式。它采用公钥基础设施(PKI)和通用密码学标准,通过密码学算法生成密钥对,实现用户身份的安全验证和管理。
FIDO标准的出现,旨在解决传统密码验证方式存在的问题。传统密码验证方式往往存在密码泄露、密码遗忘、密码被盗用等安全隐患,而且用户需要在多个网站和应用中记住不同的密码,非常不便。FIDO标准通过公钥密码学技术,实现了无需密码即可进行身份验证的功能,提高了身份验证的安全性和便捷性。
FIDO标准的应用范围非常广泛,可以应用于各种需要进行身份验证的场合,如网站登录、移动应用登录、支付验证等。在实际应用中,FIDO标准通过生成密钥对和公钥证书的方式,实现了用户身份的唯一标识和验证。用户在注册时,会生成一对密钥,私钥由用户自己保管,公钥则上传到认证服务器进行验证。在进行身份验证时,用户只需通过私钥进行签名操作,认证服务器即可验证用户的身份。
FIDO标准不仅提高了身份验证的安全性和便捷性,还具有非常好的隐私保护效果。由于FIDO标准采用了公钥密码学技术,用户的身份信息不会在网络传输过程中被泄露,也不会被存储在认证服务器中,从而有效地保护了用户的隐私。
总之,FIDO是一种非常实用的在线身份验证标准,通过公钥密码学技术,实现了无需密码即可进行身份验证的功能,提高了身份验证的安全性和便捷性,同时也具有非常好的隐私保护效果。随着FIDO标准的不断推广和应用,相信未来的在线身份验证将会更加安全、便捷和私密。
阿里Spring Security OAuth2.0认证授权笔记震撼开源!原理+实战+源码三飞!
Spring Security是一款强大的企业级安全框架,它作为Spring生态系统的组成部分,为Spring应用提供声明式安全访问控制。在Spring Boot项目中,集成Spring Security能够简化安全控制代码编写,减少重复工作。 在移动互联网时代,微信等应用的认证过程是用户身份验证的典型例子。认证是指确认用户身份是否合法,例如通过账号密码、二维码或指纹等方式。OAuth2.0作为OAuth协议的升级版本,允许用户授权第三方应用访问其存储信息,无需分享用户名和密码,提供了一种安全的授权协议。 针对Spring Security的学习资料相对较少,本文档将提供两部分深入讲解:首先,通过XML配置在SSM环境中,从源码解析,详解Spring Security的认证、授权(包括“记住我”和CSRF拦截)功能。其次,在Spring Boot中,深入探讨分布式环境下的认证与授权实现。第一份笔记:
基本概念
基于Session的认证
快速上手Spring Security
应用详解
分布式系统认证方案
OAuth2.0介绍
分布式系统授权实现
企业开发首选的Spring Security笔记:
初识Spring Security
授权操作
集中式Spring Security与SpringBoot整合
OAuth2.0实战案例
需要完整文档和源码的朋友,可通过此链接获取:[点击获取链接]2024-11-27 06:26
2024-11-27 05:56
2024-11-27 04:56
2024-11-27 04:18
2024-11-27 04:13
2024-11-27 03:52