前言:

这是一篇实践指南,不会过多的解释原理(因为我也说不清楚,想了解的同学请移步老张的博客,里面有非常详细的介绍),本篇文章讲解如何简单的使用IDS4来实现单点登录,以及遇到的一些坑
实现功能:

1.持久化数据到数据库
2.自定义认证
3.创建用户
4.创建客户端列表
5.创建资源列表
6.服务端部署

准备工作:

1.Linux服务器(建议Centos 7+)

2.Mysql(5.7+)

3..net core SDK 3.1

4.基于内存模型,能简单使用IDS4

欢乐时光(吹牛逼),就要开始了........

体验地址:https://admin.wmowm.com/

开源地址:https://github.com/wmowm/gourd/

项目结构如图所示,MVC项目,授权服务,资源服务

在持久化数据库过程中,我遇到了很多问题,这里就不过多说明了,这也是第一道坎,我这里的迁移文件已经整理好了,准备一个空的mysql数据库,取消InitializeDatabase(app)的注释,运行项目即可

Identity有自己的一套验证规则(太过于复杂,没那么多精力去折腾),我也在这个上吃了大亏,将它替换成我们熟悉的模式就可以了,怎么简单怎么来

 public async Task ValidateAsync(ResourceOwnerPasswordValidationContext context)
{
try
{
var userName = context.UserName;
var password = context.Password; //验证用户,这么可以到数据库里面验证用户名和密码是否正确
var claimList = await ValidateUserAsync(userName, password); // 验证账号
context.Result = new GrantValidationResult
(
subject: userName,
authenticationMethod: "custom",
claims: claimList.ToArray()
);
}
catch (Exception ex)
{
//验证异常结果
context.Result = new GrantValidationResult()
{
IsError = true,
Error = ex.Message
};
}
}
        /// <summary>
/// 验证用户
/// </summary>
/// <param name="loginName"></param>
/// <param name="password"></param>
/// <returns></returns>
private async Task<List<Claim>> ValidateUserAsync(string loginName, string password)
{
//TODO 这里可以随意验证了
var user = await _context.Users.FirstAsync(m => m.UserName == loginName && m.PasswordHash == password);
if (user == null)
throw new Exception("登录失败,用户名和密码不正确"); return new List<Claim>()
{
new Claim(ClaimTypes.Name, $"{loginName}"),
};
}

创建用户,在初始化的时候,我们已经默认添加了一个用户进去了,由于使用自定义的验证规则,这里就可以随便弄了,只要把数据插入到指定的表就可以了

#region 读取初始化数据
string userId = Guid.NewGuid().ToString();
string roleId = Guid.NewGuid().ToString();
List<SysUser> usereInfo = new List<SysUser>()
{
new SysUser()
{
Id = userId,
Account = "tibos",
Name = "tibos",
Password = "123456" //这里建议存MD5密文
}
}; List<SysRole> SysRole = new List<SysRole>()
{
new SysRole()
{
Id = roleId,
Memo = "管理员",
Name = "admin"
}
}; List<SysUserRole> SysUserRole = new List<SysUserRole>()
{
new SysUserRole()
{
Id = Guid.NewGuid().ToString(),
RoleId = roleId,
UserId = userId
}
}; #endregion

我也用LayUI写了一个简单的CRUD,方便大家添加用户

添加客户端,这里面的水就有点深了,涉及到的表有点多,作为一个懒人,我肯定是不会每个表都去弄的,参考初始化导入内存模型里的客户端,我弄了两个最常用的客户端,webapi,mvc 这个对应IDS4里的AllowedGrantTypes类型,我们常用的客户端分为

1.传统的Web项目,如mvc

2.前端项目, 如vue

3.桌面程序, 如winform,postman

这些我项目里都有实践

它的添加是一个json文件,可以参考内存模型自己随意改

添加资源比较简单,每个资源拥有多个密钥

它们三者的关系,因为我把用户单独提出来了,这里只说客户端与资源, 一个客户端的访问范围可以指定多个资源

做完了这些,你以为你已经掌握IDS4了,其实还差的远,本地一切正常,部署到服务器上的时候,又是一堆问题

1.https问题,建议在程序里做强行跳转,而不是在nginx里跳,nginx http重定向到https的时候,ids4检查是不通过的,但是在iis上却是正常的

2.跨域问题,建议也在程序里设置允许跨域,如果nginx跟程序都设置了允许跨域,则会出现两个请求头的异常

3.前端程序,第一次登录成功,回调的地址没有携带id_token,我这里是再回调页面再重新登录一次,第二次checksession会带上id_token,这样就可以拿令牌换access_token了,在使用access_token访问受保护的资源

4.受保护资源最好也配置成https,当web站点是https时,js请求http的api资源会报错,这个是浏览器限制

AllowedGrantTypes

