首页/新闻资讯/正文详情

EOS nodeos login_plugin 详解:基于 ECDH 与应用权限校验的登录验证插件

发布时间:2026/9/23 20:28:59 来源:云帆数科 栏目:资讯中心
EOS nodeos login_plugin 详解:基于 ECDH 与应用权限校验的登录验证插件
区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载login_plugin是 EOSeosnodeos 的一个可选插件用于支撑应用程序与区块链进行认证这一场景它通过一组 HTTP API让应用可以验证某个账户是否被允许登录即其持有的密钥集合是否满足区块链上指定permission的授权要求。读完本文你将掌握该插件的启用方式、两个核心配置项--max-login-requests与--max-login-timeout的语义以及其背后基于临时密钥对ephemeral key、ECDH 共享秘密、sha256摘要与授权管理器校验的完整工作流程。插件概述与适用场景login_plugin的核心职责是支持应用程序使用 EOSIO 区块链进行认证。具体而言它提供的 API 允许一个应用程序验证某个账户是否被允许登录——即验证该账户是否能够提供一组签名以满足区块链上某个指定的permission权限级别的授权要求。在 nodeos 的插件体系中插件总览 将插件划分为核心必需与可选增强两类login_plugin属于可选插件为 DApp 或钱包类应用提供认证能力但对节点的基础运行并非必需。它不直接参与出块、同步或交易执行而是借助http_plugin暴露 REST 风格接口并借助chain_plugin查询链上的权限与密钥信息。从源码结构看该插件由三个文件组成插件声明与数据结构定义了插件类、请求/响应参数结构体及FC_REFLECT反射宏插件实现包含配置解析、HTTP 路由注册与两个核心登录流程构建配置声明库目标并链接chain_plugin、http_plugin与appbase。启用方式login_plugin是编译期插件与运行时插件相对它随 nodeos 一起构建通过 plugins/CMakeLists.txt 中的add_subdirectory(login_plugin)纳入构建并在 nodeos 主程序 中通过-Wl,${whole_archive_flag} login_plugin静态链接进 nodeos。因此只需在启动参数或配置文件中声明启用无需额外安装。方式一config.ini在config.ini中追加插件声明及可选项# config.ini plugin eosio::login_plugin [options]方式二命令行# command-line nodeos ... --plugin eosio::login_plugin [options]两种方式等价[options]即下文所述的配置项可在任一处指定。配置选项以下选项既可从 nodeos 命令行指定也可写入config.iniConfig Options for eosio::login_plugin: --max-login-requests arg (1000000) The maximum number of pending login requests --max-login-timeout arg (60) The maximum timeout for pending login requests (in seconds)配置项默认值类型含义--max-login-requests1000000uint32_t允许挂起的登录请求的最大数量--max-login-timeout60uint32_t挂起登录请求的最大超时时间秒源码中的解析与生效逻辑从 login_plugin.cpp 可以看到这两个选项的实际作用选项在set_program_options中注册默认值分别为1000000与60与文档一致在plugin_initialize中读取并存入内部实现对象login_plugin_implmax_login_requests用于约束挂起请求总量start_login_request中通过断言my-requests.size() my-max_login_requests限制并发登录请求数超出时抛出 Too many pending login requestsmax_login_timeout用于截断请求有效期请求的实际过期时间取min(请求方指定的 expiration_time, 当前时间 max_login_timeout)防止单次请求无限制挂起。login_plugin_impl内部使用boost::multi_index_container维护挂起请求同时提供按server_ephemeral_pub_key的唯一索引与按过期时间的非唯一索引并在每次请求到来时通过expire_requests()惰性清理已过期的条目。依赖项login_plugin依赖另外两个插件二者缺一不可chain_pluginhttp_plugin源码层面login_plugin.hpp 中的APPBASE_PLUGIN_REQUIRES((chain_plugin)(http_plugin))显式声明了依赖关系CMakeLists.txt 中的target_link_libraries( login_plugin chain_plugin http_plugin appbase )与之一致。同时finalize_login_request会通过app().get_pluginchain_plugin().chain()获取链控制器再经由get_authorization_manager()执行权限校验而 HTTP 路由则注册在http_plugin之上。依赖启用示例# config.ini plugin eosio::chain_plugin [options] plugin eosio::http_plugin [options]# command-line nodeos ... --plugin eosio::chain_plugin [options] \ --plugin eosio::http_plugin [options]提供的 HTTP API 与登录流程login_plugin在plugin_startup中向http_plugin注册了以下两个可用端点/v1/login/前缀HTTP 200/v1/login/start_login_request发起登录请求/v1/login/finalize_login_request完成登录请求并校验权限。值得一提的是源码中还有三个以do_not_use_为前缀的端点声明——do_not_use_gen_r1_key、do_not_use_sign、do_not_use_get_secret分别用于生成 R1 密钥对、对数据签名、计算共享秘密它们在当前版本中已被注释掉、未对外注册仅保留结构体与实现可推断其定位是不希望应用直接使用的不安全辅助接口。另外所有端点的请求体为空时会被视为{}异常统一交由http_plugin::handle_exception处理。1. start_login_request发起登录请求参数start_login_request_params字段类型说明expiration_timechain::time_point_sec请求方期望的过期时间处理逻辑见 login_plugin.cpp先清理已过期的旧请求断言请求方指定的过期时间必须晚于当前时间否则抛timeout_exception断言挂起请求数未达max_login_requests上限生成一次性 R1 临时私钥/公钥对private_key_type::generate_r1()服务端保留私钥将实际过期时间截断为min(请求方 expiration_time, now max_login_timeout)将请求存入容器并返回服务端临时公钥。响应结果start_login_request_results字段类型说明server_ephemeral_pub_keychain::public_key_type服务端临时公钥客户端后续步骤需要使用2. finalize_login_request完成登录与权限校验请求参数finalize_login_request_params字段类型说明server_ephemeral_pub_keychain::public_key_type上一步拿到的服务端临时公钥client_ephemeral_pub_keychain::public_key_type客户端临时公钥permissionchain::permission_level需要满足的链上权限账户 权限名如aliceactivedatastd::string应用自定义数据signaturesstd::vectorchain::signature_type客户端对摘要的签名列表处理逻辑见 login_plugin.cpp清理过期请求后按server_ephemeral_pub_key查找挂起请求若不存在已过期或从未发起返回错误server_ephemeral_pub_key expired or not found并移除该请求一次性使用使用服务端临时私钥与客户端临时公钥计算 ECDH 共享秘密generate_shared_secret依次以fc::raw打包permission、shared_secret、data对拼接结果计算sha256得到digest对每个签名调用chain::public_key_type{sig, digest}恢复出签名公钥得到recovered_keys集合通过chain.get_authorization_manager().check_authorization(actor, permission, recovered_keys, {}, fc::microseconds(0), noop_checktime, true)校验这些公钥是否满足指定permission的授权校验通过则permission_satisfied true否则置错误信息keys do not satisfy permission。响应结果finalize_login_request_results字段类型说明digestchain::sha256实际参与校验的摘要客户端应以此为准对data等材料签名recovered_keysflat_setchain::public_key_type从签名中恢复出的公钥集合permission_satisfiedbool恢复出的密钥是否满足指定权限errorstd::string出错时的错误信息如请求不存在、密钥不满足权限一个完整的认证交互示意结合上述两个端点一个典型登录流程可以描述为客户端调用start_login_request携带期望的expiration_time获得服务端临时公钥server_ephemeral_pub_key客户端生成自己的临时密钥对取client_ephemeral_pub_key客户端使用server_ephemeral_pub_key与自己的临时私钥计算同一份共享秘密并将(permission, shared_secret, data)打包求sha256得到摘要用账户权限对应的私钥对摘要签名客户端调用finalize_login_request提交server_ephemeral_pub_key、client_ephemeral_pub_key、permission、data与signatures服务端重算共享秘密与摘要从签名恢复公钥并调用链上授权管理器判定这些公钥是否满足该permission返回permission_satisfied供应用决策。由于共享秘密参与摘要计算该流程天然绑定了发起请求的双方可防止重放与中间人替换请求材料服务端临时私钥在请求完成后即被丢弃保证一次性语义。构建与使用注意事项该插件随 nodeos 默认构建启用只需在命令行或config.ini中声明plugin eosio::login_plugin并确保同时启用chain_plugin与http_pluginhttp_plugin还需配合http-server-address等网络配置方可对外提供服务详见 http_plugin 文档当前对外暴露的端点仅start_login_request与finalize_login_requestdo_not_use_*系列接口处于禁用状态不应依赖它们配置项均为非负整数修改后需重启 nodeos 生效本插件是认证/授权验证类辅助功能不影响节点核心链数据流程生产环境中应结合网络安全策略TLS、访问控制使用。赞分享区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载相关推荐gin-vue-admin安全机制详解JWT认证与Casbin权限控制gin vue admin安全机制详解JWT认证与Casbin权限控制 在Web应用开发中安全机制是保护用户数据和系统资源的核心。gin vue admin后端前端认证鉴权低代码任务调度Ursa.Avalonia身份验证用户登录和权限Ursa.Avalonia身份验证用户登录和权限 概述 在现代企业级应用程序开发中身份验证Authentication和权限控制AuthorizatiUI组件桌面应用跨平台ChartDB身份验证用户登录与权限控制ChartDB身份验证用户登录与权限控制 概述 ChartDB作为一款开源的数据库图表编辑器其身份验证机制设计注重用户体验与数据安全。本文将深入解析Char数据库前端数据可视化AI 应用上一篇零代码部署ConvertX用K8s轻松管理多实例文件转换服务下一篇COLMAP十年技术演进从CVPR 2016到ECCV 2022的三维重建革命创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

