在上篇文章中我讨论了 OpenId 及 DotNetOpenAuth 的相关应用,这一篇继续讨论 OAuth2. 一.什么是 OAuth2 OAuth 是一种开放认证协议,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用.数字 2 表示现在使用第 2 代协议. 二.OAuth2 中的角色 OAuth2 有四种角色 resource owner 资源所有者:比如 twitter 用户,他在 twitter 的数据就是资源,他自己就是这些资源的所有者。 resource server 资源服务器:保存资源的服务器,别人要访问受限制的资源就要出示 Access Token(访问令牌)。 client 客户端:一个经过授权后,可以代表资源所有者访问资源服务器上受限制资源的一方。比如 开发者开发的应用。 authorization server 授权服务器:对 资源所有者进行认证,认证通过后,向 客户端发放 Access Token(访问令牌)。 三.认证过程 用户访问客户端的网站,想操作自己存放在资源服务提供方的资源。 客户端将用户引导至授权服务提供方的授权页面请求用户授权,在这个过程中将客户端的回调连接发送给授权服务提供方。 用户在授权服务提供方的网页上输入用户名和密码,然后授权该客户端访问所请求的资源。 授权成功后,授权服务提供方对客户端授予一个授权码,网站跳回至客户端。 客户端获得授权码后,再次从授权服务提供方请求猎取访问令牌 。 授权服务提供方根据授权码授予客户端访问令牌。 客户端使用猎取的访问令牌访问存放在资源服务提供方上的受保护的资源。 四.猎取访问令牌方式 从上面可以看到,令牌是串起整个认证流程的核心.OAuth2 有四种猎取令牌的方式 Authorization Code 授权码方式:这种是推举使用的,也是最安全的. Implicit Grant 隐式授权:相比授权码授权,隐式授权少了第一步的取 Authorization Code 的过程,而且不会返回 refresh_token。主要用于无服务器端的应用,比如 浏览器插件。 Resource Owner Password Credentials 资源所有者密码证书授权:这种验证主要用于资源所有者对 Client 有极高的信任度的情况,比如操作系统或高权限程序。只有在不能使用其它授权方式的情况下才使用这种方式。 Client Credentials 客户端证书授权:这种情况下 Client 使用自己的 client 证书(如 client_id 及 client_secret 组成的 http basic验证码)来猎取 access token,只能用...