IDS4 傻瓜式实践指南的更多相关文章

  1. Webpack 傻瓜式指南(一)

    modules with dependencies   webpack   module bundler   static  assetss   .js .js .png Webpack傻瓜式指南 n ...

  2. Webpack傻瓜式指南(转)

    add by zhj: 作者写了三篇文章,这是第一篇幅,另外两篇参见 https://zhuanlan.zhihu.com/p/20397902 https://zhuanlan.zhihu.com/ ...

  3. [翻译] C# 8.0 新特性 Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南) 【由浅至深】redis 实现发布订阅的几种方式 .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐

    [翻译] C# 8.0 新特性 2018-11-13 17:04 by Rwing, 1179 阅读, 24 评论, 收藏, 编辑 原文: Building C# 8.0[译注:原文主标题如此,但内容 ...

  4. Celery的实践指南

    http://www.cnblogs.com/ToDoToTry/p/5453149.html Celery的实践指南   Celery的实践指南 celery原理: celery实际上是实现了一个典 ...

  5. .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐

    作者:依乐祝 原本链接:https://www.cnblogs.com/yilezhu/p/9947905.html 引子 为什么写这篇文章呢?因为.NET Core的生态越来越好了!之前玩转.net ...

  6. Python 最佳实践指南 2018 学习笔记

    基础信息 版本 Python 2.7 Python 3.x Python2.7 版本在 2020 年后不再提供支持,建议新手使用 3.x 版本进行学习 实现 CPython:Python的标准实现: ...

  7. MacOS安装Docker傻瓜式教程

    最近电脑越来越卡了,为了减少系统开销,以及后期维护方便,所以考虑将本地安装一些服务迁移到docker中去管理,这一切的基础是要先有docker服务,所以本文就先记录怎样在mac上安装配置docker, ...

  8. Python编程之美:最佳实践指南PDF高清完整版免费下载|百度云盘|Python新手到进阶

    百度云盘:Python编程之美:最佳实践指南PDF高清完整版免费下载 提取码:1py6 内容简介 <Python编程之美:最佳实践指南>是Python用户的一本百科式学习指南,由Pytho ...

  9. 业务驱动的全景监控体系在阿里的应用 | 阿里巴巴DevOps实践指南

    编者按:本文源自阿里云云效团队出品的<阿里巴巴DevOps实践指南>,扫描上方二维码或前往:https://developer.aliyun.com/topic/devops,下载完整版电 ...

  10. 《Vue3.x+TypeScript实践指南》已出版

    转眼回长沙快2年了,图书本在去年就已经完稿,因为疫情,一直耽搁了,直到这个月才出版!疫情之下,众生皆苦!感觉每天都是吃饭.睡觉.上班.做核酸! 图书介绍 为了紧跟技术潮流,该书聚焦于当下火的Vue3和 ...

随机推荐

  1. Python 中的字符串基础与应用

    在Python中,字符串可以用单引号或双引号括起来.'hello' 与 "hello" 是相同的.您可以使用print()函数显示字符串文字: 示例: print("He ...

  2. keycloak~RequiredActionProvider的使用

    使用场景 RequiredActionProvider,它是在认证过程中,需要当前登录的用户执行个性化的动作:当用户符合条件,就被执行RequiredActionProvider对作,当Require ...

  3. centos6.5下安装配置apache2.4.9

    centos6.5下安装配置apache2.4.9 摘要: 需要下载的包 apr-1.5.0.tar.gz apr-util-1.5.3.tar.gz pcre-8.33.tar.gz httpd-2 ...

  4. 国内十大活跃报表 BI 产品深度点评

    目前国内市场上的报表 BI 工具琳琅满目,看起来也各有特点,这给选型工作带来了一些困扰,本文就一些较活跃的报表 BI 产品进行点评,对于不太熟悉这些产品和技术的同学,可作为参考资料. 这里选了十个产品 ...

  5. nginx重新整理——————nginx 的设计模型[八]

    前言 简单介绍一下nginx的设计模型,对我们设计程序还是有一定帮助的. 正文 这里先列一下模型哈,后面有深入篇,介绍的比较清楚. nginx 的处理模型: nginx 进程模型: 可以看到下面列出了 ...

  6. 多python版本的库安装和导库

    同时安装多python版本的,使用pip安装python的库,以及导出python库列表及版本,使用导出的库列表批量进行新环境的库安装. 1.同时安装python2和python3时,要进行pip安装 ...

  7. React中类组件和函数组件

    一.类组件 类组件,顾名思义,也就是通过使用ES6类的编写形式去编写组件,该类必须继承React.Component 如果想要访问父组件传递过来的参数,可通过this.props的方式去访问 在组件中 ...

  8. nethttp和gin 路由

    net/http 路由注册 func test1() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Requ ...

  9. HarmonyOS NEXT应用开发之MpChart图表实现案例

    介绍 MpChart是一个包含各种类型图表的图表库,主要用于业务数据汇总,例如销售数据走势图,股价走势图等场景中使用,方便开发者快速实现图表UI.本示例主要介绍如何使用三方库MpChart实现柱状图U ...

  10. 在kubernetes集群中使用虚拟节点创建1万Pod-支持在线教育业务

    使用虚拟节点提升k8s集群容量和弹性 在kubernetes集群中添加虚拟节点的方式已被非常多的客户普遍使用,基于虚拟节点可以极大提升集群的Pod容量和弹性,灵活动态的按需创建ECI Pod,免去集群 ...