fulusso基于netcore的开源单点登录认证授权系统
应用背景
公司重组,业务有很大变化,原来的老系统加上现有系统,各系统之间互不相通,给客户做演示的时候需要单独打开登录,亟需优化。综合考虑,一套统一的授权登录系统无疑是最合适的。顺着这个思路去网上找了一些解决方案,经过验证,确定了葫芦藤团队的fulusso项目。
下面介绍一下项目的编译运行和如何简单接入其它应用。技术栈
后端框架:.NET Core3.1
前端框架:React
数据库:mysql(可根据实际情况,自由切换)
中间件:redis 详细功能
认证授权服务
基于IdentityServer4实现的协议,支持网站、本地应用、移动端、web服务等应用的认证授权逻辑。
单点登录登出
支持各种类型应用上的单点登录登出。开箱即用的基础用户管理模块,包括:注册、登录、手机验证码、忘记密码等。为了安全考虑,集成了腾讯图形验证码。
第三方登录
完善的第三方登录支持。支持首次登录时绑定已存在的用户或注册新用户后,自动绑定。 快速使用
1.下载代码到本地
使用git或直接下载zip包到本地,进行解压。git clone https://github.com/fuluteam/fulusso.git
目录结构如下图所示。
其中,backend存放的是后端代码,frontend存放的是前端代码。 进入frontend/src目录, 使用vs2019(或其它版本)打开解决方案。
2.初始化数据库
首先在Fulu.Passport.Web中找到appsettings.Development.json文件。编辑数据库连接字符串。
appsettings.Development.json "ConnectionStrings": { "MySql": "server=127.0.0.1;Port=3306;Database=fulusso1;Uid=root;Pwd=123456" }
打开程序包管理器,切换默认项目为:Fulu.Passport.Web, 如下图所示:
然后在程序包管理器中执行如下命令: Add-Migration Init
以上命令执行成功后,继续执行下面命令初始化数据库update-database
执行完以上操作后,如没有报错,则会创建数据库,并会在Client表中创建一条测试数据,如下图所示:
3.运行程序
编译运行项目:Fulu.Passport.Web4.启动前端
切换目录到frontend,在命令行中执行如下命令安装依赖: npm install
启动服务npm run demo
服务启动成功后,通过 http://localhost:8080进行访问。界面如下所示:
新客户端快速接入认证服务
认证授权服务存在的意义就是提供统一的认证授权入口,有了这个服务后,每个新的客户端应用无需单独开发认证授权模块。下面就来一起看下如何快速将新应用接入到认证授权服务。( 此处以 ASP.NET Core作为示例 )。
示例代码在sample文件夹中,如下图所示:
在正式接入之前,必须先申请应用 。通过在数据库中client表添加示例应用信息(可做成管理界面),如下图所示:
示例sqlINSERT INTO `fulusso`.`client`(`client_secret`, `full_name`, `host_url`, `redirect_uri`, `description`, `enabled`, `id`) VALUES ("14p9ao1gxu4q3sp8ogk8bq4gkct59t9w", "葫芦藤2", "http://localhost:5003/", "http://localhost:5003", NULL, 1, UUID());
其中,redirect_uri参数指的是从认证服务获取code之后,重定向的url。为了开发的方便,我们的认证服务中仅校验回调域名的域名,不会校验完整的地址。比如,你的redirect_uri为 http://www.xxx.com/abc/aaa,则数据库中的redirect_uri字段填写http://www.xxx.com即可。
应用信息导入到数据库后,在Startup类的ConfigureServices方法中,添加如下代码: services.AddServiceAuthorize(o => { o.AllowClientToken = true; o.AllowUserToken = true; o.OnClientValidate = false; o.Authority = "http://localhost:5000"; o.ValidateAudience = false; o.ClientId = Configuration["AppSettings:ClientId"]; o.ClientSecret = Configuration["AppSettings:ClientSecret"]; });
注:需添加Fulu.Service.Authorize项目引用,如下图所示:
然后在Configure方法中,添加如下代码: app.UseRouting(); app.UseJwtAuthorize(); app.UseAuthorization();
其中,UseJwtAuthorize是自定义的中间件,是为了实现OAuth2.0的授权码的逻辑。 具体实现请在代码仓库中查看。
至此,这个新应用就成功接入到认证服务了。
当未登录的时候,访问此应用的页面会自动跳转到认证服务的login界面。登录之后,会重定向回登录之前的页面。如下图所示:
至此完成了项目的编译运行和其它应用快速接入的说明。
开源协议:暂时未找到
PC鲜辣报RTX4070下月发锐龙7040HS笔记本延期上市上周,英伟达下代显卡RTX4070发布时间确定,RTX4060Ti公版外观流出AMD官宣锐龙7040HS笔记本延期上市,多款新品跑分流出惠普发布星系列新品Canalys认为2023
高质量开新局惠阳抢抓机遇全力打造智造高地仲春时节,万物复苏。走进惠州市惠阳区,一派生机勃勃景象,生产建设项目施工的机械轰鸣与万物生长之声一起,为这片土地奏响发展的和鸣。今年的春来得很早,大项目早早动工企业早早开工招商早早
平顶山富豪刘光身家数亿,却从新三板退市,质押股权5079万股01hr刘光,1959年7月出生在河南省平顶山市汝州县。1977年10月,18岁的青春年纪,光荣入伍,在部队熔炉里锻炼两年。1979年,刘光从部队退伍后,进入汝州市汝州镇煤炭中转站
依依惜别夜色阑珊的亚星桥潍坊日报社潍坊融媒讯2月28日,记者在亚星桥上看到,亚星桥桥体灯光相互辉映不断变幻,色彩斑斓的灯光在黑夜当中格外绚烂夺目,加上两岸霓虹璀璨的建筑群落,将这里的夜景打造得浪漫时尚。从
未保价快递丢失,损失该谁来赔?法院判了!快递给我们的生活带来了许多便利,但因快递公司及其工作人员服务水平和质量参差不齐,快递损毁丢失等现象时有发生。由此导致的损失该由谁来承担呢?近日,株洲市天元区人民法院审理了这样一起快
神界被破,我被他亲手投入轮回,转生台上他捏着我的残魄笑得痴狂神女怜悯众生,为何不能怜悯我。他说这话时,眼眸里带着几分破碎的恨意。彼时我还是没有六欲七情的神女,看不懂他眼底的情与怨,只是念叨着平日常说的那句众生皆平等。后来神界被破,我被他亲手
陕西秦岭薄雪未消金色晨光缀崖间图为阳光照射在秦岭山间。太平国家森林公园供图图为壮观的秦岭。太平国家森林公园供图图为秦岭山间。太平国家森林公园供图图为秦岭美景。太平国家森林公园供图图为壮观的秦岭。太平国家森林公园
大桥村春日正好,只为花忙百花齐放的三月,东沟镇大桥村湖畔,水碧花红,一树树花下,络绎不绝的游人只为花忙。大桥村旧称小赛咀,位于保安湖畔西侧,临湖环港,是个世外小桃源。2021年春,一组大桥梅花坞的美照刷屏
黄山归来不看岳游黄山住准4星级酒店6天5晚包含三餐有一种鬼斧神工,叫黄山归来不看岳有一种缥缈仙幽,叫九华一千寺,撒在云雾中有一种恬静清雅,叫桃花源里人家有一种泼墨写意叫中国画里的乡村提到黄山大多数人便会想到那座身负盛名的奇峰但其实
带上莫岛果酒开启春日第一场露营!趁阳光不燥,春风拂面,出发来一场露营吧,风筝草地油菜花,还有那一眼望不到头的明媚春色,带上美食和美酒,在山川江河边相聚,将一周的忧愁烦恼通通忘掉,只享受这春日限定的美好。在这个需要
龙乡养眼养肺养胃养身春日三月如约而至新的月份,新的光景,新的开始中国龙文化之乡泸县换上一身碧绿青衣带着万物复苏的气息等待游人前来揭晓龙乡的美好和魅力初春旅游选择泸县不需要理由这里有绿色旷野的道林沟也有