关于认证登录的浅薄经验

本文详细介绍了第三方登录流程,涉及到微信授权、JWT令牌的生成与验证。讲解了JWT的Header、Payload和Signature三部分,并展示了生成JWT的示例。同时提到了OAuth的授权模式,如授权码模式,以及数据库中oauth_client_details表的作用。还讨论了多端登录方案,如何根据登录来源分配不同的登录认证服务。

第三方登录流程:
在这里插入图片描述
授权页面:微信返回登录扫描二维码
用户授权:扫码(直接跳过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。
也就是不同的登陆来源,分发到不同的登录认证上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值