ABP vNext微服务架构详细教程——身份管理服务

1

框架搭建

c6c27aff2a549da4f3e5559ddd4bdefe.png

ABP vNext创建包含app和module两种模板,其中app方式所创建的模板包含用户、角色、权限管理,ABP基础配置IdentityServer的基础配置数据等功能。module模式是一个比较干净的服务,里面不包含默认业务功能。

051ba9b750c356a31e24c72f7b1b766f.gif

ABP vNext创建包含app和module两种模板,其中app方式所创建的模板包含用户、角色、权限管理,ABP基础配置IdentityServer的基础配置数据等功能。module模式是一个比较干净的服务,里面不包含默认业务功能。

637a676992f8acb09b937dd160638320.gif

这里我们构建身份管理服务,需要用到ABP vNext框架自带的用户角色管理模块,所以采用app模式构建项目源码。项目名称为Demo.IdentityManager,构建命令如下:

abp new Demo.Identity -t app --ui none --separate-identity-server -dbms MySQL

329d04f3db060db48ff071030b2b36cd.png

这里 

 -t app 表示application模式 ,

--ui none 表示不使用UI界面, 

--separate-identity-server 表示将身份认证服务IdentityServer和当前项目服务分开, 

-dbms MySQL 表示使用MySQL数据库。

8ee0f6baec67a55b277d14c945fa68e0.gif

执行命令后,执行目录中会出现aspnet-core文件夹,将该文件夹中所有内容拷贝至项目解决方案的service/identitymanager目录下,将其中的IdentityServer项目移动至identityserver文件夹下,若直接添加IdentityServer项目到解决方案会报错找不到common.props,这是因为相对路径发生变化,可将identitymanager目录下的common.props文件复制一份到总解决方案sln所在目录

6a93ba8e1cfbf4116d31243d6ce37644.gif

目录调整完成后,使用sln构建工具添加所有项目到总解决方案。添加后项目结构如下图:

04abe222172c19b4b0f12693dd7a70dd.png

ff565ca1fd72fe04ac3adee370892135.png

因为IdentityServer项目相对路径发生变化,需删除并重新添加该项目对EntityFrameworkCore项目的引用。

如果不想使用ABP自带的单元测试可以将解决方案文件夹test及其下项目删除。

2

初始化数据库

59294938b51111960dc6325b0b1b6a80.gif

在ABP vNext框架application模式代码创建的数据库中,会包含用户、角色、权限、配置等功能的表,以及IdentityServer框架各项数据库持久化数据的表。

ac6f2c732c072e644fe3883b139f979d.gif

application模式下所创建的项目中的DbMigrator项目包含创建、执行数据迁移并初始化数据的功能。

72a21ffccdd3dde5fef6a255ec5d3ece.gif

正常情况下我们修改DbMigrator项目的配置文件appsettings.json中的ConnectionStrings:Default字段改为我们所使用的数据库并执行该项目,即可创建所需要的数据库

但我当前所用版本6.0.1有一个小Bug,运行DbMigrator项目会卡在创建数据迁移这一步,需要我们修改数据库链接字符串后手动创建数据迁移并执行,使用dotnet-ef命令执行如下:

  1. 在EntityFramework项目目录下进入cmd命令行

  2. 确保dotnet-ef命令已安装并更新至最新版本,具体可参考:https://docs.microsoft.com/zh-cn/ef/core/get-started/overview/install

  3. 添加数据迁移

    dotnet-ef migrations add InitDb
  4. 执行数据迁移

    dotnet-ef database update -s ..\Demo.Identity.DbMigrator

执行完成后,数据库已创建成功,运行DbMigrator项目可完成数据初始化。

3

调整及测试

0ac7a3f08ebf81f630d372faf96bb158.gif

身份管理服务运行项目为Identity.HttpApi.Host,将此项目设置为启动项。

845654c5a8b28853bb143401cbcc7631.gif

修改Identity.HttpApi.Host项目中的配置文件appsettings.json,修改数据库链接字符串:ConnectionStrings:Default,及Redis地址Redis:Configuration,按照服务规划我们给该服务设置的规划的端口号为5000,所以在appsettings.json中添加配置项: 

"urls": "http://*:5000"

5ecc0f98fb20f185256735bbb63ac659.gif

默认情况下,ABP vNext框架自带的用户角色权限等接口需要授权用户才可以访问,依据我们之前的设计,微服务中的各项服务不需要二次权限验证,这里我们全局忽略权限验证,否则调用时会报401错误。忽略方法为在IdentityHttpApiHostModule的ConfigureServices方法中添加以下内容:

context.Services.AddAlwaysAllowAuthorization();

f53452672fc297ed9950a7e42ef43601.gif

以控制台方式启动项目Identity.HttpApi.Host项目,启动完成后通过浏览器访问http://localhost:5000/swagger/index.html,成功显示Swagger页面,测试/api/identity/users的Get方式接口,返回admin用户信息,说明服务配置成功。

b7ccb82ba90cd14d6452297844cb39e0.png

end

26a90ed6c52877e749b4e4134ed7367e.png

45e6d1c994947a3fd4535dfdfffbb18b.png

36868705cfab2f4e19bd890d2e674e67.png

更多精彩

关注我获得

c078d684200e63939ca3587b8e9a058c.png

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

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

相关文章

双网卡上网冲突解决_【技术文章】局域网IP地址冲突罪魁祸首是什么?这几点要注意!(附高手处理方法)...

现如今,人们的生活处处离不开网络。单位办公信息化对网络的依赖则更大。为了提升安全管理和信息化水平,很多单位不仅建设了完善的办公信息系统,还部署了视频监控。但由于缺乏整体规划,或选择网络产品时考虑欠周,导致网…

