Week15 - 用NestJS整合Line Login,一个基于OAuth2.0的OpenID Connect系统 -

本文章同时发布于:

MediumiT邦帮忙

大家好,众所皆知JavaScript是非常弹性而强大的语言,可以快速的替自己打造一个灵活的Server。但也因为这样,导致:

一个框架,给不同的工程师使用,每位写的都是不同的Style

这使得每个专案的测试、建立Model的方式、MVC的架构都不大相同,最后每次接管专案都是一个新的学习,明明都是同个框架啊!所以:

是否有一个Solution可以规範各个主流技术的逻辑分层

就变为了需求,而NestJS的框架,就是为了这个而生。

NestJS基于Express.js或是Fastify.js,使用TypeScript,并受到Angular等前端框架启发,整体的架构非常清晰,并且对于GraphQL、gRPC、Redis、MQTT、NATS、RabbitMQ等等技术都有完整的Solution,甚至在External API的请求上也支援RxJS。

他的目标是希望让后端也有一个「可测试、弹性高、可维护、结构佳」的框架,总而言之真的是让我非常兴奋的框架XD。

所以接下来几篇文章会透过Line Login的整合来介绍NestJS。

这篇文章会讨论

Line LoginOAuth2.0的Authorization Code模式与OpenID Connect

Line Login

大家应该有在一些网站看到可透过「FB、Google、Line」来注册登入的方式,如此一来,就不用在自己注册一个帐号,使得自己还要多记一个帐号,用Line注册就可以一个Line帐号走遍各个网站。

但你有想过这个背后的运作原理吗?实际上并不複杂,就是:

小明在A网站上透过Line LoginLine API会发放就像身分证的小明OpenID给A网站A网站拿到这个OpenID就将它记录在资料库中,他就会代表小明这个帐号的识别码之后透过Line Login,Server只要发现是小明的OpenID,就会判断为小明

OAuth2.0与OpenID Connect

OAuth2.0是一种「资源授权 - Authorization」的方案,他有四种授权方式,分别为:

Authorization CodeImplicitPasswordClient Credentials

Authorization Code为安全性最高也较常见的一种,而其他三种不是Line Login的方式,所以暂不讨论XD。

OAuth2.0 - Authorization Code流程

整体了流程详细可以RFC 6749 - 4.1章节,但第一次看这么详细的介绍可能会让人雾散散(就跟我一样XD)。我们可以用以下简单的图来解释:

最大的关键点在「输入帐号密码时,被导倒了Line 认证网站,认证成功之后再将成功资讯带回某网站后端来请求access token」。

如此一来,某网站后端在使用Line的资源时,就不会直接用Line帐号密码来存取资源,而是接触经过「Line 认证网站」认证过后的「验证成功资讯」来存取资源。

基于OAuth2.0而生的OpenID Connect

大家可能会发现,刚刚说的Authorization Code流程都只有提到「存取资源」,没错,其实OAuth2.0一开始的设计是为了授权而产生,你可以用透过OAuth2.0取得的access token来请使用者照片、使用者文章、使用者生日等等此使用者的资源。

但要「身份认证 - Authentication」怎么办呢?OpenID Connect(简称OIDC)就是为了解决此问题,他基于OAuth2.0的流程,并添加了对Line来说就像是身分证的OpenID connect资讯与access token一起回传,

可以发现,除了红色匡起来的部分,其他都与OAuth2.0的Authorization Code认证相同。

所以,你可以很单纯的把OAuth2.0与OpenID Connect做以下区分

OAuth2.0的access token: 为「资源授权 - Authorization」,是用来取得使用者的相关资源,例如照片、文章、生日等等。基于OAuth2.0而生的OpenID Connect: 为「身份认证 - Authentication」,使用OAuth2.0的流程来产生像身分证的ID,用来代表此使用者。

探讨完了Line Login的原理后,接下来几篇文章就会开始NestJS的实作部分,再请大家多多指教。

谢谢你的阅读,也欢迎分享讨论~最后附上家人为NestJS所画的吉祥物图XD。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章