OAuth教程--准备工作

Author Avatar
Sean Yu 7月 13, 2018
  • 在其它设备中阅读本文章

本文是oauth.com上的教程的翻译。(原文地址

前言:

最近在看SSO相关的内容,发现自己对OAuth2.0只是一知半解,阮一峰的文章不错,但是真正用在开发上就远远不够了,于是决定花点时间翻译一下www.oauth.com上的教程,加深理解。

我真是无语了,文档翻译到一半的时候,oauth.com更新了,醉了醉了,白翻译了十八个章节。

在本书的第一部分中,我们将介绍在构建与现有OAuth 2.0 API对话的应用程序时需要了解的内容。无论您是构建网络应用程序还是移动应用程序,在开始使用时都需要记住一些事项。

每个OAuth 2.0服务都要求您首先注册一个新应用程序,这通常还要求您首先注册为该服务的开发人员。

创建应用程序

注册过程通常涉及在服务的网站上创建一个帐户,然后输入有关应用程序的基本信息,如名称,网站,logo等。注册申请后,您将获得client_id(在某些情况下也有client_secret),当您的应用与服务互动时,您将使用它们。

创建应用程序时最重要的事情之一是注册应用程序将使用的一个或多个重定向URL。重定向URL是OAuth 2.0服务在应用程序授权之后,将用户返回的位置。注册这些是至关重要的,否则很容易创建可以窃取用户数据的恶意应用程序。本书稍后将对此进行更详细的介绍。

重定向网址和状态

OAuth 2.0 API仅将用户重定向到已注册的URL,以防止攻击者拦截授权码或访问令牌的重定向攻击。某些服务可能允许您注册多个重定向URL,这在Web应用程序和移动应用程序使用相同的客户端ID、或者在开发和生产服务中使用相同的客户端ID时,将为开发者提供帮助。

为了安全起见,重定向URL必须是https端点,以防止在授权过程中拦截代码。如果您的重定向URL不是https,则攻击者可能能够拦截授权代码并使用它来劫持会话。如果服务允许使用非https重定向,则必须采取额外的预防措施以确保无法进行此类攻击。

大多数服务将重定向URL验证视为完全匹配。这意味着重定向网址https://example.com/auth不匹配https://example.com/auth?destination=account。最佳做法是避免在重定向URL中使用查询字符串参数,并使其仅包含路径。

某些应用程序可能有多个他们想要启动OAuth进程的位置,例如主页上的登录链接以及查看某些公共项目时的登录链接。对于这些应用程序,尝试注册多个重定向URL可能很诱人,或者您可能认为需要能够根据请求更改重定向URL。但请不要这么做,因为OAuth 2.0为此提供了一种机制,即“state”参数。

“state”参数可以用于任何你想要的服务,它是一个对OAuth 2.0服务不透明的字符串。在用户授权应用程序后,将返回您在初始授权请求期间传递的state值。其中一个常见的应用场景是包括一个随机字符串来防止CSRF攻击。您还可以使用JWT之类的技术对重定向URL进行编码,并在用户重定向回应用程序后对其进行解析,以便您在登录后将用户带回适当的位置。