Fido无密码认证示例部署运行

news2024/11/25 4:31:23

文章目录

  • 什么是FIDO
  • webauthn
  • 部署运行
  • 访问测试

本文对fido基本概念进行总结说明,并部署运行一个实际的例子,可以直观的体验fido无密码认证。晚上的例子方便后续实现相关功能。

什么是FIDO

常见认证方式的问题
目前流行认证方式普遍存在一些问题
用户名密码模式:密码太复杂不容易记忆,而且当系统、应用很多时为了省事儿往往多个系统/应用都采用相同的密码。因此存在撞库、暴力破解等隐患
动态密码模式:U盾 动态令牌,各个厂商不统一,每个应用都需要有一套,且Ukey需要后端的管理服务器人工维护用户和ukey。短信验证码依赖手机面临手机丢失、基站伪造等问题。
生物特征认证:只在手机端普及,PC使用较少。生物特征如果被采集到服务器端存在泄露的隐患。

FIDO的诞生
为了解决上述问题, 在线快速身份验证联盟于2012年成立,它的目标是创建一套开放、可扩展的标准协议,支持对Web应用的非密码安全认证,消除或减弱用户对密码的依赖。FIDO就是这样一种可扩展的标准协议,全称为Fast Identity Online。

FIDO共有两个版本,1.0和2.0
1.0 主要通过两个标准协议来实现安全登录(验证):分为两大类U2F和UAF

U2F类似于国内的二代U盾的保护机制,相当于双因素认证。使用双因子(密码和能与用户交互的设备)保护用户账户个隐私。当进行验证时,服务器在合适的时候,提示用户插入设备并进行按键操作,加密设备对数据签名,发送给服务器,服务器做验证,如果验证成功,用户则可登录成功。由于有了第二因子(加密设备)的保护,用户可以选择不设置密码或者使用一串简单易记的4位密码

UAF则是支持指纹,语音,虹膜,脸部识别等生物身份识别方式。无需用户密码介入,直接进行验证交易。用户在注册阶段,根据服务器支持的本地验证方式,选择一种验证方式,如指纹识别,人脸识别,语音识别等等,服务器也可以保留密码验证方式,将密码和生物相结合,增强账户安全性。

2.0是由 FIDO 联盟和 W3C 共同推出的 U2F(现称作 FIDO1)的后继标准,善了1.0中还未形成的U2F规范,制定了身份验证器和浏览器(用户端)的API。使用CTAP(身份验证器 API)和Webauthn(浏览器 API)实现U2F。 增加了单因素认证功能,也就是不再需要用户名密码,真正实现无密码登录。包含WebAuthn、 Client to Authenticator Protocol 2(CTAP2,客户端-认证器协议)、U2F 和 UAF 四个部分:
WebAuthn:是用于网站和访客设备交互的
Client to Authenticator Protocol 2(CTAP2,客户端-认证器协议)作为 WebAuthn 的补充,则是用于访客的设备和认证器交互的协议。

webauthn

webAuthn,即 Web Authentication,FDIO2协议的一部分。被认为是 Web 身份认证的未来。WebAuthn 最常见的应用就是用于网站登录时的 2FA(双重因素验证)或无密码登录。通过网页调用 WebAuthn,在不同平台下,我们可以实现通过 USB Key、指纹、面部甚至虹膜扫描来认证身份,同时确保安全和隐私。

使用 WebAuthn 分为两个部分,注册和验证。注册会将认证器的一些信息和用户建立关联;而验证则是验证这些信息以登确保是用户本人在登录。注册时认证器生成一对公私钥,然后将公钥交给服务器;验证阶段是服务器发送给认证器一段文本,要求认证器用自己的私钥加密后发回以验证。

注册流程:
在这里插入图片描述

