IdentityServer开题篇
最近也研究了一段时间的identityserver4,园里关于identityserver的文章也很多,这里也简单写写,做做记录(文笔不佳,见谅)。
1.identityserver是什么?
identityserver是一个openid connect和oauth 2.0框架。它实现了这两种协议流程,也提供了客户端以便于集成。(基本上openid connect和oauth 2.0部分代码是无法更改的,里面的endpoint相关代码都是内部类)
identityserver也支持自定义协议,你可以自己添加一个自己的验证授权流程,不过需要写很多代码,官网提供了一个wsfederation协议的例子。
identityserver支持以下几种模式,也可以自己自定义模式:
implicit(隐式授权模式):隐式授权类型针对基于浏览器的应用程序进行了优化。仅用于用户身份验证(服务器端和javascript应用程序),或身份验证和访问令牌请求(javascript应用程序)。不支持刷新token,简单来说就是一系列授权和用户登录的流程。对应的模式是混合模式。
authorization code(授权码模式):获取授权码,再通过授权码获取accesstoken和refreshtoken
hybrid(混合模式):混合流是隐式和授权代码流的组合。支持刷新token。
client credentials(客户端认证模式):通过客户端id和秘钥获取token
resource owner password(用户名密码模式):使用用户名密码获取token
refresh tokens(刷新token模式):使用刷新token获取新的accesstoken和刷新token
上各种模式的最终目的都是获取授权,例如idtoken(包含用户信息,jwt格式),accesstoken,accesstoken包含了用户授权的信息,例如允许访问哪些api等。
2.identityserver能做什么
单点登录:我一开始接触identityserver就是为了实现单点登录,一般使用implicit(隐式授权模式)或者 hybrid(混合模式)实现单点登录。
implicit流程如下:
登录:
用户在客户端网站1通过客户端id和秘钥等信息访问identityserver,验证通过后跳转到登录页面,输入用户名密码正确会返回idtoken,客户端网站1通过解密获取用户信息并存储cookie(第一次登录)
客户端网站2通过客户端id和秘钥等信息访问identityserver,发现用户已认证(identityserver网站存储了cookie),客户端网站2通过解密获取用户信息并存储cookie(第二次登录)
登出:
用户通过客户端网站1访问identityserver的结束会话端点,需要id_token_hint和post_logout_redirect_uri参数,identityserver清除会话信息(cookie),并会回调所有登录客户端的frontchannellogout(前端注销)和backchannellogout(后端注销)地址,
接着跳转到网站1的post_logout_redirect_uri地址。
ps:通过identityserver实现的单点登录必须每个网站验证都需要跳转到identityserver,若要实现一次登录所有网站都登录的模式(jsonp实现单点登录),只能再通过一个子网站作为中转。
认证服务:适用于各种客户端集中登录逻辑和工作流程。单点登录就是其中一种实现。
api访问控制:一种是基于客户端的访问,一种是基于用户的访问,都是通过identityserver获取accesstoken(accesstoken有api的授权),获取的时候需要包含允许访问的api参数,然后就可以通过accesstoken访问api了。
ps:api也是需要自己新建的,接入identityserver验证或者bear认证就可以了。
接入第三方授权访问:例如google,facebook,qq,微博等。
上一篇: 摄影入门必知:学习摄影的八大黄金法则
下一篇: ABB
推荐阅读
-
一篇文章教你轻松使用fastjson
-
Docker基础与实战,看这一篇就够了
-
C语言实现单链表面试题(进阶篇)
-
大数据之路【第十四篇】:数据挖掘--推荐算法(Mahout工具)
-
Asp.NetCoreWebApi图片上传接口(二)集成IdentityServer4授权访问(附源码)
-
CentOS7 LNMP+phpmyadmin环境搭建 第三篇phpmyadmin安装
-
CentOS7 LNMP+phpmyadmin环境搭建 第一篇虚拟机及centos7安装
-
CentOS7 LNMP+phpmyadmin环境搭建 第二篇LNMP环境搭建教程
-
交换机基础知识总结之技术篇
-
Android 8.1 源码_启动篇(二) -- 深入研究 zygote