如何获取access

如何获取access,第1张

通过用户验证登录和授权,获取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 源码解析 以及内存泄漏问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10154056.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存