1. 前言

在使用 OAuth2.0Authorization Server (授权服务器)是一个回避不了的设施,在大多数情况下我们调用的是一些知名的、可靠的、可信任的第三方平台,比如 QQ、微信、微博、github 等。我们的应用只作为 Client 进行注册接入即可。也就是说我们只需要实现 OAuth2.0 客户端的逻辑就可以了,无须关心授权服务器的实现。然而有时候我们依然希望构建自己的 Authorization Server。我们应该如何实现?今天不会讨论具体的技术细节,来谈谈 OAuth2.0 的技术选型。

2. Spring Security OAuth2 现状

在做 Spring Security 相关教程 的时候首先会考虑 Spring 提供的 OAuth2.0 功能。当我去 Spring 官网了解相关的类库时发现居然 SpringOAuth2.0 类库即将过期的通知,有图有真相:

总结以下就是 Spring Security OAuth 的模块即将过期,后续的功能已经迁移到 Spring Security 5.2.x 中,但是不会再提供 Authorization Server 的功能。 在官方声明中还提到, 当前 Spring Security OAuth 分支是 2.3.x2.4.x2.3.x版本将于 2020 年 3 月寿命终止。我们将在达到功能均等后至少一年支持 2.4.x 版本。因此鼓励用户开始将其旧版 OAuth 2.0 客户端和资源服务器应用程序迁移到Spring Security 5.2 中的新支持。详细参见 官方博客.

3. 对 OAuth2.0 的技术选型

从上面的信息看来, Spring Security 未来依然提供 OAuth2客户端支持资源服务器支持授权服务器 将逐渐退出 Spring Security 的生态环境。所以如果没有授权服务器需求的情况下选择 Spring Security 依然是没有问题的,一旦有这个需求我们该如何选择?我这里调研了几个开源免费的项目。

3.1 keycloak

keycloakRedHat 公司出品。是一个致力于解决应用和服务身份验证与访问管理的开源工具。可以通过简单的配置达到保护应用和服务的目的。它提供了身份和访问管理的有用功能:

  • 单点登录(SSO),身份代理和第三方登录。
  • 支持 OpenID ConnectOAuth 2.0SAML 2.0 等标准协议。
  • 用户集中管理。
  • 客户端适配器,轻松保护应用程序和服务。
  • 可视化管理控制台和帐户管理控制台。
  • 可扩展性、高性能、快速实现落地。

文档比较完毕,而且是一个成熟的、免费的商业级产品。

3.2 Nimbus SDK

全称是 Nimbus OAuth 2.0 / OpenID Connect SDK,这是一个类库。Spring 官方在博客中提到可以使用该类库构建 Authorization Server,它同时支持 OAuth2.0OpenID Connect,比较完整地实现了这两个协议,而且针对补充协议也在积极的跟进。缺点在于中文教程不多而且是一个类库性质的。不过官方提供了 DEMO ,有能力的同学入门也不算难事。

3.3 Apache Oltu

Apache Oltu 是 Apache 基金会旗下的一个毕业项目。提供了 OAuth2.0 的常用实现,根据文档提供的信息来看上手还是比较简单的,模块化的提供了对 Authorization Server、Resource Server、Client、JOSE、 的支持。中文教程网上还是有不少的,缺点在于项目维护比较滞后,最新的版本是 2016 年发布的。

3.4 Vertx-auth-oauth2

vertx-auth-oauth2 属于 Vert.x 生态,提供了比较完整的 OAuth2.0 实现,而且项目维护比较活跃,唯一的缺点在于有技术栈的局限性。

4. 总结

针对 Java 的一些 OAuth2.0 技术选型参考就是上面几个了。不知道你会选择哪一个? 我在公众号:Felordcn 发起了一个关于 OAuth2.0 技术选型的投票,希望你能够参与。投票传送门【复制链接到微信中打开投票】

