博文

OAuth 2教程

图片
原文: http://tutorials.jenkov.com/oauth2/index.html OAuth 2.0是一种开放式 授权 协议,该协议使得应用程序可以访问彼此的数据。例如:一个游戏应用可以访问Facebook中的用户数据,或者基于位置的应用程序可以访问Foursquare应用程序的用户数据( user data )等。 OAuth 2.0被用于通过应用程序共享数据的示例如上图。 首先用户进入游戏的web应用,该应用要求用户通过Facebook账户登录,并定向到Facebook的登录界面,用户登录Facebook后,会重定向到之前的游戏应用。此时该应用就访问到了用户在Facebook的用户数据以及授权信息,并代表用户在Facebook中调用功能(例如发布状态更新)。 OAuth 2.0 用例 OAuth 2.0既可以用于在某个应用内访问其它应用的用户信息(比如上例中的游戏应用),又可以提供用户授权服务供其它应用调用(比如上例中的Facebook)。 OAuth 2.0是OAuth 1.0的替代,因为OAuth 1.0太复杂了,比如OAuth 1.0要求使用证书等。OAuth 2.0更加简单,不要求使用证书,仅使用SSL/TLS。 OAuth 2.0 规范 这个教程的目的是提供一个OAuth 2.0协议的概览以帮助理解,而不是涵盖此协议的所有细节。 如果你计划实现一个OAuth 2.0协议,最好是去阅读规范的详细内容,规范的地址:http://tools.ietf.org/html/draft-ietf-oauth-v2-23 OAuth 2.0 概述 在之前的介绍中我们提到,OAuth 2.0是一个开放标准,其允许某个应用程序访问其它应用程序的用户授权的数据。现在我们来介绍这个协议是如何工作的,以及规范中提到的各种概念。 OAuth 2.0 提供了不同的方式使得客户端应用获得权限去访问存储在资源服务器中的资源。现在介绍其中最安全和最常用的使用方式: 一个web应用请求访问另一个web应用 的资源。 下面的示例图描述了整个认证过程: 首先,用户访问客户端Web应用程序,在这个应用程序里有“通过Facebook登录”(或谷歌或Twitter等其他系统)的按钮。 第二步,当用户点击这个按...

跨域资源共享(CORS)

图片
跨域资源共享CORS,指的是a.com中的某个页面假设为test.html使用了XMLHttpRequest API或者fetch API去跨域访问b.com中的资源,而b.com中的资源没有设置响应头部access-control-allow-origin,则无法跨域访问成功。 场景: 在本地开启两个http服务,server1监听在8888,server2监听在8887。server1服务中有test.html文件 1:server1服务中的test.html使用XMLHttpRequest访问127.0.0.1:8887 test.html的内容如下: <script> var xhr = new XMLHttpRequest() xhr.open('GET', "http:// 127.0.0.1:8887 ") xhr.send() </script> 此时,会出现错误,因为server2没有设置响应头部 Access-Control-Allow-Origin ,如果此时server2在响应头部中加入 Access-Control-Allow-Origin:'*',则不会出现错误,因为设置成这样就表示server2允许任何来源的域来访问自己的资源。 如果此时server2在响应头部中加入 Access-Control-Allow-Origin:'http://google.com' ,则表示server2只允许google.com来访问自己的资源,此时 test.html访问server2就会出错。 2: server1服务中的test.html使用如下方式访问127.0.0.1:8887 test.html的内容如下: <scripts src='http:// 127.0.0.1:8887 '></script> 此时,server2 在响应头部中加入 Access-Control-Allow-Origin:'*'或者不加入都不会出现错误。 3: server1服务中的test.html使用如下方式访问127.0.0.1:8887 test....