第三方登录流程:

授权页面:微信返回登录扫描二维码
用户授权:扫码(直接跳过4399直接告诉微信可以授权)
令牌:jwt令牌 JSON Web Token(JWT)

★★jwt:
1.Header
头部包括令牌的类型(即JWT)及使用的哈希算法(如HMAC SHA256或RSA)
2.Payload
第二部分是负载,内容也是一个json对象,它是存放有效信息的地方,它可以存放jwt提供的现成字段,比 如:iss(签发者),exp(过期时间戳), sub(面向的用户)等,也可自定义字段。
Signature
3.签名,此部分用于防止jwt内容被篡改。
这个部分使用base64url将前两部分进行编码,编码后使用点(.)连接组成字符串,最后使用header中声明 签名算法进行签名。
例:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
base64UrlEncode(header):jwt令牌的第一部分。
base64UrlEncode(payload):jwt令牌的第二部分。
secret:签名所使用的密钥。
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzY29wZSI6WyJhcHAiXSwiZXhwIjoxNjMwNTM2NDA3LCJqdGkiOiJhNDU1ZDhiMC1jNmMxLTQ1YzAtOTYwOC04MTFmM2IwZDkzY2IiLCJjbGllbnRfaWQiOiJjaGFuZ2dvdSJ9.cuYqlnvq8rSxj_czeb1NzeCL93Zk0Hq36fBpSBxPKe8DL3Gm5MVxz94XiOPf1P4Ng-FFTCzupSu6RevPDnaHUNkzJO0Hq1EaPToWsE4RdAfqF1my2FUXIQDJpXSbJz2GarpQdYYMKTcSaLdx-ov8dNBcEuGigyqWx4KKFTNhd43xC5bVhu5pGymJ2VS97p4K0Tpy4qdirjW4ZZNvvfsqh5vBnxxLIrv9dcsBKvlf2PpA5lMmeHb0i1JYuI925k2jliHBqvYwkSzVQYWw5WfAbvjWot2njobmFg2L5t0nFtJAfYZ5-sS-nPbiooNg1llSC-EH2xJEj7K8IsAG6WRBgQ",
"token_type": "bearer",
"refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzY29wZSI6WyJhcHAiXSwiYXRpIjoiYTQ1NWQ4YjAtYzZjMS00NWMwLTk2MDgtODExZjNiMGQ5M2NiIiwiZXhwIjoxNjMwNTMxOTI1LCJqdGkiOiI2MDI5Yjc4MS1iNGM1LTQzMGMtYmI2Ni0xOWIyNzg3ZjMyYTMiLCJjbGllbnRfaWQiOiJjaGFuZ2dvdSJ9.tTYhyC0g37I7eXdP_gqTsCnNi_3vTXH_IC_VgKwW7nRZIN-Lk_RbS5cgz_EPNnJXGEwRKcHL-zYKUEjDmvFqrawRBybHo4Yk7M8W2pjoIgvEvQtdwpTRQ-b0mfQTGtQwLhpkpaOlEWsEq4uUU_qlGcuA81hO0_fkrPbp36U3G-UJiQJ_T9OryoociEl1mz2q5pAwzIDfl7Gq_RJCWWNWlY4kAy3q53rlaOhr0C3ioTRweLMOfRb_e06eD3pDPwU7xvcNzFqz4Vk6TWtu-EVXw_VXJJX8j8f-zYFosybbyWC0J1F3XzyRz4HMgy5NwwLBn9-pa5oRMl5ObxuAk9pK3A",
"expires_in": 43199,
"scope": "app",
"jti": "a455d8b0-c6c1-45c0-9608-811f3b0d93cb"
}
生成私钥公钥
JWT令牌生成采用非对称加密算法
1、生成密钥证书 下边命令生成密钥证书,采用RSA 算法每个证书包含公钥和私钥
keytool -genkeypair -alias password -keyalg RSA -keypass password -keystore changgou.jks -storepass password
Keytool 是一个java提供的证书管理工具
-alias:密钥的别名
-keyalg:使用的hash算法
-keypass:密钥的访问密码
-keystore:密钥库文件名,changgou.jks保存了生成的证书
-storepass:密钥库的访问密码
查询证书信息:
keytool -list -keystore password.jks
Oauth:
数据库:
oauth_client_details :不同客户端(ios、安卓、电脑等)
授权模式:
1.授权码模式(Authorization Code,如微信登录)
2.密码模式(Resource Owner Password Credentials 网站用户名密码)
★★认证流程图

1.用户发登录请求,通过网关,路由到user-auth,申请令牌;
2.申请完后,把jti:jwt放入redis
3.cookie放jti
4.user微服务写接口,通过oauth2远程调用拿到真实的用户、密码
5.用户网关上判断请求是否是登录请求,是的话放行;不是则校验cookie的jti和redis对应的jwt,有的话,请求带上bearer空格+jwt去访问微服务(所有微服务都被改造成oauth2)。
多端登录方案(app/网页)
再多起另一类auth微服务,去yml配置中修改clientId和clientSecret。
也就是不同的登陆来源,分发到不同的登录认证上。
本文详细介绍了第三方登录流程,涉及到微信授权、JWT令牌的生成与验证。讲解了JWT的Header、Payload和Signature三部分,并展示了生成JWT的示例。同时提到了OAuth的授权模式,如授权码模式,以及数据库中oauth_client_details表的作用。还讨论了多端登录方案,如何根据登录来源分配不同的登录认证服务。
662

被折叠的 条评论
为什么被折叠?



