资源拥有者者密钥证书授权包含单个的请求+响应。 资源拥有者密钥证书授权请求 请求包含下面的参数:grant_type必须。必须设置到密码中。username必须。UTF-8编码的资源拥有者用户名。password必须。UTF-8编码的资源拥有者密码。scope可选。授权的作用域。资源拥有者密钥证书授权响应响应是包含访问令牌的JSON结构数据。
契约授权包含一个请求和一个响应。 契约授权请求 契约授权请求包含下面的参数:response_type必须。必须被设置在令牌中。client_id必须。当客户端被注册时,有授权服务器分配的客户端标识。redirect_uri可选。由客户端注册的重定向URI。scope可选。请求可能的作用域。state可选(推荐)。任何需要被传递到客户端请求的URI客户端的状态。
授权码授权总共由2个请求和2个响应组成。一个授权请求+响应,和一个令牌请求+响应。 授权请求 授权请求被发送到授权端点以获取一个授权码。这是请求中用到的参数:response_type必须。必须被设置到代码里client_id必须。当客户端被注册时,授权服务器要标识的客户端。redirect_uri可选。通过客户端注册的重定向URI。scope可选。请求可能的作用域。
当客户端应用请求授权和访问令牌时,它发送http请求到授权服务器,同它的授权和令牌端点。被发送来回的请求和响应取决于授权类型。记住,这四种授权类型:授权码授权契约授权资源拥有者密钥证书授权客户端证书授权每一种授权类型的请求和响应的更多细节将在下文分开地阐释。然而,下面讲述的信息大多只是一个总结。
OAuth 2.0定义了一系列端点。端点典型的就是web服务器上的URI。比如,一个Java Servlet, JSP page, PHP page, ASP.NET网页等等。这些端点定义有:授权端点令牌端点重定向端点授权端点和令牌端点都位于授权服务器上,重定向端点位于客户端应用上。每个端点都会在下面讲述。这些端点在下图中阐释为:OAuth 2.0端点OAuth 2.0规范没有描述这些端点怎么被发现或记录。
当一个客户端应用想要访问拥有者托管在资源服务器的资源时,它必须先获得授权,本节将讲述客户端如何获取授权。客户端标识,客户端密钥和重定向URI在客户端应用能请求访问资源服务器的资源之前,客户端应用程序,必须先在资源服务器相关联的授权服务器中进行注册。注册一个一次性的任务。一旦注册了,除非客户端注册被取消了,注册将持续有效。
OAuth 2.0客户端角色被细分为一系列类型和配置,本节将阐述这些类型和配置。OAuth 2.0规范定义了两种客户端类型:保密的公有的保密的客户端能够对外部保持客户端密码保密。该客户端密码是由授权服务器分配给客户端应用的。为了避免欺骗,该密码是授权服务器用来识别客户端的。例如一个保密的客户端可以是web应用,除了管理员,没有任何人能够访问服务器和看到该密码。
OAuth 2.0为用户和应用定义了如下角色:资源拥有者资源服务器客户端应用授权服务器这些角色在下图中表示为:OAuth 2.0规范中的角色定义资源拥有者是指拥有共享数据的人或应用。比如Facebook或者Google的用户就是是资源拥有者,他们拥有的资源就是他们的数据。资源拥有者在上图中被描述为人,这也是最常见的情况。但资源拥有者也可以是一个应用。OAuth 2.
如引言所说的,OAuth 2.0是一个能够使应用彼此访问数据的开放授权协议,这里我们将阐述该协议是怎么工作的以及规范中提到的概念。该图说明了整个授权过程:OAuth 2.0怎样被用来在应用间共享数据的例子第一步,用户访问客户端web应用。应用中的按钮”通过Facebook登录”(或者其他的系统,如Google或Twitter)。
OAuth 2.0是一个应用之间彼此访问数据的开源授权协议。比如,一个游戏应用可以访问Facebook的用户数据或者一个基于地理的应用可以访问Foursquare的用户数据等。下面是一张阐述该概念的图:OAuth 2.0怎么通过应用共享数据的例子用户访问web游戏应用,该游戏应用要求用户通过Facebook登录。
OAuth 2.0 是目前比较流行的做法,它率先被Google, Yahoo, Microsoft, Facebook等使用。之所以标注为 2.0,是因为最初有一个1.0协议,但这个1.0协议被弄得太复杂,易用性差,所以没有得到普及。2.0是一个新的设计,协议简单清晰,但它并不兼容1.0,可以说与1.0没什么关系。致谢内容翻译:http://ifeve.
在下面的三个练习中你会创建一个项目的目录框架,用于构建之后的C程序。这个目录框架会在这本书中剩余的章节中使用,并且这个练习中我会涉及到Makefile便于你理解它。这个结构的目的是,在不凭借配置工具的情况下,使构建中等规模的程序变得容易。如果完成了它,你会学到很多GNU make和一些小型shell脚本方面的东西。
你已经学到了大多数C语言的基础,并且准备好开始成为一个更严谨的程序员了。这里就是从初学者走向专家的地方,不仅仅对于C,更对于核心的计算机科学概念。我将会教给你一些核心的数据结构和算法,它们是每个程序员都要懂的,还有一些我在真实程序中所使用的一些非常有趣的东西。在我开始之前,我需要教给你一些基本的技巧和观念,它们能帮助你编写更好的软件。
这本书你已经完成一半了,所以你需要做一个期中检测。期中检测中你需要重新构建一个我特地为本书编写的软件,叫做devpkg。随后你需要以一些方式扩展它,并且通过编写一些单元测试来改进代码。注我在一些你需要完成的练习之前编写了这个练习。如果你现在尝试这个练习,记住软件可能会含有一些bug,你可能由于我的错误会产生一些问题,也可能不知道需要什么来完成它。
在C语言中,你可以通过创建“变参函数”来创建你自己的printf或者scanf版本。这些函数使用stdarg.h头,它们可以让你为你的库创建更加便利的接口。它们对于创建特定类型的“构建”函数、格式化函数和任何用到可变参数的函数都非常实用。理解“变参函数”对于C语言编程并不必要,我在编程生涯中也只有大约20次用到它。
你已经学会了使用printf来打印变量,这非常不错,但是还需要学习更多。这个练习中你会用到fscanf和fgets在结构体重构建关于一个人的信息。在这个关于读取输入的简介之后,你会得到C语言IO函数的完整列表。其中一些你已经见过并且使用过了,所以这个练习也是一个记忆练习。#include <stdio.h>#include "dbg.
这个练习是一个脑筋急转弯,我会向你介绍最著名的C语言黑魔法之一,叫做“达夫设备”,以“发明者”汤姆·达夫的名字命名。这一强大(或邪恶?)的代码中,几乎你学过的任何东西都被包装在一个小的结构中。弄清它的工作机制也是一个好玩的谜题。注C的一部分乐趣来源于这种神奇的黑魔法,但这也是使C难以使用的地方。
许多人在开始编程时,对“作用域”这个概念都不是很清楚。起初它来源于系统栈的使用方式(在之前提到过一些),以及它用于临时变量储存的方式。这个练习中,我们会通过学习站数据结构如何工作来了解作用域,然后再来看看现代C语言处理作用域的方式。这个练习的真正目的是了解一些比较麻烦的东西在C中如何存储。
这个练习是C语言中所有可用的数据类型和控制结构的摘要。它也可以作为一份参考在补完你的知识,并且不含有任何代码。我会通过创建教学卡片的方式,让你记住一些信息,所以你会在脑子里记住所有重要的概念。这个练习非常有用,你应该花至少一周的时间来巩固内容并且补全这里所没有的元素。你应学出每个元素是什么意思,以及编写程序来验证你得出的结论。
在C中有一个永恒的问题,它伴随了你很长时间,然而在这个练习我打算使用一系列我开发的宏来解决它。到现在为止你都不知道它们的强大之处,所以你必须使用它们,总有一天你会来找我说,“Zed,这些调试宏真是太伟大了,我应该把我的第一个孩子的出生归功于你,因为你治好了我十年的心脏病,并且打消了我数次想要自杀的念头。
关注时代Java