【实战 Ids4】║ 客户端、服务端、授权中心全线打通!

1、经过元旦两天的全力整改,终于在这新的一年,完成了我的布道生涯的第一个大步走 —— 那就是客户端(VUE)、服务端(ASP.NET Core API)、授权中心(IdentityServer4)的大融合,不仅有文档也有代码,更重要的是实战。

2、这一大步里边当然也有很多小步骤,知识点就不说了,过去的文章里都有。

3、具体的代码和效果呢,我会在下边给大家先简单的说明一下,今天的目的主要是第一篇,概述下,里边的小知识点或者注意事项,其实主要还是Ids4的内容,我还是会慢慢的在以后的文章或者视频中,给大家讲解的。

因为微信公众号不能多次修改文章内容,所以我如果有更新内容,会重点在博客园也发布几篇文章,公众号只是作为一个消息的发布,点击阅读原文,查看博客园文章。

那下边我就简单的说说效果吧,大家也可以自行体验一下:

http://vueadmin.neters.club

(支持滑动更新等基本操作,后期增加单点登录)

Blog.Admin 客户端

Admin项目,是基于Vue+Ele开发的一套后端权限框架,是我自主研发的,里边主要是用到了动态数据库授权认证,使用JWT的复杂策略授权技术,精确到按钮基本,目前部门数据权限还在设计当中,以后也会附加上,这是内部授权这一块,但是认证想做一个统一认证中心,所以就想到了IdentityServer4了。

Vue项目和其他的SPA项目是一样的,连接IdentityServer4认证中心,主要是通过oidc-client这个插件来处理的,

npm install oidc-client --save

