如何实现统一认证(单点登录)服务以及app或client客户端登录

927 阅读2分钟

前言

OIDC的比方
有个认证服务器IS,用户U在IS上提交了用户名密码(或其他可以确认自己身份的方式)完成了登记注册
用户U想使用服务提供商SP提供的一项服务,SP为了能够区分来访的用户是谁就需要有认证过程 于是U通过带有SP信息的IS登录页面登录后,IS回复了U的身份标识openid给SP,SP就知道来访用户是否是U了,OIDC中的身份标识包含于id_token中,id_token是JWT格式,id_token由IS中的私钥加密openid和其他的一些内容后得到,公钥下发给各SP由各SP用公钥解密id_token后可以用以确认U的身份

OAUTH2
有个认证服务器IS,用户U在IS上提交了用户名密码(或其他可以确认自己身份的方式)完成了登记注册,IS还存有U的手机号或其他的资料
用户U想使用服务提供商SP提供的一项服务,SP想向IS拿取U的手机号码,于是U通过带有SP信息的IS登录页面登录后,IS在U登陆时告知了SP想获得的资料,U同意后,IS向SP发放了与获取资料权限相关的令牌access_token,当SP想获取U的资料时,就可以拿access_token向IS要,这样避免了SP知道U在IS的登陆用户名和密码,也能让SP获得授权范围以内的信息,当然SP拿到token后也能向IS拿取U的身份标识openid。这个access_token可以是一串无意义的字符也可以是带有信息的JWT。

OAuth2 and OpenID Connect

app oauth2 (PKCE)

参考

  1. blackheart-认证&授权
  2. blackheart-OIDC in Action
  3. 甘罗-读懂 SSO、OAuth 2.0、OpenID Connect
  4. github-servicecomb-fence微服务认证鉴权支持
  5. 阿里云-API网关-OpenID Connect 认证
  6. tony xu博客-为客户端而生的OAuth2.0协议之PKCE授权码模式