如何使用此刷新令牌查询用户和会话信息



最近我一直在研究身份验证、加密、哈希等。当我浏览okta文档时,我注意到了这个curl

http --form POST https://${yourOktaDomain}/oauth2/default/v1/token 
accept:application/json 
authorization:'Basic MG9hYmg3M...' 
cache-control:no-cache 
content-type:application/x-www-form-urlencoded 
grant_type=refresh_token 
redirect_uri=http://localhost:8080 
scope=offline_access%20openid 
refresh_token=MIOf-U1zQbyfa3MUfJHhvnUqIut9ClH0xjlDXGJAyqo

这个旋度返回

{
"access_token": "eyJhbGciOiJ[...]K1Sun9bA",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "offline_access%20openid",
"refresh_token": "MIOf-U1zQbyfa3MUfJHhvnUqIut9ClH0xjlDXGJAyqo",
"id_token": "eyJraWQiO[...]hMEJQX6WRQ"
}

那么,现在的问题是,这个刷新令牌是如何用于查询数据库中的用户详细信息、用户会话等的?我观察到的是,刷新令牌的长度是43个字符,采用base64url编码格式,将其转换为十六进制,它变成了64个字符。使用AES-256-cbc算法并加密base64编码的UUID(它是pk并包含会话详细信息(会产生具有十六进制64字符的加密令牌。但问题是IV/nonce和盐储存在哪里?如果刷新令牌不是加密的令牌,那么如何在数据库中定期查询如此长的字符串,其中包含超过一百万个条目,而没有任何可能的延迟?我知道索引是可能的,但考虑到索引占用的所有空间,这不是一个代价高昂的决定吗?

出于好奇问这个问题。

谢谢。

Refresh令牌是不透明的,因此其中不包含任何信息。

你可以在这里阅读更多-https://developer.okta.com/docs/guides/refresh-tokens/main/#about-刷新令牌

要获取有关用户的信息,您可以使用/userinfo端点,如下所述-https://developer.okta.com/docs/reference/api/oidc/#userinfo.但它需要access_token而不是刷新。因此,您首先需要在/token端点的刷新令牌的帮助下获得访问令牌,这里再次详细描述-https://developer.okta.com/docs/reference/api/oidc/#token,并且仅在调用/userinfo之后

至于数据操作和存储的有效性问题,从我的角度来看,解决方案之一可以是计算令牌的哈希,并将其用作存储中的密钥(如果需要的话(。

如果你对信息数据结构和算法感兴趣,我认为你的问题可能会有一些误导性的标签

最新更新