有没有必要在项目里使用Oauth2,不为了技术而技术,你可能并不需要 OAuth2

OAuth2 是一个关于 授权 (Authorization)的网络标准,在网上已经有大量的资料来解释,本文不再详细解释原理和规范的详情。关于 Authorization 和 Authentication 的区别之后会写另外一篇文章来分析。在此仅列两个比较优质的解释 OAuth2 原理的文章:

尽管如此,这里还是描述一下 OAuth2 的使用场景,以便约定和明确一下角色方便后面叙述。

角色

  • A (twitter): 托管内容、搭建 OAuth2 服务、提供第三方登录接入;
  • C: twitter 的用户,在 twitter 网站上产生内容;
  • B1 (medium.com): 希望 C 用 twitter 账号来登录自己的网站,并且希望获得 C 的 twitter 头像和用户名等基本信息;
  • B2 (buffer.com): 希望 C 用 twitter 账号登录 buffer.com 并编写内容然后直接发布到 twitter
  • B3 (twitterrific): twitter 的第三方 iOS 客户端

使用场景

用户 C 想要用自己的 twitter 的账号登录 medium.com,或者想用 buffer.com 来管理 twitter 的内容,或者想用 twitterrific 来刷推。但是这三个情况 用户 C 都不希望把自己的 twitter 用户名和密码直接交给 B,而是希望 twitter 和 B 之间通过某种协商,给 B 相应的权限。

需要多少权限是 B 在 twitter 的开放平台上设置的,是不是把这些权限(或者给部分权限)给 B 是用户 C 自己决定的,而且这个决定的操作(授权)是在 twitter 的网站或者官方 APP 里进行的。

在用户觉得某个 B 不值得信任的时候,在 twitter 的账号管理界面可以撤销对它的授权。或者当 twitter 发现某个 B 有违规操作的时候,可以完全禁止 B 获得授权。

OAuth2 就能满足以上的授权需求。

搭建 OAuth2 服务(担任 A)

什么时候需要自己搭建 OAuth2 服务呢?一般来说两种情况:

  • 作为 twitter、Facebook、微信、QQ 这种有完善的用户系统、在互联网占到了基础设施级别的用户量,开放给其他网站做社交媒体登录;
  • 作为 reddit 这种论坛网站,或者微博、twitter 这种社交媒体,开放给第三方开发客户端或者扩展应用。这种网站的特点是:本身是功能比较丰富,

接入 OAuth2 服务(担任 B)

什么时候需要接入别人提供的 OAuth2 服务呢?跟上面的担任 A 相对应的两种情况:

  • 自己的网站想要用户使用 twitter、Facebook、微信、QQ 来登录,让用户跳过繁琐的注册过程,提高转化率;
  • 想要为 reddit、微博、twitter 之类的网站开发客户端或者扩展应用。

不需要 OAuth2 的场景

总的来说,任何用来做 认证(Authentication)的场景都不适合用 OAuth,比如:

  • 只有一套用户系统的时候:用常规的用户名密码模式或者联合身份等就够了。
  • 有多套用户系统,但是这个数量是有限的而且是受控制的,比如同一家公司的几个子产品之间有不同的用户系统,但是希望能把这些用户打通:这就是典型的 Single Sign On 的应用场景。
要实现Java客户端使用OAuth2进行访问,首先需要了解OAuth2的基本原理和流程。OAuth2是一种授权协议,用于在不直接暴露用户密码的情况下,授权第三方应用程序访问受保护资源。以下是使用Java客户端实现OAuth2访问的一般步骤: 1. 注册OAuth2客户端:在目标服务提供商的开发者平台上注册一个OAuth2客户端,并获取到客户端ID和客户端秘钥等必要信息。 2. 构建授权URL:使用客户端ID、授权范围和重定向URL等信息构建授权URL。用户将被重定向到此URL以进行用户身份验证和授权。 3. 用户授权:用户在浏览器中访问授权URL,并根据需要提供登录凭据和授权选项。认证成功后,用户将被重定向回重定向URL。 4. 获取访问令牌:在重定向URL中,从认证服务器接收授权代码(authorization code)。使用授权代码向认证服务器发送请求以获取访问令牌。 5. 访问受保护资源:使用获得的访问令牌作为身份验证标识,向受保护资源的API发送请求,获取受保护资源的数据。 在Java中实现以上步骤,可以使用第三方库来简化开发流程,例如Spring Security、Apache Oltu等。这些库提供了OAuth2的相关实现类和工具方法,可以轻松地完成OAuth2的认证和访问流程。 在实现过程中,需要编写Java代码来构建授权URL、处理重定向URL、发送获取访问令牌的请求,并使用获得的访问令牌来访问和处理受保护资源。具体实现过程和代码细节,可以参考相关OAuth2库的文档和示例代码。 总之,Java客户端实现OAuth2的访问需要了解OAuth2的基本原理和流程,并使用相关的第三方库来简化开发过程。通过正确实现OAuth2的认证和访问流程,可以实现安全和授权的API访问。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值