oauth2的基本概念和认证流程

oauth2的基本概念

在Oauth中至少是有用户,应用服务器,认证服务器这几个角色在交互。OAuth的作用就是让"客户端"安全可控地获取"用户"的授权,与"应用服务器"进行互动。

OAuth2的基本流程

用户通过浏览器访问一个应用,比如微信商城网页授权获取用户的微信基本信息。

第一次商城访问要求获取我的微信信息,弹出授权页面,我确定授权,这里的微信授权就是那个认证服务器。
选择授权,也就是允许商城获取我的微信基本资料。
这个时候我们看到微信浏览器经过几次跳转后返回网页,这个时候我们已经完成了授权。
重点在于几次跳转的过程中,网站和微信的服务之间还有过几次交互。

我们选择了授权的时候微信授权服务器会根据网页跳转到微信接口地址时候给出的重定向链接返回一个code,这个code代表微信服务器认可该网站这个应用服务器的这个请求是合法的予以放行.
网站这个时候就会用这个code再次向微信授权服务发起请求服务令牌(asscess_token/token)。
拿到这个令牌之后,接下来网站需要用户的一些基本信息时就可以通过在向微信服务提交的请求头里带上这个令牌,令牌验证通过就可以调用微信提供的一些接口。
这一部分的操作是应用服务器和验证服务器之间的交互,这个过程对用户是透明的。这个过程中网站是不需要知道微信用户的账号密码也可以完成对用户身份的认证,这个token(asscess_token)就可以用来标识用户资源。

OAuth的几种认证模式

上述讲的是OAuth2中支持的授权码(CODE)方式的认证流程,也是其支持的四种认证方式里最复杂的,其他的三种种包括:

  1. 简化模式(implicit),(在redirect_uri 的Hash传递token; Auth客户端运行在浏览器中,如JS,Flash)
  2. 密码模式(resource owner password credentials),将用户名,密码传过去,直接获取token;
  3. 客户端模式(client credentials),无用户,用户向客户端注册,然后客户端以自己的名义向'服务端'获取资源;
    详细的OAuth2资料参考理解OAuth 2.0|阮一峰的网络日志
    分别适用不同场景,复杂度也比授权码模式要低,所以这里就只说说授权码模式的具体过程

Go实现例子

(待更新)

你可能感兴趣的:(oauth2的基本概念和认证流程)