职业体验感悟手写实现
职业体验感悟手写实现

5个性能坑:版本升级后API全变了,手写实现才是正解 版本升级后 API 全变了,你的代码还在跑旧接口吗?别慌,今天聊聊手写实现怎么救场。作为劳务班组负责人,我见过太多项目因为依赖库更新而崩盘,证书年审卡在半路,继续教育学时没凑齐,代码却先… · 2026/9/23 20:28:52

2026最新国士无双面选型:解决代码跑不通的5大方案
2026最新国士无双面选型:解决代码跑不通的5大方案

2026最新国士无双面选型:解决代码跑不通的5大方案 复制来的代码跑不通不知道怎么调,这是很多开发者在接触新框架时最崩溃的时刻。尤其是面对像“国士无双面”这样在特定圈子里流行、但官方文档又相对简略的技术栈时,你很容易陷入“环境配好了、依赖装… · 2026/9/23 20:28:52

抖音一个嘉年华多少人民币背后的性能优化高频面试题实战
抖音一个嘉年华多少人民币背后的性能优化高频面试题实战

抖音一个嘉年华多少人民币背后的性能优化高频面试题实战 官方文档动辄几十页,翻到第三页脑子就懵了?别慌,今天咱们不整虚的。很多后端开发在面试时被问到“抖音一个嘉年华多少人民币”这种看似扯淡的问题,其实是在考你高并发下的状态管理与数据一致性。这… · 2026/9/23 20:28:52

