1. web向服务器请求第三方登录登录, 服务器返回github第三方登录uri

    uri包含response_type(认证方式,比如code), client_id, redirect_uri, scope表示授权范围

  2. 用户点击uri, 进入github, github询问用户是否同意授权指定范围的登录请求
  3. 用户同意, 返回到redirect_uri, 同时会附带一个授权码code
    https://a.com/callback?code=AUTHORIZATION_CODE
    
  4. 这时, 后端通过刚才的uri拿到了code, 就可以向github发送一个令牌请求:
    https://b.com/oauth/token?
     client_id=CLIENT_ID&
     client_secret=CLIENT_SECRET&
     grant_type=authorization_code&
     code=AUTHORIZATION_CODE&
     redirect_uri=CALLBACK_URL
    

    上面 URL 中,client_id参数和client_secret参数用来让 B 确认 A 的身份(client_secret参数是保密的,因此只能在后端发请求) redirect_uri是令牌颁发后的回调地址.

  5. github接到后端请求, 颁发一个token给后端(向redirect_uri发送数据)
  6. 后端通过token向github资源服务器请求数据.

oauth flowchart