浏览器向依赖方发送某个用户的注册请求
依赖方向浏览器发送挑战、依赖方信息和用户信息
浏览器向认证器发送挑战、依赖方信息、用户信息和客户端信息以请求创建公钥凭证
认证器请求用户动作,随后创建一对公私钥,并使用私钥签名挑战(即证明),和公钥一起交给浏览器
浏览器将签名后的挑战和公钥发送给依赖方
依赖方用公钥验证挑战是否与发送的一致,如果成功则将公钥与用户绑定,注册完成。

验证流程:
在这里插入图片描述
浏览器向依赖方发送某个用户的验证请求
依赖方向浏览器发送挑战
浏览器向认证器发送挑战、依赖方信息和客户端信息以请求获取公钥凭证
认证器请求用户动作,随后通过依赖方信息找到对应私钥,并使用私钥签名挑战(即断言),交给浏览器
浏览器将签名后的挑战发送给依赖方
依赖方用之前存储的公钥验证挑战是否与发送的一致,一致则验证成功

在整个过程中并没有隐私数据被传输——用户信息实际上只包含用户名和用户 ID

目前webauthn被大部分主流浏览器支持,但是部分浏览器或环境下可能存在限制,具体请查阅相关资料

部署运行

目前webauthn已经有很多开源实现,在网站https://webauthn.io/ 上提供了类库和示例,我们直接下载如下示例进行运行测试
在这里插入图片描述
代码下载
执行 git clone https://github.com/vertx-howtos/fido2-webauthn-howto.git 下载工程代码

创建证书

根据git上的提示我们先创建项目需要的证书,我们要部署的该服务器的服务器IP是 192.168.18.10,创建证书使用的密码为 123456

执行以下命令完成证书文件的创建

[root@localhost ~]# keytool \
>   -genkeypair \
>   -alias rsakey \
>   -keyalg rsa \
>   -storepass 123456 \
>   -keystore certstore.jks \
>   -storetype JKS \
>   -dname "CN=192.168.18.10.nip.io,O=Vert.x Development"
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore certstore.jks -destkeystore certstore.jks -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
[root@localhost ~]# keytool \
>   -importkeystore \
>   -srckeystore certstore.jks \
>   -destkeystore certstore.jks \
>   -deststoretype pkcs12
输入源密钥库口令:  
已成功导入别名 rsakey 的条目。
已完成导入命令: 1 个条目成功导入, 0 个条目失败或取消

Warning:
已将 "certstore.jks" 迁移到 Non JKS/JCEKS。将 JKS 密钥库作为 "certstore.jks.old" 进行了备份。
[root@localhost ~]# ll
总用量 12
-rw-------. 1 root root 1232 10月 29 04:13 anaconda-ks.cfg
drwxr-xr-x. 3 root root  106 10月 28 21:11 apps
-rw-r--r--. 1 root root 2487 4月  24 22:51 certstore.jks
-rw-r--r--. 1 root root 2148 4月  24 22:51 certstore.jks.old

编译代码
用编译工具打开项目代码,最好自己了解下 代码结构及源码的意义,这里我也是被里边的依赖困扰了一阵子。
执行maven构建,打包成功

可以点击下载我编译好的程序包
在这里插入图片描述
上传程序包

[root@localhost ~]# rz
rz waiting to receive.
Starting zmodem transfer.  Press Ctrl+C to cancel.
  100%    6383 KB 6383 KB/s 00:00:01       0 Errors
[root@localhost ~]# ll
总用量 6396
-rw-------. 1 root root    1232 10月 29 04:13 anaconda-ks.cfg
drwxr-xr-x. 3 root root     106 10月 28 21:11 apps
-rw-r--r--. 1 root root    2487 4月  24 22:51 certstore.jks
-rw-r--r--. 1 root root    2148 4月  24 22:51 certstore.jks.old
-rw-r--r--. 1 root root 6536315 4月  24 22:55 fido2-1.0.0-SNAPSHOT.jar

执行如下命令启动服务

[root@localhost ~]# java -jar fido2-1.0.0-SNAPSHOT.jar 
Server: https://192.168.18.10.nip.io:8443
四月 24, 2023 11:01:49 下午 io.vertx.core.impl.launcher.commands.VertxIsolatedDeployer
信息: Succeeded in deploying verticle