用法其实很简单,我简单说下思路,具体的看我的代码,或者看官网都可以:

 class ApplicationUserManager extends UserManager {constructor () {super({authority: 'http://ids.neters.club',client_id: 'blogadminjs',redirect_uri: 'http://vueadmin.neters.club/callback',response_type: 'id_token token',scope: 'openid profile roles blog.core.api',post_logout_redirect_uri: 'http://vueadmin.neters.club'})}

这个是核心方法,目的是通过配置,实现用户管理,比如登录,跳转,回调,获取用户信息,令牌token,刷新等等,当然以后可能会配合单点登录做处理。

  methods: {async refreshUserInfo() {const user = await applicationUserManager.getUser();if (user) {this.user.name = user.profile.name;this.user.isAuthenticated = true;} else {this.user.name = "";this.user.isAuthenticated = false;}}}

这个是使用上边的UserManager来处理远程获取到的用户数据。

具体的代码我已经放到了Blog.Admin项目的ids4分支下了:

Blog.Core 资源服务端

这个项目想必都知道了,不多说什么,其实你的任意一个后端服务项目都可以,只要做个表结构,然后配置Identityserver4的认证即可。

//2.2【认证】、IdentityServer4 认证 (暂时忽略)
services.AddAuthentication("Bearer").AddIdentityServerAuthentication(options =>{options.Authority = "http://ids.neters.club";options.RequireHttpsMetadata = false;options.ApiName = "blog.core.api";});

这个就是一个核心的代码,将我们BlogCore的资源服务器认证方式,从JWT改成Ids4认证。

修改完认证方式以后,下边就是简单的对其中几个小知识点进行微调了,比如某些Claim声明字段,我用的和Ids4不太一样,所以就简单微调一下,主要的修改内容,我也新建了一个分支,可以自行查看下,修改的地方不多。

Blog.Idp 认证授权中心

这个才是整个项目的重头戏,项目的重中之重,不过配置起来也不难,具体的操作和使用,我也在录视频和写文章,其实只要了解这几个知识点,就基本学会了Ids4了:

1、如何引用指定的nuget包;

2、JWT、OpenID、OAuth2、OCID 四者的关系和内容;

3、常见的四种授权方式:简化、混合、密码、客户端等要明白场景,会用;

4、学会联调;

具体的就不多说了,不是今天的讲解内容。今天主要点一下部署的时候的几个知识点,其他的看我的代码即可,这次是master分支。

// 使用证书,可以直接使用开发证书
builder.AddDeveloperSigningCredential();// 或者自己配置
.AddDeveloperSigningCredential(true, ConstanceHelper.AppSettings.CredentialFileName)
.AddSigningCredential(new X509Certificate2(Path.Combine(Environment.WebRootPath,Configuration["Certificates:Path"]),Configuration["Certificates:Password"]))

证书这个很重要,当然既然是安全,就要好好处理,可以配合的证书,继续搞搞HTTPS安全协议,未来还是很多要处理的。

 new Client {ClientId = "blogadminjs",ClientName = "Blog.Admin JavaScript Client",AllowedGrantTypes = GrantTypes.Implicit,AllowAccessTokensViaBrowser = true,RedirectUris =           { "http://vueadmin.neters.club/callback" },PostLogoutRedirectUris = { "http://vueadmin.neters.club" },AllowedCorsOrigins =     { "http://vueadmin.neters.club" },AllowedScopes = {IdentityServerConstants.StandardScopes.OpenId,IdentityServerConstants.StandardScopes.Profile,"roles","blog.core.api"}}

这是另一个重点,必须要配置客户端,不仅是数据生成到数据库,更是在授权的时候,起到安全的作用。

最后一个小问题,确定是我自己的问题,就是部署的时候,我本来用的Nginx进行代理,但是配置文件里,却依然是localhost:

这样就导致了一个问题,虽然我的认证中心项目可以正常的跑,我是说服务器生产环境,但是用客户端去登录的时候,会自动跑到locaohost里,毕竟配置文件是这样的。

网上找了很多资料,都是本地教程,部署的都很少,我也是很方,最后我找到了官方的一个在线demo项目,它是正常的,我仔细研究了下代码,代码和我的没啥区别,最后灵机一动,我看了看他们的服务器,是IIS!我赶紧实验了一番,还真的是正常了:

但是这个不科学呀,这个我要承认下,肯定是我学艺不精,Nginx肯定是可行的,但是我没有找到为何去配置,这个时候应该查看官网的,当我继续在寻找的时候,但是正好有一个小伙伴的小伙伴告诉了我,贼简单,这个故事告诉我们,学习知识要从细节着手,不能知其然而不知其所以然。

 var builder = services.AddIdentityServer(options =>{options.Events.RaiseErrorEvents = true;options.Events.RaiseInformationEvents = true;options.Events.RaiseFailureEvents = true;options.Events.RaiseSuccessEvents = true;options.IssuerUri = "http://ids.neters.club";// 就是这里options.PublicOrigin = "http://ids.neters.club";})

结果还是正确的,看来还是要多读文档,当然如果实在是绕不过来,也可以先求助。

就这样,元旦一整天就过去了,项目也终于放上去了,当然还有很多要优化的,既然开始了,便只顾风雨兼程了。

下一步 2020

今年开始,一切都是新的,第一个闭环已经完成了,当然还有很多需要优化,比如单点登录,DDD和Blog项目也迁移到Ids4上来,那下一个就开始了 —— CI/CD DevOps 我来了。

????:点击阅读原文,博客园内容可能稍有不同,后期补充。

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

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

相关文章

补丁 检测系统_大云制造 | BCLinux For ARM64 V7.6操作系统正式发布

友情提示:全文3000多文字,预计阅读时间10分钟概述大云企业操作系统(BC-Linux,BigCloud Enterprise Linux)是中移(苏州)软件技术有限公司借助开源社区优势,通过定制化手段研发的高性能、安全可靠、自主可控的企业级Linux操作系统。…

告别2019,写给2020:干好技术,要把握好时光里的每一步

本文来自:长沙.NET技术社区 邹溪源不知不觉,一晃年关将近,即将翻开2019,进入新的一页。(本文写于2019年12月27日)这周已经在朋友圈看到了来自公众号《恰同学少年》《Edi.Wang》和《吃草的罗汉》几位老师写下…

Java | Assignment Statements Expressions

An assignment statement designates a value for a variable. An assignment statement(赋值语句) can be used as an expression(赋值表达式) in Java. In Java, an assignment statement is an expression that evaluates a v…

单片机课程设计数字心率计_如何选购合适的PH计

聚舟供应的PH计PH计已经被广泛应用于各个行业,如工业、电力、农业、医药、食品、科研和环保等领域,在酸碱值检测时必不可少的,那么该如何选购呢?聚舟销售的PH计也有多种样式与型号,各种型号都供应充足,欢迎…

cd返回上一 git_如何使用Git实现自动化部署你的项目

在开发过程中,我们不可避免的会用到版本控制。你可能对 Git 和 SVN 有所了解。一开始基本都是在用SVN,现在可能都进化到用Git了吧,因为SVN缺点比较多。这里就不过于多的介绍Git的优点了。不知道大家一开始是怎么使用 git 进行开发的&#xff…

java(i++和++i的理解)

在后:先赋值再自身加1 在前:先自身加1再赋值 1.What is i printed? A public class Test {public static void main(String[] args) {int j 0;int i j j * 5;System.out.println("What is i? " i);}}A.6 B.1 C.0 D.5 2.What is y dis…

在Asp.Net Core中使用ModelConvention实现全局过滤器隔离

从何说起这来自于我把项目迁移到Asp.Net Core的过程中碰到一个问题。在一个web程序中同时包含了MVC和WebAPI,现在需要给WebAPI部分单独添加一个接口验证过滤器IActionFilter,常规做法一般是写好过滤器后给需要的控制器挂上这个标签,高级点的做…

Linux 用户和组

用户和组 1.新建用户组:cs se //新建文件夹 mkdir pub mkdir cs mkdir se //新建组 groupadd cs groupadd se //此时,root创建好需要的目录和组,所以目录属主和组都标记为root //chown(change owner)命令用于设置文件所有者和文件关联组的命令 //chown…

2 未匹配到任何借口_拼多多【关键词精确匹配溢价】给你想要的精准流量,让你订单暴增的秘诀...

关键词匹配方式升级啦,开启精确匹配溢价功能,拥有更多精准流量。为帮助商家解决在使用多多搜索时,遇到的关键词流量不精准、流量不可控、点击率低的问题,多多搜索新推出【关键词精确匹配溢价】功能。通过精确匹配溢价功能&#xf…

如何运用领域驱动设计 - 领域服务

概述本文将介绍领域驱动设计(DDD)战术模式中另一个非常重要的概念 - 领域服务。在前面两篇博文中,我们已经学习到了什么是值对象和实体,并且能够比较清晰的定位它们自身的行为。但是在某些时候,你会发现某一些业务行为…

指令打印与驱动打印随笔

本文对指令打印和驱动打印做了一个简要的介绍,分享了在开发客户端打印组件时的一些过程并提出了一个新轮子用于解决老的问题并引出更多的新问题。全文大概 3500 字无图,阅读大概需要 7 分钟。驱动打印是指:使用 PrintDocument 进行打印。通过…

er图转为数据流程图_「数据架构」实体关系模型介绍

实体-关系模型(或ER模型)描述特定知识领域中相关的事物。基本的ER模型由实体类型(对感兴趣的事物进行分类)和指定实体之间可能存在的关系(那些实体类型的实例)组成。在软件工程中,为了执行业务流程,ER模型通常用于表示业务需要记住的内容。因此&#xff…

蒸汽管道图纸符号_蒸汽管道疏水阀图标怎么画法

展开全部如图所示:圆里边一半白一半黑表示疏水阀。蒸汽疏水阀(62616964757a686964616fe59b9ee7ad9431333337393566简称疏水阀)的作用是自动排除加热设备或蒸汽管道中的蒸汽凝结水及空气等不凝气体,且不漏出蒸汽。由于疏水阀具有阻汽排气的作用&#xff0…

WeihanLi.Npoi 1.7.0 更新介绍

WeihanLi.Npoi 1.7.0 更新介绍Intro昨天晚上发布了 WeihanLi.Npoi 1.7.0 版本,增加了 ColumnInputFormatter/ ColumnOutputFormatter,又进一步增强了导入导出的灵活性,来看下面的示例ColumnInputFormatter/ColumnOutputFormatter示例 Model:i…

python程序设计基础教程ppt_Python程序设计基础教程

Python是一门简单易学、功能强大的编程语言,拥有高效的高层数据结构,特别适用于快速应用程序开发。《Python程序设计基础教程》共分为16章,主要内容包括:Python简介、Python环境搭建、函数、模块、文件操作、字符串与正则表达式、…

【复杂系统迁移 .NET Core平台系列】之迁移项目工程

源宝导读:微软跨平台技术框架—.NET Core已经日趋成熟,已经具备了支撑大型系统稳定运行的条件。本文将介绍明源云ERP平台从.NET Framework向.NET Core迁移过程中的实践经验。一、背景随着ERP的产品线越来越多,业务关联也日益复杂,…

分析股票大数据_Python大数据分析量学祖师爷网站数据

本文通过Python抓取股海明灯涨停预报数据进行分析,股海明灯网站涨停预报数据跟踪功能是需要VIP权限,但这个权限分析数据的功能有限,我们抓取数据后丰富相关功能。一、点击涨停预报后打开以下页面。通过python程序将数据抓取到后台数据库&…

【复杂系统迁移 .NET Core平台系列】之界面层

源宝导读:微软跨平台技术框架—.NET Core已经日趋成熟,已经具备了支撑大型系统稳定运行的条件。本文将介绍明源云ERP平台从.NET Framework向.NET Core迁移过程中的实践经验。一、背景随着ERP的产品线越来越多,业务关联也日益复杂,…

linux启动nginx命令行_linux nginx启动 重启 关闭命令

linux nginx启动 重启 关闭命令:nginx -s reload :修改配置后重新加载生效nginx -s reopen :重新打开日志文件nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否正确启动操作 -c参数指定了要加载的nginx配置文件路径nginx -c /usr/loca…

.NET Core MVC扩展实践

源宝导读:明源云ERP的底层架构正在向.Net Core跨平台迁移,我们在过程中遇到了部分不兼容的问题。本文将介绍技术团队如何解决.Net Core与已有MVC框架不兼容问题的解决方案。一、背景云ERP的建模平台是基于.NET Framework构建的,在向.NET Core…