BLOG
Enjoy when you can, and endure when you must.
APR 04, 2014/编程相关
OAuth2:客户端证书授权(Client Credentials)类型的开放授权
适应范围 认证服务器不提供像用户数据这样的重要资源,仅仅是有限的只读资源或者一些开放的API。例如使用了第三方的静态文件服务,如Google Storage或Amazon S3。这样,你的应用需要通过外部API调用并以应用本身而不是单个用户的身份来读取或修改这些资源。这样的场景就很适合使用客户端证书授权。 流程剖析 1. 用客户端证书交换访问令牌 应用程序需要向认证服务器申请访问令牌,而该请求则需要客户端证书进行认证。 假设现在我们正在折腾facebook,其认证URL为: https://graph.facebook.com/oauth/ac...
APR 02, 2014/编程相关
OAuth2:客户端验证授权(Resource Owner Password)类型的开放授权
适用范围 这种模式会直接将用户密码暴露给应用程序,因此应谨慎使用。一般说来,只有信任度极高的客户才应授权使用该模式,如官方移动应用、操作系统或高权限程序。 流程剖析 为了阐述该授权类型的认证过程,我们以Salesforce中基于REST的API为例进行说明。 1. 向用户索要认证信息 首先,我们必须得让用户将认证信息提供给应用程序。对于Salesforce来说,如果用户处于不可信的网络中时,除了需要输入用户名和密码外,还需要用户提供一个安全令牌作为用户的第三个输入。 2. 交换访问令牌 这里的访问令牌交换过程与授权码类型的验证授权(aut...
MAR 31, 2014/编程相关
OAuth2:隐式授权(Implicit Grant)类型的开放授权
适用范围 仅需临时访问的场景 用户会定期在API提供者那里进行登录 OAuth客户端运行在浏览器中(Javascript、Flash等) 浏览器绝对可信,因为该类型可能会将访问令牌泄露给恶意用户或应用程序 流程剖析 1. 让用户明白所做的操作并请求认证 这一步与授权码认证模式中的操作类似,即当牵涉到OAuth认证时,应首先让用户明确该操作。然后将用户引导至授权页面。 该授权接口的URL会在开发者文档中给出,以谷歌为例: https://accounts.google.com/o/oauth2/auth 在请求该页面时还需附带...
MAR 30, 2014/编程相关
OAuth2:授权码(Authorization Code)类型的开放授权
适用范围 需要得到长期授权 OAuth客户端是Web应用服务器 OAuth访问令牌不宜泄露给用户的环境 流程剖析 1. 让用户明白所做的操作并请求认证 当牵涉到OAuth认证时,首先应最好能更进一步的让用户知道该操作到底会发生什么。在用户确认之后,这时应用应将用户引导至OAuth认证页面。在该页面中,API提供者会向用户说明应用会授权访问用户数据。 该授权接口的URL会在开发者文档中给出,以谷歌为例: https://accounts.google.com/o/oauth2/auth 在请求该页面时还需附带几个参数: c...
MAR 28, 2014/编程相关
OAuth2:Authorization Flows
OAuth2.0协议定义了用于获得授权的四种主要授权类型。Authorization code标准的Server授权模式,非常适合Server端的Web应用。一旦资源的拥有者授权访问他们的数据之后,他们将会被重定向到Web应用并在URL的查询参数中附带一个授权码(code)。在客户端里,该code用于请求访问令牌(access_token)。并且该令牌交换的过程是两个服务端之前完成的,防止其他人甚至是资源拥有者本人得到该令牌。另外,在该授权模式下可以通过refresh_token来刷新令牌以延长访问授权时间。Implicit Grant该模式是所有授权模式中最简单的一种,并为运行于浏览器...
JAN 21, 2014/后端开发与架构
twisted异步之路:Deferred(二)
我们已经尝试玩了下Deferreds(什么?不知情?快去看看《twisted异步之路:Deferred(一)》)。接下来就应该来点更为实际的,那就是放进Reactor。先来看一个例子: from twisted.internet import reactor, defer class HeadlineRetriever(object):     def processHeadline(self, headline):    &nb...
JAN 20, 2014/后端开发与架构
twisted异步之路:Deferred(一)
回调是事件驱动编程中的基础,反应堆(reactor)会通过回调将事件分派到对应的应用中。我们必须时刻处理正确以及错误的情况,而当程序逐渐增大,这将会变得异常复杂,一旦发生疏忽可能导致程序阻塞甚至崩溃。好在Twisted为我们提供了一个强大的抽象层来管理回调,它被称之为Deferred。 Deferred能帮助你编写异步代码,但并不是为自动生成异步或无阻塞的代码!要想将一个同步函数编程异步函数,必须在函数中返回Deferred并正确注册回调。 Deferred对象结构 Deferred由一系列成对的回调链组成,每一对都包含一个用于处理成功的回调(callbacks)和一个...
JAN 15, 2014/编程相关
MetroCleaner
前两天写了一个Python脚本来清除Metro应用的缓存,不过如果再写一个GUI界面来操作,那使用上肯定会更加方便。既然想到了那就做到!于是玩了下已经很久没用的PyQt。 现在已经是PyQt5了,不过因为时间关系,我并未关注过多的新特色。只是在使用中发现改变了很多东西,包括库文件,信号的处理方式。还好有一些底,思维还能转换过来,哈哈。 代码上就不多说了,逻辑啥的都很简单,感兴趣的朋友可以点击这里到我的github围观。 我还封装了exe,经常使用Metro应用的童鞋欢迎试用一下,点击这里下载。
JAN 03, 2014/后端开发与架构
初识Twisted:Reactor、Transports和Protocols
最近在学习Twisted,在此归纳一些重要的概念和理念。 The Reactor Reactor是Twisted的核心,它是一个循环体,也被称为事件循环。Reactor检测各种网络、文件系统和定时事件,等待事件的发生并将其正确分配到对应的事件处理函数。Twisted本身维护了一套跨平台的行为抽象并正确使用底层的无阻塞API接口。Twisted为不同的事件源提供了一个通用的接口,以便在网络协议栈的任何地方对事件作出响应都是一件很容易的事。 Reactor通常说来会完成以下的工作: while True:     ...
JAN 02, 2014/后端开发与架构
初识Twisted:事件驱动编程
最近在学习Twisted,在此归纳一些重要的概念和理念。 事件驱动编程(Event-Driven Programming) Twisted是一个基于事件驱动的网络引擎。 在这种编程模式中,程序流程是由外部事件决定的。它的特性表现在一个事件循环以及采用回调来触发事件的相关动作。将此与其它两种常见模型进行比较应该会更益于理解,他们是单线程(同步)和多线程编程。 我们来看图说话。假如他们都需要处理三个任务,并且在进行I/O操作的时候均会发生阻塞。他们的表现形式将会如下图这样: 从左图可以看出,在单线程处理过程中,每个任务将会按顺序依次执行。当一个任务在处理...
< 1 2 3 >