1. 令牌创建
1.1. 基本介绍
地球号的令牌按种类分为四种:A,D,L,U。分别代表算法令牌,数据令牌,登录令牌,用户令牌。令牌的颜色有四种:XRGBA
令牌种类 | 令牌颜色 | 令牌描述 |
---|---|---|
A | X | 算法令牌,颜色X,属于神级令牌。 |
D | X | 数据令牌,颜色X,属于神级令牌。 |
L | X | 登录令牌,颜色X,属于神级令牌,包含根登录令牌。 |
U | X/R/G/B | 用户令牌,颜色根据登录的店铺颜色决定。 |
根登录令牌
在服务器端用Jwt密钥生成的根登录令牌,它是conso.xdua.com的专用令牌,它也是令牌的唯一祖先。它的aud字段,也就是应用,是一个叫LoginApp
的应用。这个应用专门用于根登录令牌。
- 用脚本在服务器生成一个根令牌。
- 用根令牌登录console.xdua.com,创建社区,企业,店铺,社区对应的控制台应用。
- 开发者用户登录X级的店铺,获取颜色为R的用户令牌。
- 开发者用R色用户令牌,创建所在社区的某个应用的登录令牌。
- 开发者用这个登录令牌登录应用,干各种事情。
登录令牌
用户持有登录令牌,登陆后可以获取用户令牌,那登录令牌怎么获取呢?开发者自己创建某个应用后,就可以在这个应用下创建它的登录令牌。然后就可以用这个令牌初始化SDK,然后登录
如果要创建不拘泥于某个应用的登录令牌呢?
登录令牌,每个社区一个或多个,那登录令牌挂靠在哪个应用下?我们规定登录令牌挂靠在地球号系统一个叫“LoginApp”的应用下。这个时候的每个计费
令牌格式参考令牌格式
登录令牌如何获取?
用户登录自己的consoler.xxxxxxxx.xdua.com控制台,创建自己的APP,点击APP进入,就可以看到自己的社区登录令牌,这个登录令牌的shop字段是本社区ID(也就是本社区直辖店铺ID)。
用户登录自己的consoler.xxxxxxxx.xdua.com控制台,进入自己的企业,创建自己的APP,点击APP进入,就可以看到自己的企业登录令牌,这个登录令牌的shop字段是本企业ID(也就是本企业直辖店铺ID)。
用户登录自己的consoler.xxxxxxxx.xdua.com控制台,进入自己的店铺,创建自己的APP,点击APP进入,就可以看到自己的企业店铺令牌,这个登录令牌的shop字段是本店铺ID。这个令牌理论上只能用于登录本店铺。
比方说在智慧养老这个场景,每个养老院想要属于自己的APP,而且这个APP不能登录企业通用的APP,此时就需要这样的令牌。
算法令牌
当开发者想使用地球号算法令牌的时候,可以直接申请创建算法令牌(不需要创建应用),这里会由默认应用ID,是ALgoSApp
。
数据令牌
当开发者想使用地球号数据令牌的时候,可以直接申请创建数据令牌(不需要创建应用),这里会由默认应用ID,是DaTaSApp
。
开发者也可以创造基于某个应用数据令牌。
为什么支持基于DaTaSApp
的数据令牌?
因为有些情况下,平台仅仅是给开发者一个令牌,而不需要告诉开发者这个令牌基于某个应用。
用户令牌
在应用或者控制台登录,就可以获取登录令牌。
1.2. 如何创建?
开发者登录自己的社区控制台,颜色为X
的店铺,他们的域名都是console.xdua.com。在这里就可以获取各应用的登录令牌。所以顺序是
令牌创建可以根据tokenl,tokena,tokend创建具体某种令牌,也可以根据token创建无所不能的令牌。
1.2.1. 创建登录令牌
访问tokenl资源
字段 | 类型 |
---|---|
typ | 前端填写常量L/A/D |
aud | 开发者创建登录令牌时候所属的应用ID |
iss | 后台自动填充xdua.com 常量 |
iat | 后台自动填写创建时的UNIX时间戳 |
sub | 后台自动填写AnoNymuS 常量。三种令牌都是匿名的 |
exp | 后台自动填写,距离当前时间10年后 |
jti | 前端填写自定义字符串,理论上用来防重放,但对于登录令牌无意义,所以这个地方直接由前端自己定义 |
nbf | 后端填写,是个UNIX时间戳, |
clr | 后台自动填写X |
ipm | 前端填写,如果不填写,后台默认* |
dvm | 前端填写,如果不填写,后台默认* |
own | 后台自动填写,创建者的ID |
tid | 后台自动填写 |
lgn | 后台自动填写! 常量 |
tag | 后台自动填写Login/Data/Algo 常量 |
api | 后台自动填写AddLogin 常量 |
bug | 后台自动填写! 常量,表示不调试 |
zone | 后台自动填写XdUaXduA |
corp | 后台自动填写XdUaXduA |
shop | 后台自动填写XdUaXduA |
role | 后台自动填写AnoNymuS 常量 |
rule | 后台自动填写CreateLogin 常量 |
[!note|label=最终决定] 登录令牌,算法令牌,数据令牌必须是神社的匿名用户访问。这点记录压倒所有记录
1.3. 算法令牌
算法令牌是开发者自己创建的。
1.4. 店铺切换和令牌切换?
我们在控制台或者客户APP里,完成企业界面到店铺的切换,社区界面到企业的切换,这种切换会需要不同的权限。 我们以前是按照登录不同shop的方式进行的是切换,每次切换其实是完成了一次登录。这样的方式笨拙且不安全(每次都要发密码M5D)。 我们决定制造一个接口,addLogon,用来表示切换店铺,成功就是允许切换,返回切换后的令牌。如果不成功,就返回error>0。 这个功能模仿一次登录,产生一个新的令牌。 注意:
- 这是app内切换,所以aud字段不变
- 同一个用户的切换,sub不变
- 令牌typ不变,一直是U令牌
- 令牌的tid是个问题,复制还是改变?如果不复制,就需要在token表中新建一个token。结论:新建。
- 令牌的lgn是个问题,因为这不是传统意义上的登录,所以填写"NullNull"。
要变的是
- shop/corp/zone字段
- 令牌颜色clr要变
这个功能还有个附加功能,比如,如果旧的shop_id和新的shop_id一样,说明客户端仅仅是为了更新令牌。·
客户端用这个令牌干嘛?
客户端可以用这个新的用户令牌覆盖掉本地的用户令牌,逻辑上也就是完成了页面的切换。
eyJhbGciOiJSUzI1NiIsImtpZCI6ImI1MGIxZWZmZGMwMzVlMjg2OWI2YzQ1ZjMzYmRmNWQ3In0.eyJpYXQiOjE1ODc4OTgxMzEsIm5iZiI6MTU4Nzg5ODEzMSwiaXNzIjoieGR1YS5jb20iLCJleHAiOjE5MDMyNTgxMzEsImF1ZCI6IkR1bW15QXBQIiwic3ViIjoiQW5vTnltdVMiLCJqdGkiOiIxMjM0NTY3OCIsImlwbSI6IioiLCJkdm0iOiIqIiwic2FwIjoiU3ZLZXJuZUwiLCJhcGkiOiJHZXRPZGV2IiwiY2xyIjoiWCIsIm93biI6IkR0NW12cnRVIiwidGlkIjoiM25nM0lMU0oiLCJidWciOiIiLCJsZ24iOiJOdWxsTnVsbCIsInR5cCI6IkwiLCJ0YWciOiJQcmltYXJ5Iiwiem9uZSI6IlhkVWFYZHVBIiwiY29ycCI6IlhkVWFYZHVBIiwic2hvcCI6IlhkVWFYZHVBIiwicm9sZSI6IioiLCJydWxlIjoiKiJ9.S-jPzH1KZZAwvu-1Yczoutdd964gnRDSWUYMLv8uxbn5aqjIN0FFiC2EE_0LgslkKaJFOsNo5auxVWaW2qv_kICc2NXjOaZYQf1z_l-w4WtlKJUhUTwbqIGy45_RJjW2F4-dA_jaZOahpRIrT8dxN8Xe430N_bF-IAOWnlwpURpkyJdbJt75ZaS8i5sa_CzoLbWTTPvbdvapCW8D6e0senHUl7nDTWD-AUvCtP-MbIlhaH5aXBdugsd1iNiPxQXvL0_xh3nGIdjTQJ06i0C5cIrVlx6vU7YPkpoL-pzW770b5KcOhBrIqeDsz5uPtPkQEWAeMR_zepDUq3XzTD7MmAArray
(
[iat] => 1587898131
[nbf] => 1587898131
[iss] => xdua.com
[exp] => 1903258131
[aud] => DummyApP
[sub] => AnoNymuS
[jti] => 12345678
[ipm] => *
[dvm] => *
[sap] => SvKerneL
[api] => GetOdev
[clr] => X
[own] => Dt5mvrtU
[tid] => 3ng3ILSJ
[bug] =>
[lgn] => NullNull
[typ] => L
[tag] => Primary
[zone] => XdUaXduA
[corp] => XdUaXduA
[shop] => XdUaXduA
[role] => *
[rule] => *
)
{"iat":1587898131,"nbf":1587898131,"iss":"xdua.com","exp":1903258131,"aud":"DummyApP","sub":"AnoNymuS","jti":"12345678","ipm":"*","dvm":"*","sap":"SvKerneL","api":"GetOdev","clr":"X","own":"Dt5mvrtU","tid":"3ng3ILSJ","bug":"","lgn":"NullNull","typ":"L","tag":"Primary","zone":"XdUaXduA","corp":"XdUaXduA","shop":"XdUaXduA","role":"*","rule":"*"}
2. 下面是养老通控制台的登录token
eyJhbGciOiJSUzI1NiIsImtpZCI6ImI1MGIxZWZmZGMwMzVlMjg2OWI2YzQ1ZjMzYmRmNWQ3In0.eyJpYXQiOjE1ODgxNDUwNDcsIm5iZiI6MTU4ODE0NTA0NywiaXNzIjoieGR1YS5jb20iLCJleHAiOjE5MDM1MDUwNDcsImF1ZCI6IkNvbnNvbGVFIiwic3ViIjoiQW5vTnltdVMiLCJqdGkiOiIxMjM0NTY3OCIsImlwbSI6IioiLCJkdm0iOiIqIiwic2FwIjoiU3ZLZXJuZUwiLCJhcGkiOiJDcmVhdGVMb2dpbiIsImNsciI6IlIiLCJvd24iOiJEdDVtdnJ0VSIsInRpZCI6IndpR2tQTE05IiwiYnVnIjoiISIsImxnbiI6Ik51bGxOdWxsIiwidHlwIjoiTCIsInRhZyI6IlByaW1hcnkiLCJ6b25lIjoiRWxkckNhUkUiLCJjb3JwIjoiRWxkckNhUkUiLCJzaG9wIjoiRWxkckNhUkUiLCJyb2xlIjoiKiIsInJ1bGUiOiIqIn0.N-2ng_5mfWxYfSFt41-DYQpC2-VYCx4P9hma8B2YcgNOhTbgAwZiDLzKz343Y9_j0lUGFj3MYiMq59zsxU54AKIpRKuCcv1eFDPgjEPnLt1SFwlsy8u69Z-xx7jDmMQroHcvUjB211AOx54FghQK8WDRy41ROmkjhV0_kSAP9ALdgJgQV5GjpyAIxmcIsb_9WbZ154YZkUfMbGlkab2YTyWBzuj-qBcX6ZJTdKun2ahP62Jcwfyde_p8UHyl8RakuTK-sR55Vk_yP0t7Sw0JvZ5awzb1vWIkERprSdb_ku4T84N3gD01ObuopSc43DfnRxiPd48He7hcP5DG4NFAlgArray
(
[iat] => 1588145047
[nbf] => 1588145047
[iss] => xdua.com
[exp] => 1903505047
[aud] => ConsoleE
[sub] => AnoNymuS
[jti] => 12345678
[ipm] => *
[dvm] => *
[sap] => SvKerneL
[api] => CreateLogin
[clr] => R
[own] => Dt5mvrtU
[tid] => wiGkPLM9
[bug] => !
[lgn] => NullNull
[typ] => L
[tag] => Primary
[zone] => EldrCaRE
[corp] => EldrCaRE
[shop] => EldrCaRE
[role] => *
[rule] => *
)
{"iat":1588145047,"nbf":1588145047,"iss":"xdua.com","exp":1903505047,"aud":"ConsoleE","sub":"AnoNymuS","jti":"12345678","ipm":"*","dvm":"*","sap":"SvKerneL","api":"CreateLogin","clr":"R","own":"Dt5mvrtU","tid":"wiGkPLM9","bug":"!","lgn":"NullNull","typ":"L","tag":"Primary","zone":"EldrCaRE","corp":"EldrCaRE","shop":"EldrCaRE","role":"*","rule":"*"}
3. 下面是养老通后台的登录token
eyJhbGciOiJSUzI1NiIsImtpZCI6ImI1MGIxZWZmZGMwMzVlMjg2OWI2YzQ1ZjMzYmRmNWQ3In0.eyJpYXQiOjE2MDgzOTAxNDMsIm5iZiI6MTYwODM5MDE0MywiaXNzIjoieGR1YS5jb20iLCJleHAiOjE5MjM3NTAxNDMsImF1ZCI6IkFkbU1hbkh1Iiwic3ViIjoiQW5vTnltdVMiLCJqdGkiOiIxMjM0NTY3OCIsImlwbSI6IioiLCJkdm0iOiIqIiwic2FwIjoiU3ZLZXJuZUwiLCJhcGkiOiIqIiwiY2xyIjoiUiIsIm93biI6IkR0NW12cnRVIiwidGlkIjoidXBxSUNMRUgiLCJidWciOiJERSIsImxnbiI6Ik51bGxOdWxsIiwidHlwIjoiTCIsInRhZyI6IlByaW1hcnkiLCJ6b25lIjoiRWxkckNhUkUiLCJjb3JwIjoiRWxkckNhUkUiLCJzaG9wIjoiRWxkckNhUkUiLCJyb2xlIjoiKiIsInJ1bGUiOiIqIn0.pUiq1aH8qe8jKyfsZ7ZC70e8Qu1l2QOraYGDcnAmQH3BSq-B_N2Y7Ii8D4cS8W6fcT8fhTDGeZ9CdEHf_WYO6bUuOvX2lDdHFrkrFoVFpLl32pl0-oIuoSXIoIVmPefXcAXvuRI5vtwqGT1-HR1F5aWu69rf9S-9NIkJDNcQ0cd-dmEUDxKCWwXmoMr26AsHKbKlV2cL-7O3shnMoHuTvFHYHEPSjdtXyJOaqALAxStZ7kfkDLzi3V2HusYihQrWVZQ5RcERUPo9EarSFNaIE4wyEkDsU4PZAXjtPnCJNct-Y8lb52UIjH1pbQL_WdVSQdDWlT7_pR0fDaxItSpLMQArray
(
[iat] => 1608390143
[nbf] => 1608390143
[iss] => xdua.com
[exp] => 1923750143
[aud] => AdmManHu
[sub] => AnoNymuS
[jti] => 12345678
[ipm] => *
[dvm] => *
[sap] => SvKerneL
[api] => *
[clr] => R
[own] => Dt5mvrtU
[tid] => upqICLEH
[bug] => DE
[lgn] => NullNull
[typ] => L
[tag] => Primary
[zone] => EldrCaRE
[corp] => EldrCaRE
[shop] => EldrCaRE
[role] => *
[rule] => *
)
{"iat":1608390143,"nbf":1608390143,"iss":"xdua.com","exp":1923750143,"aud":"AdmManHu","sub":"AnoNymuS","jti":"12345678","ipm":"*","dvm":"*","sap":"SvKerneL","api":"*","clr":"R","own":"Dt5mvrtU","tid":"upqICLEH","bug":"DE","lgn":"NullNull","typ":"L","tag":"Primary","zone":"EldrCaRE","corp":"EldrCaRE","shop":"EldrCaRE","role":"*","rule":"*"}
4. ConsoleX控制台创建令牌。
场景,超级管理员在consoleX创建一个社区EldrCaRE后,要为养老通网站eldrcare.xdua.com(对应的APP ID是ConsoleE
)
创建一个电话登录的token
超级控制台如何做这件事:选择社区(shop_id),选择API(AddToginr),选择用户(uid),选择(APP)。
这个令牌规定了shop_id范围内发生的用户uid通过App发出AddToginr的权限。