1. 令牌格式

字段 类型 必须 说明 应用令牌 用户令牌
aud str 必须 接收jwt的一方 APP的8字节M5D,创建的时候必须说明这个令牌从属的应用ID 复制用户登录时持有的应用token的app_id
iss str 必须 发布JWT的机构 xdua.com xdua.com
iat str 必须 令牌签发UNIX时间戳 令牌签发UNIX时间戳 令牌签发UNIX时间戳
sub str 必须 jwt所面向的用户 AnoNymuS 真实的用户8位ID
exp int 必须 令牌的过期UTC时间戳 创造开始10年 创造开始15分钟
jti str 可选 JWT ID用于标识该JWT,jwt的唯一身份标志,可以用来防重放
nbf int 可选 令牌有效时间点,早这个点JWT不会被接受和处理。 1分钟后 1秒后
typ str 自定 令牌种类 D=数据/A=算法/L=登录/X=全能 U
clr str 自定 该令牌的颜色,也就是令牌有效的区域。取值R/G/B/X 常量"X",不管是数据访问还是算法访问,都需要X色令牌。 R=红店铺,此时zone=corp=shop,G=绿店铺,此时zone=corp,shop!=corp,B=蓝店铺,此时zone,corp,shop均不相等
ipm str 自定 可以请求的IP白名单 客户端的白名单,半角逗号(,)隔开,例如.../表示如果允许任意公网IP地址发起本令牌,也表示所有IP
dvm str 自定 可请求设备的白名单,半角逗号(,)隔开。格式为设备号类型连冒号,连设备ID。"*"表示允许任何设备 见注释 复制它原来的app_id的各字段
own str 自定 创建这个token的用户ID,用来追踪令牌来源,也是令牌计费账户 创建这个token的用户id 复制自应用令牌的own字段。也是API扣费账户
tid str 自定 令牌在令牌表种的8位ID,用来尽快的索引令牌。 令牌的8位ID,在token表 令牌的8位ID,在token表
lgn str 自定 令牌在登录表中的8位ID,用来尽快的登录令牌。 常量"NullNull",表示不存在 令牌的8位ID,在login表
tag str 自定 令牌标签,用在一些特定的场合来区分不同的令牌,大小写字符串,最多8个字符。比如,APP的主令牌,次令牌就用这个字段区分 由生成时控制台填写定义 复制自对应的app令牌字段
sap str 自定 令牌能够访问的服务应用 ,Service App的缩写 要登陆到哪个平台 复制自应用令牌的app字段
api str 自定 令牌的API白名单 有些token只能发给某些API 复制自应用令牌的api字段
bug str 自定 调试参数 B:返回调试debug信息 E:返回event信息 F:返回fault信息
zone str 自定 社区ID(8位M5D码) XdUaXduA/AlgoAlgo/DaTaDaTa 社区ID
corp str 自定 企业ID(8位M5D码) XdUaXduA/AlgoAlgo/DaTaDaTa 企业ID
shop str 自定 店铺ID(8位M5D码). XdUaXduA/AlgoAlgo/DaTaDaTa。要求登录的店铺,只能在这个店铺登录。它也就是早期AddLogin接口里的shop_id字段。 登录后的用户令牌,这个地方就是登录后的店铺的shop_id,和登录令牌差不多。但是因为AddLogon的操作,可以使得这个字段和登录接口的shop_id不同
role str 自定 登录成功以后我要的角色,注意,是我登录成功要的。不是现在的角色。因为现在是AnoNymuS,角色名是Anonymus。角色白名单,表示所有角色都可以。主要用于限制不同场合的登录。让这个令牌只能以普通会员的身份登录,尽管这个用户可能有多个角色。这个字段写在登录令牌里,一旦登录,产生的用户令牌会复制这个字段,从此只能用这几个身份进行工作。下述rule同理。这样的设计有问题吗?在注册令牌中,这个字段的意思,注册成功后,自动获取这个字段标记的角色,**注意,这个角色是zone直辖shop内的角色,否则查不到*类似于司机版,这种东西。 对于用户令牌,这个意思是我这个令牌仅有的权限。 复制自应用令牌同名字段
rule str 自定 权限白名单,登录之后我要行驶的权限,*表示所有权限,我登录之后想干什么就干什么,是在role的基础上的又一约束。null表示无值 null 复制自应用令牌同名字段

[!note] 发牌机构iss是常量xdua.com。 防重放串jti目前在应用令牌和用户令牌都是。应用令牌的role和rule字段是白名单,这个字段只对用户令牌有意义,在用户令牌的使用场景,访问控制会检查用户的角色和权限包不包含role和rule字段里的白名单。如果包含,就通过白名单检查。


[!note] 为什么要在令牌中设置null(全小写),而不是用空字符串,因为在网关解析的地方,不能填写空值。必须填写变量。


[!danger] 早期我们在令牌中设置了lgn字段,作为Login的缩写。后来我们取消掉了,原因如是,因为sub字段能表达token的登录用户是谁。用它也可以在login表查询当前登录状态。


JWT令牌还有其它的推荐字段,地球号目前不兼容,也不需要。

字段 类型 必须 说明 应用令牌 用户令牌
acr str 可选 Authentication Context Class Reference,表示一个认证上下文引用值,可以用来标识认证上下文类
amr str 可选 Authentication Methods References,表示一组认证方法
azp str 可选 Authorized party,结合aud使用。只有在被认证的一方和受众(aud)不一致时才使用此值,一般情况下很少使用

