如何通过 OIDC 协议实现单点登录?

本文介绍了如何通过 OIDC(OpenID Connect)协议实现单点登录(SSO)。首先,解释了单点登录的含义及其重要性,接着详细阐述了如何创建用户目录和理解 OIDC 协议。然后,通过实例展示了如何架设自己的 OIDC Provider,包括配置文件的修改和启动。此外,讲解了OIDC授权码模式,以及如何在Web应用中实现单点登录的过程。最后讨论了登录态管理,包括只退出某个应用而不退出其他应用、同时退出所有应用和不维护各个应用与用户的登录状态的情况。文章提供了相关工具和代码示例,并提到了使用 Authing 作为单点登录解决方案的选项。
摘要由CSDN通过智能技术生成

什么是单点登录

我们通过一个例子来说明,假设有一所大学,内部有两个系统,一个是邮箱系统,一个是课表查询系统。现在想实现这样的效果:在邮箱系统中登录一遍,然后此时进入课表系统的网站,无需再次登录,课表网站系统直接跳转到个人课表页面,反之亦然。比较专业的定义如下:

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。 SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

为什么要实现单点登录

单点登录的意义在于能够在不同的系统中统一账号、统一登录。用户不必在每个系统中都进行注册、登录,只需要使用一个统一的账号,登录一次,就可以访问所有系统。

通过 OIDC 协议实现单点登录

创建自己的用户目录

用户目录这个词很贴切,你的系统的总用户表就像一本书一样,书的封皮上写着“所有用户”四个字。打开第一页,就是目录,里面列满了用户的名字,翻到对应的页码就能看到这个人的邮箱,手机号,生日信息等等。无论你开发多少个应用,要确保你有一份这些应用所有用户信息的 truth source。所有的注册、认证、注销都要到你的用户目录中进行增加、查询、删除操作。你要做的就是创建一个中央数据表,专门用于存储用户信息,不论这个用户是来自 A 应用、B 应用还是 C 应用。

什么是 OIDC 协议

The OIDC family of specs and supporting specs

OIDC 的全称是 OpenID Connect,是一个基于 OAuth 2.0 的轻量级认证 + 授权协议,是 OAuth 2.0 的超集。它规定了其他应用,例如你开发的应用 A(XX 邮件系统),应用 B(XX 聊天系统),应用 C(XX 文档系统),如何到你的中央数据表中取出用户数据,约定了交互方式、安全规范等,确保了你的用户能够在访问所有应用时,只需登录一遍,而不是反反复复地输入密码,而且遵循这些规范,你的用户认证环节会很安全。

架设自己的 OIDC Provider

什么是 OIDC Provider 呢?我来举一个例子:你经常见到一些网站的登录页面上有「使用 Github 登录」、「使用 Google 登录」这样的按钮。要想集成这样的功能,你要先去 Github 那里注册一个 OAuth App,填写一些资料,然后 Github 分配给你一对 id 和 key。 此时 Github 扮演的角色就是 OIDC Provider,你要做的就是把 Github 的这种角色的行为,搬到你自己的服务器来。

在 Github 上面搜索 OIDC Provider 会有很多结果:

JS:https://github.com/panva/node-oidc-provider

Golang:https://github.com/dexidp/dex

Python:https://github.com/juanifioren/django-oidc-provider

...

不再一一列举,你需要选择适合你的编程语言的 OIDC Provider 包,然后让它在你的服务器上运行起来。本文使用 JS 语言的 node-oidc-provider。

示例代码 Github

可以在 Github 找到本文示例代码:

https://github.com/Authing/implement-oidc-sso-demo.git

创建文件夹

我们首先创建一个文件夹,用于存放代码:

$ mkdir demo
$ cd demo

克隆仓库

然后我们将 https://github.com/panva/node-oidc-provider.git 仓库 clone 到本地

$ git clone https://github.com/panva/node-oidc-provider.git

安装依赖

$ cd node-oidc-provider
$ npm install

在 OIDC Provider 申请一个 Client

上一步讲到,Github 会分配给你一对 id 和 key,这一步其实就是你在 Github 申请了一个 Client。那么如何向我们自己的服务器上的 OIDC Provider 申请一对这样的 id 和 key 呢?

node-oidc-provider 举例,最快的获得一个 Client 的方法就是将 OIDC Client 所需的元数据直接写入 node-oidc-provider 的配置文件里面。

https://i-blog.csdnimg.cn/blog_migrate/ad174a62e6dedcad99f908e65dde8c88.png

Wait wait wait,跨度有些大,这两者之间有什么关系?首先我们看,在 Github 上填写应用信息,然后提交,会发送一个 HTTP 请求到 Github 服务器。Github 服务器会生成一对 id 和 key,还会把它们与你的应用信息存储到 Github 自己的数据库里。所以,我们将 OIDC Client 所需的元数据直接写入到配置文件,可以理解成,我们在自己的数据库里手动插入了一条数据,为自己指定了一对 id 和 key 还有其他的一些 OIDC Client 信息。

修改配置文件

进入 node-oidc-provider 项目下的 example 文件夹:

$ cd ./e
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值