【权限】OpenID Connect协议入门

OpenID Connect协议入门

一、简介

OpenID Connect是基于OAuth 2.0规范的可互操作的身份验证协议。它使用简单的REST/JSON消息流来实现,和之前任何一种身份认证协议相比,开发者可以轻松集成。
OpenID Connect允许开发者验证跨网站和应用的用户,而无需拥有管理密码文件。OpenID Connect允许所有类型的客户,包括基于浏览器的JavaScript和本地移动应用程序,启动登录流动和接收可验证断言对登录用户的身份

二、基础

简单来说,OIDC是一种安全机制,用于应用连接到身份认证服务器获取用户信息,并将这些信息以安全可靠的方法返回给应用。
OpenID 和 OAuth协议常常被一起提及,但是二者是有区别的:

  • OpenID是Authentication,即认证,对用户身份进行认证,判断其身份是否有效,也就是让网站知道“你是你所声称的那个用户”
  • OAuth是Authorization,即授权,在已知用户身份合法的情况下,经用户授权来允许某些操作,也就是让网站知道“你能被允许做那些事情”
    由此可知,授权要在认证之后进行,只有确定用户身份之后才能授权

身份验证 + OAuth2.0 = OpenID Connect

三、流程

OAuth2提供了Access Token来解决授权第三方客户端访问受保护资源的问题;相似的,OIDC在这个基础上提供了ID Token来解决第三方客户端识别用户身份的问题。OIDC的核心在于在OAuth2的授权流程中,一并提供用户身份认证信息给到第三方客户端,ID token使用JWT格式来包装,得益于JWT的自包含性,紧凑性以及防篡改机制,使得ID-Token可以安全的传递给第三方客户端程序并且容易被验证。

可知,OIDC遵循OAuth协议流程,在申请Access-Token的同时,也返回了ID-Token来验证用户身份。
在这里插入图片描述

  1. 客户端发送认证请求给认证服务;
  2. 终端用户在认证页面进行授权确认(可选);
  3. 认证服务对认证请求进行验证,发送ID Token给客户端;
  4. 客户端向业务请求,请求中携带ID Token;
  5. 业务服务验证ID Token是否合法后返回业务应答
四、JWT(JSON Web Token)格式数据

认证服务返回的ID Token需要严格遵守JWT(JSON Web Token)的定义,下面是JWT(JSON Web Token)的定义细节:

1、iss:必须。Issuer Identifier,认证服务的唯一标识,一个区分大小写的https URL,不包含query和fragment组件。

2、sub:必须。Subject Identifier,iss提供的终端用户的标识,在iss范围内唯一,最长为255个ASCII个字符,区分大小写。

3、aud:必须。Audience(s),标识ID Token的受众,必须包含OAuth2的client_id,分大小写的字符串数组。

4、exp:必须。Expiration time,超过此时间的ID Token会作废。

5、iat:必须。Issued At Time,JWT的构建的时间。

6、auth_time:AuthenticationTime,终端用户完成认证的时间。

7、nonce:发送认证请求的时候提供的随机字符串,用来减缓重放攻击,也可以用来关联客户端Session。如果nonce存在,客户端必须验证nonce。

8、acr:可选。Authentication Context Class Reference,表示一个认证上下文引用值,可以用来标识认证上下文类。

9、amr:可选。Authentication Methods References,表示一组认证方法。

10、azp:可选。Authorized party,结合aud使用。只有在被认证的一方和受众(aud)不一致时才使用此值,一般情况下很少使用。

例子如:

{
	"iss": "https://1.2.3.4:8443/auth/realms/kubernetes",
	"sub": "547cea22-fc8a-4315-bdf2-6c92592a6e7c",
	"aud": "kubernetes",
	"exp": 1525158711,
	"iat": 1525158411,
	"auth_time": 0,
	"nonce": "n-0S6_WzA2Mj",
	"acr": "1",
	"azp": "kubernetes",
	"nbf": 0,
	"typ": "ID",
	"session_state": "150df80e-92a1-4b0c-a5c5-8c858eb5a848",
	"userId": "123456",
	"preferred_username": "theone",
	"given_name": "the",
	"family_name": "one",
	"email": "theone@mycorp.com"
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值