[!NOTE|style:flat|label:关于令牌role字段|iconVisibility:hidden] role字段是地球号登录灵活表达登录后效果的一种方式,它可以表达,尽管登录的人可能拥有好多角色,比方说root,god,shopa,但TA只想以某个角色子集进行登录,不想让暴露给客户端额外无意义的角色。例如,一个护理APP,用户登录时只想以护理或者院长的身份登录,并不像让护理APP或者TA还有本社区的超级管理员权限。此时就需要在role字段注明。

role举例 字段说明
* 以当前用户的最大权限集合登录,返回的roles是所有角色
None 仅仅以None角色登录,返回的是None角色列表就是["None"]。
*,None 如果有在role表达字串里,表达等效
None,god 以None和God角色登录
God 效果等同"God,None"。因为如果没有None,会自动补None

2. 令牌样例

eyJhbGciOiJSUzI1NiIsImtpZCI6ImI1MGIxZWZmZGMwMzVlMjg2OWI2YzQ1ZjMzYmRmNWQ3In0.eyJpYXQiOjE1ODQ5NzUwNDMsIm5iZiI6MTU4NDk3NTA0MywiaXNzIjoieGR1YS5jb20iLCJleHAiOjE5MDAzMzUwNDMsImF1ZCI6IkJyb3dTZGtUIiwic3ViIjoiQW5vTnltdVMiLCJqdGkiOiIxMjM0NTY3OCIsImlwbSI6IioiLCJkdm0iOiIqIiwic2FwIjoiU3ZLZXJuZUwiLCJhcGkiOiJBZGRMb2dpbiIsImNsciI6IlgiLCJvd24iOiJEdDVtdnJ0VSIsInRpZCI6InhzQUZGNmpHIiwiYnVnIjoiREUiLCJsZ24iOiJOdWxsTnVsbCIsInR5cCI6IkwiLCJ0YWciOiJQcmltYXJ5Iiwiem9uZSI6IlhkVWFYZHVBIiwiY29ycCI6IlhkVWFYZHVBIiwic2hvcCI6IlhkVWFYZHVBIiwicm9sZSI6IioiLCJydWxlIjoiKiJ9.b_KQVug-D83hsfzHVoOvyJZUjjnWhr1UiRCLOBcUSFCLfh3ZoP5GE7m98s6H3QsDpYs20hFkFecj0xiyxzQKy5DOq9XbroXffDmBgg5y45WYnW3P8iqB2WQBtBwEU3VAWk_Vx6UwnGmpb_juu7KsFK33rWswFx3odbw7xe2iMdReywc6bYHf0P7s7kNYqYF_n-odiO6UsZd7yeNos8Hn7XtzE2igD7DhTbB0oxqEzVHoMtFcVAdstsLi3aAcJOK2Gp-XhWHSuiGqd9kTPmghk5cmIDcN7KOOZ6y1GQevM2Qc_7tfebP3Ev-bAZEPAyUA77zRrQMrpwJouejR_sNd3g
{
    "iat":1584975043,
    "nbf":1584975043,
    "iss":"xdua.com",
    "exp":1900335043,
    "aud":"BrowSdkT",
    "sub":"AnoNymuS",
    "jti":"12345678",
    "ipm":"*",
    "dvm":"*",
    "sap":"SvKerneL",
    "api":"AddLogin",
    "clr":"X",
    "own":"Dt5mvrtU",
    "tid":"xsAFF6jG",
    "bug":"DE",
    "lgn":"NullNull",
    "typ":"L",
    "tag":"Primary",
    "zone":"XdUaXduA",
    "corp":"XdUaXduA",
    "shop":"XdUaXduA",
    "role":"*",
    "rule":"*"
}
字段 类型 必须
aud str BrowSdkT 这个令牌仅仅是给浏览器SDK测试客户端应用的
iss str xdua.com 地球号签发
iat str 1584359676 创建时间
nbf int 1584359676 有效起始时间
exp int 1584359676 10年有效期
sub str AnoNymuS 这个令牌只签发给匿名用户,用户ID是AnoNymuS
jti str 12345678 Nonce字串,无它用,就是填充常量12345678
typ str L Login,这是个登录令牌
clr str X 本令牌只能登录神社
ipm str * 任何IP都可以用这个令牌
dvm str * 任何设备都可以用这个令牌
own str Dt5mvrtU 这个令牌是Dt5mvrtU创建的,这个API的计费记在这个人头上
tid str 2cEzbCk2 本令牌在token表的id
lgn str NullNull 本令牌在login表的id,因为本令牌是登录令牌,所以lgn没有意义,这里填充NullNull
tag str Primary 无意义,随便填写
sap str SvKerneL 这个登录令牌只能登录地球号的SvKerneL服务
api str AddLogin 这个令牌只能访问SvKerneL服务的AddLogin接口
bug str DE 要求服务器端返回Debug字段和event字段
zone str XdUaXduA 本令牌仅仅能访问神社
corp str XdUaXduA 本令牌仅仅能访问神社
shop str XdUaXduA 本令牌仅仅能访问神社
role str * 本登录成功后,要以登陆这的最大角色集合工作
rule str * 本登录成功后,要以登录者的最大权限集合工作

results matching ""

    No results matching ""