
通过用户验证登录和授权,获取Access Token,为下一步获取用户的OpenID做准备;
同时,Access Token是应用在调用OpenAPI访问和修改用户数据时必须传入的参数。
access token由每次用户登录时生成,过期时间默认为三个月,用户再次登录时自动刷新,请网站或应用做好防过期策略,或过期后提示用户再次授权。
OAuth20针对网站接入,提供了登录验证和授权流程,主要提供以下获取access token的方式:
1 server-side模式
即OAuth官方文档中提到的Authorization Code模式,适用于需要从web server访问的应用。
2 client-side模式
即OAuth官方文档中提到的Implicit模式,适用于需要通过客户端访问的方式。
以上两种模式仅在获取access_token时有所区别,后续获取openid、调用API等方式均相同。
2003版本点击工具菜单下的选项,2007或以上版本点击左上角微软图标里面的Access选项。打开后在显示窗口选中用户登录窗体即可。。
'下面代码为用户登录窗体的名为钮取消和钮确定的两个按钮事件
Private Sub 钮取消_Click()
DoCmdQuit '退出程序
End Sub
Private Sub 钮确定_Enter()
'验证用户和密码,登录系统
If DCount("[用户名]", "用户", "[用户名]='" & Text1 & "'") = 0 Then 'Text1为用户名输入框
MsgBox "请输入正确的用户名!", 4096 + 48, "波涛工作室"
ElseIf Nz([Text2]) = Nz(DLookup("[密码]", "用户", "[用户名]='" & Text1 & "'")) Then 'Text2为密码输入框
MeVisible = False '隐藏窗体
DoCmdOpenForm "用户界面" '打开用户界面窗体
Else '密码错误后的处理
MsgBox "密码错误,请重输!", 4096 + 48, "波涛工作室"
End If
End Sub
'下面代码为用户界面窗体的加载事件
Private Sub Form_Load()
MeLabel1 = Forms![用户登录]![Text1] & "您好!欢迎使用本系统" '把登录用户名写入Label1标签
End Sub
前端时间,正好在做公司权限相关的架构问题,然后选择了Spring OAuth2来作为公司权限框架,先记录下目前遇到原生问题吧,后续有时间再来整理这个框架的整体脉络;
RedisTokenStore 主要是来做token持久化到redis的工具类
我们先来看下缓存到redis中有哪些key
ACCESS :用来存放 AccessToken 对象(登录的token值,还有登录过期时间,token刷新值)
AUTH_TO_ACCESS :缓存的也是AccessToken 对象,是可以根据用户名和client_id来查找当前用户的AccessToken
AUTH :用来存放用户信息(OAuth2Authentication),有权限信息,用户信息等
ACCESS_TO_REFRESH :可以根据该值,通过AccessToken找到refreshToken
REFRESH :用来存放refreshToken
REFRESH_TO_ACCESS :根据refreshToken来找到AccessToken
CLIENT_ID_TO_ACCESS :存放当前client_id有多少AccessToken
UNAME_TO_ACCESS :当没有做单点登录的话,可以使用该key,根据用户名查找当前用户有多少AccessToken可以使用
根据client_id和用户名,来获取当前用户的accessToken,如果缓存中的OAuth2Authentication已经过期,或者雷勇有变化,则会重新更新缓存;
缓存OAuth2AccessToken 和 OAuth2Authentication 对象,该方法主要在登录时调用,会把上面说的所有key值都缓存起来;
再看下,移除accessToken时
目前主要是看这几个方法,其他方法也挺简单的,主要是一些redis缓存 *** 作的;
client_id_to_access 和 uname_to_access 使用的是set集合,众所周知redis的set集合的过期时间是按照整个key来设置的;
每次登陆时,会先根据client_id和用户名去缓存中查找是否有可使用的AccessToken,如果有则返回缓存中的值,没有则生成新的;
所以每次登陆都会往这两个集合中放入新的accessToken,如果当某个用户在AccessToken有效期内没有 *** 作,则当前用户的登陆信息会被动下线,access 和 auth 中缓存的值都会过期,再次登陆时就查找不到了;
但是如果当前平台用户量不小,那么一直都会有人 *** 作,client_id_to_access 这个集合就会一直续期,那么过期了的accessToken就会一直存在该集合中,且不会减少,造成内存泄漏;
1自己实现TokenStore,修改client_id_to_access 数据结构
2写个定时任务,定期扫描client_id_to_access ,清除掉已经过期的token
3如果不需要知道当前有哪些用户登录,或者该功能已经用了其他方式实现的,可以直接去掉这两个redis key
以上就是关于如何获取access全部的内容,包括:如何获取access、Access 能通过窗体实现用户登录的效果吗、RedisTokenStore 源码解析 以及内存泄漏问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)