CKA 1.29 实操认证核心:kubeadm集群搭建与四大高频故障排查
CKA 1.29 实操认证核心:kubeadm集群搭建与四大高频故障排查

简介:本资源是专为Kubernetes CKA认证(1.29版本)考生打造的高仿真题库与实战备考指南,面向已掌握K8s基础、正冲刺考试的运维工程师、开发与云原生架构师。内容覆盖RBAC权限控制、Deployment扩缩容、NetworkPolicy策略配置、Servic… · 2026/9/23 21:43:49

RSS指纹定位实战:KNN室内定位MATLAB代码解析与调优
RSS指纹定位实战:KNN室内定位MATLAB代码解析与调优

简介:这份资源面向室内定位方向的学生、研究人员与工程实践者,聚焦GPS信号难以覆盖的室内场景,提供基于RSS位置指纹与KNN近邻算法的MATLAB实现方案。内容围绕信号强度指纹库构建、距离度量与近邻分类展开,可用于理解Wi-Fi、蓝牙等… · 2026/9/23 21:43:49

fp-ts Traversable 模块全解析:traverse / sequence 的 Applicative 遍历与组合实战
fp-ts Traversable 模块全解析:traverse / sequence 的 Applicative 遍历与组合实战

fp-ts Traversable 模块全解析:traverse / sequence 的 Applicative 遍历与组合实战 【免费下载链接】fp-ts Functional programming in TypeScript 项目地址: https://gitcode.com/gh_mirrors/fp/fp-ts 导读:Traversable 是 fp-ts 中描述"可… · 2026/9/23 21:43:43

SolarWinds NPM 12.0.1 部署调优与维护实战指南
SolarWinds NPM 12.0.1 部署调优与维护实战指南

简介:面向网络运维与IT管理人员的SolarWinds网络性能监视器(NPM)12.0.1及Orion Package 12.1资源包,用于解决大规模网络设备状态监测、性能分析与故障预警,可覆盖10至10000个节点的监控规模。资源为docx格式文档&#… · 2026/9/23 21:43:43

网络工程师PDF实战指南:从命令到故障响应的知识图谱
网络工程师PDF实战指南:从命令到故障响应的知识图谱

简介:本资源是面向软考中级网络工程师考生的权威备考资料,聚焦计算机技术与软件专业资格考试核心内容,尤其适用于系统复习网络系统设计、管理与维护等关键能力。资源为单个72.62MB高清PDF文件,内容完整覆盖2006—2009年历年真题及… · 2026/9/23 21:43:43

单通道脑电睡眠分期Python工程实战:从数据预处理到Flask网页端部署
单通道脑电睡眠分期Python工程实战:从数据预处理到Flask网页端部署

简介:这份资源面向计算机、人工智能、通信工程、自动化、电子信息等专业的在校学生与教师,以及希望入门生理信号处理的企业员工,提供一套基于单通道脑电信号实现自动睡眠分期的完整Python项目。项目围绕EEG信号预处理、数据集构建、深度网络建… · 2026/9/23 21:43:36

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码