最近也研究了一段时间的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,微博等。

IdentityServer开题篇的更多相关文章

  1. ejabberd之开题篇

    ejabberd是基于Jabber/XMPP协议的即时通讯服务器.采用Erlang/OTP开发.它的特点是,跨平台,容错,集群和模块化.     因为自己本身是基于erlang工作,而且听到有不少的公 ...

  2. mfc ui3

    引用:http://www.cnblogs.com/rainbowzc/archive/2010/06/02/1749872.html 本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者.读者 ...

  3. VC之美化界面(内容覆盖十分全面,经典)

    界面美化 摘要本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者.读者最好具有以下VC基础: 1. 大致了解MFC框架的基本运作原理: 2. 熟悉Windows消息机制,熟悉MFC的消息映射和 ...

  4. Jenkins自动化构建系列:01敏捷开发、自动化构建与持续集成

    <SVN与TortoiseSVN实战系列>已写完,今天新开一个<Jenkins自动化构建系列>,上周听了Bob Jiang老师的Agile1001公开课,一直想写个总结,这篇关 ...

  5. ProtocolBuffer在Android端的解析

    开题篇 近期公司在使用Protocol Buffer替代原先的json作为移动端的数据交互格式.虽然服务端和CTO把这项新技术吹的天花乱坠,说什么体积小,不易被破解乱七八糟的.可是作为Android端 ...

  6. TGL站长关于常见问题的回复

    问题地址: http://www.thegrouplet.com/thread-112923-1-1.html 问题: 网站配有太多的模板是否影响网站加载速度 月光答复: wp不需要删除其他的模板,不 ...

  7. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇一:WPF常用知识以及本项目设计总结

    篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...

  8. IdentityServer(12)- 使用 ASP.NET Core Identity

    IdentityServer具有非常好的扩展性,其中用户及其数据(包括密码)部分你可以使用任何想要的数据库进行持久化. 如果需要一个新的用户数据库,那么ASP.NET Core Identity是你的 ...

  9. IdentityServer(11)- 使用Hybrid Flow并添加API访问控制

    关于Hybrid Flow 和 implicit flow 我在前一篇文章使用OpenID Connect添加用户认证中提到了implicit flow,那么它们是什么呢,它和Hybrid Flow有 ...

随机推荐

  1. 用python实现文件自动上传

    一.简介 用python实现文件自动上传,主要源于在测试项目中想实现自动化上传文件功能,无须手工输入.比如从windows到Linux,或从Linux到windows,或从Linux到Linux. 主 ...

  2. Codeforces831D Office Keys

    D. Office Keys time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  3. Redhat7配置ali-yum源

    1.删除所有包 rpm -qa|grep yum|xargs rpm -e --nodeps 2.下载相关文件 下载地址  https://mirrors.aliyun.com/centos/7/os ...

  4. JS 实现版本号比较功能

    js实现一个客户端版本号的统计,目前该功能可以实现版本号中数字版本的统计,例如2.2.3 <2.2.3.1, 1.2.3<2.0.0,原理就是从高版本号到次版本号依次比较 if (!Arr ...

  5. Nerd的套现ATM机

    Nerd是一群似乎只在学生阶段才出尽风头的人.不善言辞,闷头学习,每遇考试便战功赫赫风光无限,赢得天下名.这样的描述,对那些成绩一般.喜欢天马行空.甚至有些多动症倾向的人来讲,无异于是噩梦.幸好有社会 ...

  6. 酷炫,用Html5/CSS实现文字阴影

    前两天有一个学html5前端小美女问我一个有关文字阴影的效果怎么去实现.她和我说文字阴影嘛,她也知道text-shadow,.但是却做不出想要的样子,其实css3的新功能是很强大的,不要把你的思想太过 ...

  7. 9.视差特效、回弹动画、overScrollBy

    视差特效 * 应用场景: 微信朋友圈, QQ空间, 微博个人展示,向下拉出,松开回弹* 功能实现: > 1. 重写overScrollBy > 2. 松手之后执行动画, 类型估值器 .  ...

  8. 几分钟几张图教你学会如何使用UML

    很多初次接触UML的朋友们可能会感觉它各种各样的线条.关系.描述等晦涩难懂.本篇文章简单介绍了一下其中几个图,用最朴实的语言结合上图片来让你一眼就能理解他们,如果您在阅读的过程种发现错误之处恳请您在评 ...

  9. Eclipse 使用前常用设置

    1.常用设置的位置 Eclipse中一般的设置都是在这个位置进行设置的: 2.设置字体类型和大小 一般可以设置成这样代码比较清晰:Consolas + 常规 + 小四 3.设置各种编码 设置工作空间的 ...

  10. Redis 设计与实现 (一)--数据结构

    底层数据结构:动态字符串.字典.整数集合.双端链表.压缩列表 字符串对象: int    浮点数值 raw  字符串值>32字节 embstr   字符串值<32字节 字符串编码转换: i ...