IdentityServer4

 

身份认证服务器(IdentityServer

l  IdentityServer:

是基于OpenID Connect协议标准的身份认证和授权程序,它实现了OpenID Connect 和OAuth2.0协议。

l  OAuth2.0:

是一种授权机制,用来授权第三方应用,获取用户数据,其核心就是向第三方应用颁发令牌。

有4种授权方式:

  • § 授权码(authorization-code)
  • § 隐藏式(implicit)
  • § 密码式(password):
  • § 客户端凭证(client credentials)

不管哪一种授权方式,第三方应用申请令牌之前,都必须先到系统备案,说明自己的身份,然后会拿到两个身份识别码:客户端 ID(client ID)和客户端密钥(client secret)。这是为了防止令牌被滥用,没有备案过的第三方应用,是不会拿到令牌的。

 

  • § 授权码(authorization-code)

这种方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。

1.获取授权码

https://b.com/oauth/authorize?

  response_type=code&

  client_id=CLIENT_ID&

  redirect_uri=CALLBACK_URL&

  scope=read

2.使用授权码拿令牌:
https://b.com/oauth/token?
 client_id=CLIENT_ID&
 client_secret=CLIENT_SECRET&
 grant_type=authorization_code&
 code=AUTHORIZATION_CODE&
 redirect_uri=CALLBACK_URL

3颁发令牌

{    
  "access_token":"ACCESS_TOKEN",
  "token_type":"bearer",
  "expires_in":2592000,
  "refresh_token":"REFRESH_TOKEN",
  "scope":"read",
  "uid":100101,
  "info":{...}
}

 

二.隐藏式:令牌是直接暴露在前端的不安全。因此,只能用于一些安全要求不高的场景,并且令牌的有效期必须非常短,通常就是会话期间(session)有效,浏览器关掉,令牌就失效了。

1.授权

https://b.com/oauth/authorize?
  response_type=token&
  client_id=CLIENT_ID&
  redirect_uri=CALLBACK_URL&
  scope=read

2.颁发令牌:

https://a.com/callback#token=ACCESS_TOKEN

三.密码式:

如果你高度信任某个应用,RFC 6749 也允许用户把用户名和密码,直接告诉该应用。该应用就使用你的密码,申请令牌,这种方式称为"密码式"password

1.请求令牌

https://oauth.b.com/token?
  grant_type=password&
  username=USERNAME&
  password=PASSWORD&
  client_id=CLIENT_ID

四.凭证式:

这种方式给出的令牌,是针对第三方应用的,而不是针对用户的,即有可能多个用户共享同一个令牌

https://oauth.b.com/token?
  grant_type=client_credentials&
  client_id=CLIENT_ID&
  client_secret=CLIENT_SECRET

 

更新令牌:
B 网站颁发令牌的时候,一次性颁发两个令牌,一个用于获取数据,另一个用于获取新的令牌(refresh token 字段)。令牌到期前,用户使用 refresh token 发一个请求,去更新令牌。
https://b.com/oauth/token?
  grant_type=refresh_token&
  client_id=CLIENT_ID&
  client_secret=CLIENT_SECRET&
  refresh_token=REFRESH_TOKEN

refresh_token参数就是用于更新令牌的令牌。

 

OIDCOAuth2.0主要扩展就是提供了Id token,在OAuth2.0提供的 Access Token解决第三方客户端访问受保护资源的基础上,扩展了Id token解决了客户端标识身份认证的问题,一并提供用户身份认证的信息 。

扩展了一种授权方式:

Hybrid Flow:混合Authorization Code Flow+Implici Flow。

 

 
posted on 2021-01-28 13:50  ccc#  阅读(203)  评论(0编辑  收藏  举报