IdentityServer开题篇

最近也研究了一段时间的IdentityServer4,园里关于IdentityServer的文章也不少,这里也简单写写,作作记录(文笔不佳,见谅)。前端

 

1.identityserver是什么?git

Identityserver是一个OpenID Connect和OAuth 2.0框架。它实现了这两种协议流程,也提供了客户端以便于集成。(基本上OpenID Connect和OAuth 2.0部分代码是没法更改的,里面的endpoint相关代码都是内部类)github

Identityserver也支持自定义协议,你能够本身添加一个本身的验证受权流程,不过须要写不少代码,官网提供了一个WsFederation协议的例子。json

 

Identityserver支持如下几种模式,也能够本身自定义模式:后端

Implicit(隐式受权模式)隐式受权类型针对基于浏览器的应用程序进行了优化。仅用于用户身份验证(服务器端和JavaScript应用程序),或身份验证和访问令牌请求(JavaScript应用程序)。不支持刷新token,简单来讲就是一系列受权和用户登陆的流程。对应的模式是混合模式。api

Authorization code(受权码模式):获取受权码,再经过受权码获取accesstoken和refreshtoken浏览器

Hybrid(混合模式):混合流是隐式和受权代码流的组合。支持刷新token。服务器

Client credentials(客户端认证模式):经过客户端id和秘钥获取tokencookie

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,微博等。

相关文章
相关标签/搜索