躲不开创建身份验证?开发者福音,更安全、更低成本的方案( 三 )


同样的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学习与发展的干货
【躲不开创建身份验证?开发者福音,更安全、更低成本的方案】如转载 , 请后台留言 , 遵守转载规范


推荐阅读