躲不开创建身份验证?开发者福音,更安全、更低成本的方案( 三 )
同样的JWT令牌还包括关于用户的声明 。 这取决于服务 , 但通常包括用户名、电子邮件地址和/或其ID 。
应用程序可以利用这些声明来识别用户 , 并可以使用相同的用户ID来引用存储于应用程序内的数据 。 JWT令牌是加密签名的 , 因此在验证令牌的签名时 , 可以保证没有人篡改声明 。
在静态web应用或本机应用中使用OpenID Connect
静态web应用程序(也称为JAMstack应用程序)和本地应用程序(例如桌面或移动应用程序)能以稍不同的方式使用OpenID Connect 。 在OAuth 2.0规范中 , 这被称为隐式流 。
隐式流不需要使用Client Secret:因为应用程序在客户端上运行 , 所以没有安全的方式进行分发 。
1. 应用程序将用户重定向到身份验证终点 , 确保查询字符串包含scope=id_token 。
2. 用户利用身份提供程序完成身份验证流 。
3. 用户被重定向到应用程序 , JWT会话令牌作为一个片段附加到页面的URL(该片段是#符号后面的内容) 。 它在 id_token字段中 。
4. 应用程序从URL片段获取JWT , 进行验证 。 如果有效 , 那么用户通过身份验证 , 并且可以使用JWT中的声明来获取有关用户信息 。
要在静态web应用程序中验证JWT , 可以使用idtoken-verifier程序模块 。 桌面和移动应用程序可以使用类似的库来开发它们 。
本文插图
图源:unsplash
在客户机服务器应用程序中使用OpenID Connect
这些指令在很大程度上取决于用于构建应用程序的语言或框架 。 jwt.io website有一个完整的库列表来验证JWT令牌 。 对于某些栈 , 还可以利用更高级别的解决方案 , 如针对Node.js/Express的express-jwt或passport 。
在构建客户端应用程序时 , 重要的是 , 一定要确保使用RSA-SHA256 (在JWT 的情况下, alg 必须是 RS256)来对令牌进行签名 , 因为这是非对称的:令牌使用身份提供程序中的密钥进行签名 , 但是应用程序可以使用公钥对其进行验证 。
另一种常见的算法HMAC-SHA256(或HS256)使用对称密钥对令牌进行签名和验证 , 但是令牌无法安全地分发至客户端应用程序 。
本文插图
图源:unsplash
然后 , 客户端应用程序可以在向后端API服务器发出的每个请求中使用此JWT , 这通常在Authorization中或者在cookie中传递 。 本例中 , JWT的行为与任何其他会话令牌一样 , 但具有独立声明 。
API服务器将检查JWT的存在并再次验证它;如果验证成功(且令牌尚未过期) , 可以将用户视为已验证 , 并从JWT内部声明中读取其用户ID 。
这种简洁高效安全的身份验证方案 , 你get了吗?
本文插图
留言点赞关注
我们一起分享AI学习与发展的干货
【躲不开创建身份验证?开发者福音,更安全、更低成本的方案】如转载 , 请后台留言 , 遵守转载规范
推荐阅读
- 三易生活|即使在新款手机中,我们可能也避不开这些烦恼
- 电子商务实战专家|华为再强,还离不开世界工厂,自嗨不是最好的选择?
- 钛媒体APP|打破开放与隐私壁垒,7国30家机构创建最大医学AI协作系统
- 云掌财经|韵达联姻德邦,仍躲不开巨头围困的命运
- 科技小数据|都2020年了,为什么苹果手机还不开放NFC功能?
- PingWest品玩|EVA 最终章的前序,是 OPPO Ace2 新的身份
- cnBeta|研究人员创建了首张心脏神经元的3D地图
- ##手机怎么扫描电子身份证?原来方法这么简单,3分钟教你学会它
- 『』盘点一下华为手机,用了就离不开的高阶技巧
- ##10个月不开机的iPhoneXR,拿去售后却没换机,仅更换了5个零件