如上提示服务地址为: https://192.168.18.10.nip.io:8443

访问测试

打开浏览器 输入如上地址 https://192.168.18.10.nip.io:8443,可以看到demo简陋的页面
在这里插入图片描述
因为我们电脑没有ukey等工具,可以可以使用浏览器自带的 模拟工具,如果不开启这个工具 浏览器会让我们选择验证方式
在这里插入图片描述

完成注册和登录前我们访问 系统内容 提示没有权限
在这里插入图片描述
在这里插入图片描述
开启模拟工具 配置如下:
在这里插入图片描述

点击 Register直接提示注册成功。
在这里插入图片描述
这个时候在此访问 secret info 可以正常访问
在这里插入图片描述
使用手机连接到局域网访问这个地址可以直接使用手机的指纹认证来完成注册和登录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/461324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ajax ASP/PHP

文章目录 AJAX ASP/PHP 实例AJAX ASP/PHP 实例实例解析 showHint() 函数AJAX 服务器页面 ASP 和 PHPASP 文件PHP 文件 AJAX ASP/PHP 实例 AJAX 用于创造动态性更强的应用程序。 AJAX ASP/PHP 实例 下面的例子将为您演示当用户在输入框中键入字符时,网页如何与 web…

【打卡-Coggle竞赛学习2023年4月】图像检索与重复图像识别

#### 任务1:图像匹配与检索 图像相似度 图像相似度是用于度量两幅图像之间相似程度的指标。图像相似度可以基于像素级别的相似度或者基于特征匹配的相似度来计算。像素级别的相似度通常是基于两幅图像的像素值来计算的,包括均方误差、结构相似性指数&a…

被遗忘的Java关键字:transient

前言 今天在看项目代码时候,看到了下面这样一行代码,用transient修饰了一个变量,主要作用是做一个全局开关。说实话我是第一次看到这个关键字。激发了我的好奇心,所以就了解一下这是何方神圣。 /*** 全局开关*/public static tran…

Linux第三章