异常分析

一、请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识。 (1)源代码;import javax.swing.*; class AboutException { public static void main(String[] a) { int i1, j0, k; ki/j; try { k i/j…

linux c之wait和waitpid函数的用法和总结

1、wait和waitpid函数的介绍 1) wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或者该进程接收到了一个指定的信号为止。如果该父进程没有子进程或者它的子进程已经结束,则wait()函数就会立即返回。 2) waitpid()的作用和wait()一样,但它并不一…

微软开发者的年度回顾

2021 年 .NET 和 Microsoft 开发人员的技术都发生了什么?很难从 2021 年只选择一个主题。安静的进化?开源的争议?一个让开发人员疑惑的操作系统更新?当我回头看时, 发现一年发生了很多事情, 2021 年的发展是稳步向前的&#xff0c…

我是永远不可能出轨的,除非......

1 当爸妈学会了抠图(素材来源豆瓣,侵删)▼2 帮我带瓶我平时常喝的水(素材来源网络,侵删)▼3 我们是被资本凑在一起的联姻(素材来源网络,侵删)▼4 我是不会出轨的&…

linux之学习linux系统相关的书籍

1.《鸟哥的Linux私房菜-基础学习篇》 2.《Linux Shell 脚本攻略》 3.《Unix环境高级编程》 4.《Linux系统编程》

16岁上大学,25岁博士毕业,她还是南大医学院最年轻的博导!

全世界只有3.14 % 的人关注了爆炸吧知识本文转自:募格学术魏嘉,16岁考上南大,25岁博士毕业,是南大医学院最年轻的博导,已在J Natl Cancer Inst等国际著名杂志上发表64篇SCI论文。在第24届“中国青年五四奖章”入围名单…

十年整理CAD精髓

为什么80%的码农都做不了架构师?>>> AUTOCAD使用心得之一 使用的三个基本方面:清晰、准确、高效 目前,公司的设计文件,特别是图纸,都是用AUTOCAD软件绘制的。但是,现在还有很多人对CAD并不是…

使用这个库,让你的服务操作 Redis 速度飞起

点击上方蓝字关注 👆👆没领红包封面的可以在文末领取大多数人使用 Redis 作为远程缓存存储,因为它速度快。Redis6 通过消除不必要的网络往返,可以使其更快。服务器辅助的客户端缓存这个方法很简单。Redis6 会记录客户端请求的键值…

mysql bigint转string_无语了,直到今天,我才揪出MySQL磁盘消耗迅猛的“真凶”!...

作者:dbapower链接:https://blog.51cto.com/suifu/2135599背景Part1:写在最前当一张单表10亿数据量的表放在你面前,你将面临着什么?Part2:背景介绍为了提升数据库资源利用率,一个实例中,在不互相影响&#…

mysql导入sql脚本命令

2019独角兽企业重金招聘Python工程师标准>>> 使用mysql自带的命令行工具导入sql脚本如下&#xff1a; mysql -h localhost -u root -proot -v -Ddbname < dbname.sql 转载于:https://my.oschina.net/u/2450094/blog/795488

媒体层图形技术之AssetsLibrary 学习笔记

choudang的专栏转载自 http://m.blog.csdn.net/blog/choudang/28274519 1.ALAsset ALAsset类代表相册中的每个资源文件&#xff0c;可以通过它获取资源文件的相关信息还能修改和新建资源文件 Asset Properties – valueForProperty: (1.ALAssetPropertyType 资源的类型&…

jenkins构建触发器定时任务

接上篇Jenkins发布.Net项目到IIS前面说到了把项目部署到iis,那么这边有个问题就是这个部署的触发条件是手工还是需要自动的呢。我觉得这个的看具体的场景&#xff0c;假设团队人员比较多&#xff0c;不断的在提交代码到指定分支&#xff0c;如果是自动化的话&#xff0c; 那么基…

JavaScript基于对象编程

2019独角兽企业重金招聘Python工程师标准>>> JavaScript基于对象编程 1、JavaScript变量/函数声明在代码执行之前被解析&#xff0c;并且变量声明优先级高于函数声明。 代码片段&#xff1a; 1234567var flag test in window;if (!flag){ var te…

idae 安装的插件怎么删掉_X7 IE阻止我安装插件怎么办

为了在网页上表现多彩的多媒体内容&#xff0c;很多网站会要求我们装上相应的网页插件来实现。但IE的默认安全设置会阻止我们进行安装某些网页插件。可是如果不装的话&#xff0c;网页很多媒体的内容就会显示不出来。怎么办呢&#xff1f;其实我们可以调整IE的安全设定来解决。…

MongoDB基本管理命令

2019独角兽企业重金招聘Python工程师标准>>> MongoDB是一个NoSQL数据库系统&#xff1a;一个数据库可以包含多个集合&#xff08;Collection&#xff09;&#xff0c;每个集合对应于关系数据库中的表&#xff1b;而每个集合中可以存储一组由列标识的记录&#xff0c…

花季少女竟然有个三年级老公??!

1 不能直视咖啡了&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 不理外国人的后果&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 猫占鸡巢&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 律师有什么坏心思呢&#xff1f;&#xff08;素材…

dotnet-httpie 0.2.0 Released

dotnet-httpie 0.2.0 ReleasedIntrodotnet-httpie 是类 httpie 的一个调用 HTTP API 的小工具&#xff0c;可以帮助我们快速测试 API&#xff0c;语法和 httpie 基本一样。第一个版本发布之后&#xff0c;做了一些重构&#xff0c;使用 System.CommandLine 重写了对于 Option 的…