OAuth2学习笔记

近期学习了OAuth2相关知识,在此与各位分享一下。

一些资料

https://www.oauth.com/ 一个OAuth 2学习网站
https://github.com/RangelReale/osin 一个用于搭建OAuth 2 server的go package

Role

  • Client:可以理解成一个app,需要访问用户资源完成业务逻辑。
  • Authorization server:授权服务器。主要用来向clients颁发access token并校验token有效性。
  • Resource server:资源服务器。为Client提供资源访问服务,需要访问authorization server验证access token。
  • Resource owner:可以认为是user,资源的拥有者。与authorization server交互完成身份认证和确认授权。

Access token交换

Authorization code授权

当用户访问一个第三方app时,该app需要有权限访问用户所拥有的资源。这时第三方app需要将用户重定向至authorization server。此时authorization server通常会要求用户登录来认证身份,再让用户选择是否向该app授权。

用户同意后,authorization server会生成一个临时的authorization code并将用户重定向到第三方app,code会在请求参数中发给第三方app。此时app使用code请求authorization server获取access token。并使用token访问用户资源。

Password授权

Password授权可以通过用户名和密码来交换access token。与authorization code授权方式不同,Password授权只需要请求一次authorization server来获取token。
由于这种方式会导致app知道用户的密码,因此此种方式只能用于官方app。如web portal服务和mobile portal服务都可以通过Password方式让用户登录来获取access token。

Client Credentials授权

当app只想访问自己的资源时,可以使用Client Credentials授权。该方式通过client id和secret请求一次authorization server来获取token。

示例

通过三种授权方式,我们可以搭建一个的auth server,统一向官方和第三方app提供授权服务。

我实现了一个demo,代码托管于https://github.com/FlyingShit-XinHuang/auth-server

你可能感兴趣的:(Golang,工作日志)