文章目录 前言一、Linux的root用户1.用户和用户组2.查看权限控制信息3.chmod命令4.chown命令 总结 前言 一、Linux的root用户 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。在Linux系统中,拥有最大权限的账户名为:root(…

QGIS数据可视化学习笔记03——地理解析(地址解析,地理编码......)和数据上图

一、地理解析 百度百科传送门:https://baike.baidu.com/item/%E5%9C%B0%E7%90%86%E7%BC%96%E7%A0%81/2890260 简单来说,就是名称对应QGIS中经纬度等坐标的转换,比如给出北京朝阳公园,你在QGIS中转换为对应的经纬度坐标&#xff0c…

企业网站注册攻略,告别烦恼!

业网站的注册过程可能对于一些初创企业来说比较繁琐,但它是推广企业品牌的重要途径之一。本文将为您介绍企业网站注册的攻略,帮助您更加高效地完成注册过程。 步骤: 1、确定网站类型:在开始注册之前,企业需要确定网站…

ASEMI代理ADI亚德诺ADG5412BRUZ-REEL7车规级芯片

编辑-Z ADG5412BRUZ-REEL7芯片参数: 型号:ADG5412BRUZ-REEL7 开态电阻:9.8Ω 电源断开漏电流:0.05 nA 输入高电压:2V 输入低电压:0.8V 输入电流:0.002μA 数字输入电容:2.5 …

Bean作用域与生命周期

日升时奋斗,日落时自省 目录 1、Bean的作用域问题 1.1、Lombok 1.2、修改Bean对象 2、作用域定义 2.1、Bean的6种作用域 2.1.1、singleton 2.1.2、prototype 2.1.3、request 2.1.4、session 2.1.5、appliction(了解) 2.1.6、webs…

I2C驱动框架介绍以及Linux下sht20驱动开发温湿度传感器获取温湿度

文章目录 一、I2C驱动框架(1)I2C驱动框架介绍(2)I2C总线驱动介绍【1】i2c_adapter结构体【2】i2c_algorithm结构体【3】I2C总线驱动工作介绍 (3)I2C设备驱动介绍【1】i2c_client结构体【2】i2c_driver结构体…

Docker容器---Harbor私有仓库部署与管理

Harbor私有仓库部署与管理 一、Harbor概述二、Harbor特性三、Harbor构成四、Harbor构建Docker私有仓库1、部署docker-compos2、下载或上传 Harbor 安装程序3、启动Harbor4、查看Harbor启动镜像5、浏览器访问创建一个新项目6、通过127.0.0.1来登录和推送镜像7、在客户端上传镜像…

【JavaScript】动态表格

🎊专栏【 前端易错合集】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 🍔介绍 就是在输入框中输入数字后,再按…

Linux安装mysql(5.7解压版)

Linux服务器安装软件时,建议安装解压版,将文件安装在自己指定的目录。安装版一般会将软件安装在Linux默认的目录,如/usr/local/,配置文件在/etc/,日志在/logs,安装目录比较分散,特别是不熟悉该软…

RabbitMQ --- SpringAMQP

一、简介 SpringAMQP是基于RabbitMQ封装的一套模板,并且还利用SpringBoot对其实现了自动装配,使用起来非常方便。 SpringAmqp的官方地址:Spring AMQP SpringAMQP提供了三个功能: 自动声明队列、交换机及其绑定关系 基于注解的监…

代码随想录算法训练营第四十二天|01背包问题,你该了解这些!、01背包问题,你该了解这些! 滚动数组 、416. 分割等和子集

文章目录 01背包问题,你该了解这些!01背包问题,你该了解这些! 滚动数组416. 分割等和子集 01背包问题,你该了解这些! 题目链接:代码随想录 二维数组解决0-1背包问题 解题思路: 1.dp…

tensorflow ---gpu的环境配置

1. CUDA配置: 先鼠标右键查看对应的CUDA的版本: 2.安装CUDA: 1.点击 CUDA去官网来下载安装包。 这里我选择的是我电脑支持的9.0的版本: 2.下载CUDA安装包: 3. 安装CUDA的过程: 自定义安装路径&#xff…

RabbitMQ --- 简介、快速入门

一、初识MQ 1.1、同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应 异步通讯:就像发邮件,不需要马上回复 两种方式各有优劣,打电话可以立即得到响应,但…

【论文精度(李沐老师)】Deep Residual Learning for Image Recognition

Deep Residual Learning for Image Recognition 残差连接主要干的一个事情是: 如果你新加的层不能让你的模型变好的时候,因为有残差连接的存在,可以使新加的那些层不会学到任何东西。 Abstract (提出问题)深的神经网…

STM32-HAL-定时器(无源蜂鸣器的驱动)

文章目录 一、蜂鸣器的介绍二、常用的无源蜂鸣器的电路三、测试准备四、初始化片上外设4.1 初始化定时器4的通道2为PWM输出模式4.2 编写驱动代码4.3 Logic分析仪查看波形4.4 代码分析 一、蜂鸣器的介绍 有源蜂鸣器: 有源蜂鸣器内部有一个发声电路,也就是“源”&…

程序员那些“越早知道越好的”道理

目录 程序员那些“越早知道越好的”道理1、学会阅读文档2、学会调试代码3、学会使用版本控制工具4、学会编写测试代码5、学会提问6、学会使用搜索引擎7、学会读懂源代码 程序员那些“越早知道越好的”道理 作为一名程序员,有很多话想对新手说,因为这些话…

ctr特征重要性建模:FiBiNetFiBiNet++模型

FiBiNET(Feature Importance and Bilinear feature Interaction NETwork)为推荐系统的CTR模型提出了一些创新方向: 引入一个SENet模块,可以动态学习特征的重要性;引入一个双线性模块(Bilinear-Interaction…