文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

用OAuth 2.0和OIDC实现用户身份认证与授权

2024-12-02 21:52

关注

【51CTO.com快译】目前,OAuth 2.0已是“委托授权(delegated authorization)”的一种行业标准。它能够为应用程序或客户端提供,针对其他应用服务的相关数据与功能的访问权限。当然,OAuth 2.0侧重于授权,而并非关于身份验证的规定。而OpenID Connect(OIDC)则在OAuth 2.0之上添加了一个基于标准的身份验证层。也就是说,作为身份验证框架,OIDC建立在OAuth 2.0之上。

在本文中,我们将介绍OAuth 2.0和OIDC在用于身份验证和授权方面的基础知识,并在其中涉及到两种常见的流程,即:隐式流程(Implicit Flow)和授权代码流程(Authorization Code Flow)。

OAuth 2.0入门

如前所述,OAuth 2.0是委托授权的行业标准。目前市场上有许多OAuth的提供商,以及典型的使用场景。例如,“使用Facebook登录”按钮,就是通过采用OAuth 2.0,实现了对于各种网络和移动应用的支持。下面,我们将对此进行深入的讨论。

先决条件

首先,应用程序和客户端都必须完成这授权服务器上的注册。而在注册的过程中,aclient_id和client_secret会相继生成,并被配置到请求身份验证的应用和客户端上。

用户(在OAuth 2.0中也称为“资源所有者”)点击应用上的“使用Facebook登录”按钮时,应用程序会向授权服务器的登录URL,发送授权请求。通常,Facebook之类的授权请求会包括许多参数。为简洁起见,我们省去RFC6749规定的完整参数列表,仅包含如下参数:

Facebook的授权服务器会提示用户输入他们的用户名和密码,并以可选的方式要求回答验证所需的安全问题。

一旦通过身份验证,用户可能会看到一张“资源同意表”,其中列出了应用程序想要访问到的Facebook资源集(例如,用户的公开个人资料等)。

一旦用户被授权访问其请求的资源,用户将会被重定向回带有授权代码的应用程序。

然后,应用程序会与客户端及授权服务器交换授权代码,并获取opaque访问令牌(或刷新令牌),并将client_id和client_secret作为请求的一部分进行传递。

最后,应用程序可以使用访问令牌,去访问Facebook上所请求的资源。

什么是OpenID Connect(OIDC)?

如您所见,OAuth 2.0的主要目的是为了委托授权。换句话说,OAuth 2.0可以授予某个应用程序访问另一个应用程序所拥有的数据权限。而由于它并不关注身份验证,因此,任何使用OAuth 2.0的身份验证实现都是非标准的。这也就是OpenID Connect(OIDC)的用武之地。OIDC是在OAuth 2.0之上添加了一个基于标准的身份验证层。

OAuth 2.0流程中的授权服务器,在OIDC中承担的是身份服务器(或提供者)的角色。其实,OIDC的底层协议几乎与OAuth 2.0相同,只是身份服务器向被请求的应用程序提供的是身份令牌(如,ID令牌)罢了。此处的身份令牌是对有关用户身份验证的声明,以及编码的标准方式。

下面,我将描述两种流行的OIDC流程:隐式流程和授权代码流程。

先决条件

对于这两个流程,应用程序和客户端同样必须完成这授权服务器上的注册。而在注册的过程中,aclient_id和client_secret同样会相继生成,并被配置到请求身份验证的应用和客户端上。

OIDC隐式流程

OIDC隐式流程是两者中较简单的一种。您可以使用带有同步网关(Sync Gateway)的 Couchbase Lite客户端,进行身份验证。让我们沿用上面的例子,讨论其具体流程。

同样,在用户点击了应用程序上的“使用Facebook登录”按钮时,认证请求比上述OAuth多了一个遵从OIDC有关规范的典型参数:scope。它包含了openid的范围值。

接着,我们将上述OAuth部分的第2步换成身份服务器。而在第4步中,用户将会携带着身份令牌、或可选的访问令牌,被重定向回应用程序。而身份验证服务器也会根据redirect_uri的参数值,去指定URL。

在省去了上例的第5步后,应用程序会根据OIDC的标准规范,去验证身份令牌,并检索已存储的、经过身份验证的用户身份。

OIDC授权代码流程

OIDC的授权代码流程与之前描述过的OAuth 2.0的授权代码流程,也非常相似。下图再次展示了Facebook登录的流程:

OIDC授权代码流程的前4步,与隐式流程相同。不过,它沿用了OAuth的第5步。最后,应用程序会根据OIDC的标准规范去验证身份令牌,并检索已存储的、经过身份验证的用户身份。

JSON Web Token(JWT)

OIDC的一个关键元素是安全身份令牌。它通过被称为JSON Web Token(JWT)的标准格式,对有关用户的身份验证声明(authentication claims)进行编码。此处的“声明”可以被理解为关于用户的断言。而JWT往往是经由数字签名的。如下代码段便是带有一组典型声明的JWT示例:

  1. JSON 
  2.   "sub""AItOawmwtWwcT0k51BayewNvutrJUqsvl6qs7A4"
  3.   "name""Priya Rajagopal"
  4.   "email""priya.rajagopal@example.com"
  5.   "iss""https://pk-demo.okta.com/OAuth 2.0/default"
  6.   "aud""WuRuBAgABMP7_w4K9L-40Jhh"
  7.   "iat": 1622246311, 
  8.   "exp": 1624838311, 
  9.   "amr": [ 
  10.     "pwd" 
  11.   ] 

其中,

其他资源

原文OAuth 2.0 and OIDC Fundamentals for Authentication and Authorization,作者:Priya Rajagopal

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

来源:51CTO内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