![](/contact/xiaochengxu.jpg)
![](/contact/xiaohongshu.jpg)
从0开始构建一个Oauth2Server服务1
我们将介绍在构建与现有 OAuth 2.0 API 对话的应用程序时需要了解的事项。无论您是构建 Web 应用程序还是移动应用程序,在我们开始时都需要牢记一些事项。
每个 OAuth 2.0 服务都需要您首先注册一个新应用程序,这通常还需要您首先注册为该服务的开发人员。
创建应用程序
注册过程通常涉及在该服务的网站上创建一个开发者帐户,然后输入有关该应用程序的基本信息,例如名称、网站、icon等。注册该应用程序后,您将获得一个(在某些情况下是client_id
一个client_secret
)当您的应用程序与服务交互时,您将使用它。
创建应用程序时最重要的事情之一是注册一个或多个应用程序将使用的重定向 URL。重定向 URL 是 OAuth 2.0 服务在授权应用程序后将用户返回到的位置。注册这些内容至关重要,否则很容易创建可以窃取用户数据的恶意应用程序。
重定向 URL 和状态
OAuth 2.0 API 只会将用户重定向到之前在该服务中注册的 URL,以防止攻击者拦截授权代码或访问令牌的重定向攻击。某些服务可能允许您注册多个重定向 URL,当您的 Web 应用程序可能在几个不同的子域上运行时,这会有所帮助。
为了安全起见,重定向 URL 必须是 https 端点,以防止授权代码在授权过程中被拦截。如果您的重定向 URL 不是 https,则攻击者可能能够拦截授权代码并使用它来劫持会话。一个例外是在localhost上运行的应用程序,例如本机桌面应用程序,或者在进行本地开发时。然而,即使规范允许此例外,您遇到的某些 OAuth 服务可能仍然需要 https 重定向 URL。
OAuth 服务应该寻找与重定向 URL 完全匹配的内容。这意味着 的重定向 URLhttps://example.com/auth
将不匹配https://example.com/auth?destination=account
。最好避免在重定向 URL 中使用查询字符串参数,并让它只包含一个路径。
某些应用程序可能有多个它们希望从中启动 OAuth 流程的位置,例如主页上的登录链接以及查看某些公共项目时的登录链接。对于这些应用程序,尝试注册多个重定向 URL 可能很诱人,或者您可能认为您需要能够根据请求改变重定向 URL。相反,OAuth 2.0 为此提供了一种机制,即“state”参数。
“state”参数可用于对应用程序状态进行编码,但如果您不在请求中同时包含PKCE参数,则它还必须包含一定数量的随机数据。state 参数是一个对 OAuth 2.0 服务不透明的字符串,因此无论您在初始授权请求期间传入的状态值是什么,都会在用户授权应用程序后返回。例如,您可以将重定向 URL 编码为 JWT 之类的东西,并在用户重定向回您的应用程序后对其进行解析,以便您可以在用户登录后将其带回适当的位置。
请注意,除非您使用像 JWT 这样的签名或加密方法对状态参数进行编码,否则当它到达您的重定向 URL 时,您应该将其视为不受信任/未经验证的数据,因为任何人在重定向回时修改该参数都是微不足道的你的应用程序。
类似的帖子
![](/contact/xiaochengxu.jpg)
![](/contact/xiaohongshu.jpg)