Oauth2的4种模式:

  • 授权码(Authorization)模式(获取code、code换取access_token)
  • 简化(Impilict)模式(直接换取access_token,基本不用)
  • 密码(Resource Owner Password)模式(客户端向用户索取账号密码,然后客户端向服务端索取授权,基本不用)
  • 客户端(Client)模式(客户端以自己的名义要求"服务提供商"提供服务;场景:提供接口服务)

授权码模式流程

  1. 注册客户端

    • clientId = 1
    • secret=secret
  2. 注册用户
  3. 请求授权码

    • http://localhost:8080/oauth2-server/authorize?client_id=client_id&client_secret=client_secret&response_type=code&redirect_uri=redirect_uri&scope=productservice%20agentservice
  4. 跳转至授权登录页面
  5. 登录后,回调到redirect_uri?code=xxxxx&scope=productservice%20agentservice
  6. POST http://localhost:8080/oauth2-server/token?client_id=client_id&client_secrets=client_secrets&grant_type=authorization_code&redirect_uri=redirect_uri&code=xxxx&scope=productservice%20agentservice 得到accessToken

简化模式流程

同授权码模式
只是少了步骤5,6
第5步登录后就返回accessToken

客户端授权流程

客户端和授权中心之间的对接,跟用户无关

密码模式

用户将账户密码告诉客户端
客户端用账户密码获得授权

总结

  • 常用的还是授权码模式。
  • 相比授权码模式,简化模式虽然降低了安全性,但也降低了使用难度
  • 客户端模式一般用于 API调用服务
  • 密码模式因为直接泄露密码,基本没有使用的场景