投票:OAuth2.0 技术选型你会怎么选的更多相关文章

  1. 构建NetCore应用框架之实战篇(四):BitAdminCore框架1.0登录功能细化及技术选型

    本篇承接上篇内容,如果你不小心点击进来,建议从第一篇开始完整阅读,文章内容继承性连贯性. 构建NetCore应用框架之实战篇系列 一.BitAdminCore框架1.0版本 1.1.0版本是指最小版本 ...

  2. 点菜网---Java开源生鲜电商平台-技术选型(源码可下载)

    点菜网---Java开源生鲜电商平台-技术选型(源码可下载) 1.内容简介 点菜网目前选用的是最流行的微服务架构模式,采用前后端分离的开发模式,具备高可用,高负载,支持千万级别的数据量的请求. 2. ...

  3. 一口气说出 OAuth2.0 的四种鉴权方式,面试官会高看一眼

    本文收录在个人博客:www.chengxy-nds.top,技术资源共享,一起进步 上周我的自研开源项目开始破土动工了,<开源项目迈出第一步,10 选 1?页面模板成了第一个绊脚石 > , ...

  4. 妹子始终没搞懂OAuth2.0,今天整合Spring Cloud Security 一次说明白!

    大家好,我是不才陈某~ 周二发了Spring Security 系列第一篇文章,有妹子留言说看了很多文章,始终没明白OAuth2.0,这次陈某花了两天时间,整理了OAuth2.0相关的知识,结合认证授 ...

  5. SimpleSSO:使用Microsoft.Owin.Security.OAuth搭建OAuth2.0授权服务端

    目录 前言 OAuth2.0简介 授权模式 (SimpleSSO示例) 使用Microsoft.Owin.Security.SimpleSSO模拟OpenID认证 通过authorization co ...

  6. 深入理解OAuth2.0协议

    1. 引言 如果你开车去酒店赴宴,你经常会苦于找不到停车位而耽误很多时间.是否有好办法可以避免这个问题呢?有的,听说有一些豪车的车主就不担心这个问题.豪车一般配备两种钥匙:主钥匙和泊车钥匙.当你到酒店 ...

  7. 老王讲自制RPC框架.(一.前言与技术选型)

    (#)背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时,只 ...

  8. Microsoft.Owin.Security.OAuth搭建OAuth2.0授权服务端

    Microsoft.Owin.Security.OAuth搭建OAuth2.0授权服务端 目录 前言 OAuth2.0简介 授权模式 (SimpleSSO示例) 使用Microsoft.Owin.Se ...

  9. 微信公众平台开发(71)OAuth2.0网页授权

    微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者:方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使 ...

随机推荐

  1. C# Brush Color String 互相转换

    using System.Windows.Media; //String转换成Color Color color = (Color)ColorConverter.ConvertFromString(s ...

  2. jquery tab点击切换的问题

    问题: 页面结构见下 <div id="wrap"> <li> <a href="#" class="active&qu ...

  3. ip2long与long2IP 分析

    <?php $ip='47.93.97.127'; $long=sprintf("%u",ip2long($ip));//string(9) "794648959& ...

  4. 小程序clearinterval无效解决

    小程序clearinterval无效解决 小程序clearinterval清除定时器无效,原因是定时器使用与清除方法不对导致的,我们应将定时器绑定变量,这样在关闭页面清空定时器clearinterva ...

  5. 洛谷P2486 [SDOI2011]染色 题解 树链剖分+线段树

    题目链接:https://www.luogu.org/problem/P2486 首先这是一道树链剖分+线段树的题. 线段树部分和 codedecision P1112 区间连续段 一模一样,所以我们 ...

  6. docker swarm搭建tidb踩坑日记

    背景 公司新项目数据量翻了一倍,每天上亿数据量的读写,传统的单库单表已经满足不了目前的需求,得考虑下分布式存储了.那用啥呢,之前有考虑用到mycat,但是一进官网,一股山寨气息扑面而来,技术群进群还收 ...

  7. 模板——Treap实现名次树

    Treap 是一种通过赋予结点随机权值的一种满足堆性质的二叉搜索树,它很好的解决了二叉搜索树顺序插入组成链式的局限性. 名次树是指在treap的每个结点中添加附加域size,表示以它为根的子树的总结点 ...

  8. H5 拖拽元素

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. mysql导入文件出现Data truncated for column 'xxx' at row 1的原因

    mysql导入文件的时候很容易出现"Data truncated for column 'xxx' at row x",其中字符串里的xxx和x是指具体的列和行数. 有时候,这是因 ...

  10. java Io流的应用

                                                                         标准输入输出流 1.1标准输入流 源数据源是标准输入设备(键盘 ...