【.com快译】目前OAuth2.0是“委托授权”的行业标准。它可以为应用程序或客户端提供对其他应用程序服务的相关数据和功能的访问。当然,OAuth2.0侧重于授权,而不是身份验证。OpenIDConnect(OIDC)在OAuth2.0之上添加了一个基于标准的身份验证层。也就是说,作为身份验证框架,OIDC建立在OAuth2.0之上。在本文中,我们将介绍OAuth2.0和OIDC进行身份验证和授权的基础知识,并涉及两个常见流程,即:隐式流程和授权代码流程)。OAuth2.0入门如前所述,OAuth2.0是委托授权的行业标准。市面上有很多OAuth提供者,也有典型的使用场景。例如,“使用Facebook登录”按钮通过采用OAuth2.0实现支持各种Web和移动应用程序。下面,我们就此进行深入探讨。先决条件首先,应用程序和客户端都必须完成向授权服务器的注册。注册过程中会依次生成aclient_id和client_secret配置给请求认证的应用和客户端。1.当用户(在OAuth2.0中也称为“资源拥有者”)点击应用程序上的“使用Facebook登录”按钮时,应用程序将向授权服务器的登录URL发送授权请求。通常,像Facebook这样的授权请求会包含很多参数。为了简洁起见,我们省略了RFC6749中规定的完整参数列表,只包括以下参数:client_id——为授权服务器唯一标识应用。response_type-表示客户端需要的授权码。redirect_uri--指定授权服务器将重定向到的URL以进行后续身份验证。2.Facebook的授权服务器将提示用户输入用户名和密码,并可选择询问安全问题以进行验证。3.一旦通过身份验证,用户可能会看到一份“资源同意书”,其中列出了应用程序想要访问的一组Facebook资源(例如,用户的公开资料等)。批准的资源集由初始授权请求中的范围参数指定。4.一旦用户被授权访问所请求的资源,用户将被重定向回带有授权码的应用程序。其中,授权服务器将用户重定向到的URL由redirect_uri参数指定,该参数也包含在初始授权请求中。5.然后,应用程序与客户端和授权服务器交换授权代码,并获得不透明的访问令牌(或刷新令牌),将client_id和client_secret作为请求的一部分传递。6.最后,应用程序可以使用访问令牌访问Facebook上请求的资源。什么是OpenID连接(OIDC)?如您所见,OAuth2.0的主要目的是委托授权。换句话说,OAuth2.0授予一个应用程序访问另一个应用程序拥有的数据的权限。由于它不关注身份验证,因此使用OAuth2.0的任何身份验证实现都是非标准的。这就是OpenIDConnect(OIDC)的用武之地。OIDC是在OAuth2.0之上添加的基于标准的身份验证层。OAuth2.0流程中的授权服务器承担了OIDC中身份服务器(或提供者)的角色。事实上,OIDC的底层协议与OAuth2.0几乎相同,只是身份服务器向请求的应用程序提供身份令牌(例如,ID令牌)。这里的身份令牌是关于用户身份验证的声明,以及对其进行编码的标准方式。下面,我描述了两种流行的OIDC流程:隐式流程和授权代码流程。先决条件对于这两个流程,应用程序和客户端还必须向授权服务器注册。在注册过程中,aclient_id和client_secret也会依次生成并配置给请求认证的应用程序和客户端。OIDC隐式流OIDC隐式流是两者中较简单的一种。您可以使用带有SyncGateway的CouchbaseLite客户端进行身份验证。让我们按照上面的例子来讨论一下它的具体过程。类似的,当用户点击应用程序上的“LoginwithFacebook”按钮时,认证请求比上面的OAuth:scope多了一个符合OIDC规范的典型参数。它包含openid的范围值。接下来,我们用身份服务器替换上面OAuth部分的第2步。在第4步中,用户将被重定向回具有身份令牌或可选访问令牌的应用程序。认证服务器也会根据redirect_uri的参数值指定URL。省略上述示例的第5步后,应用程序将根据OIDC标准规范验证身份令牌并检索存储和验证的用户身份。OIDC授权代码流OIDC授权代码流也与前面描述的OAuth2.0授权代码流非常相似。下图再次展示了Facebook登录流程:OIDC授权码流程的前4步与隐式流程相同。但是,它遵循OAuth的第5步。最后,应用程序根据OIDC的标准规范验证身份令牌,并检索存储的、经过身份验证的用户身份。JSONWebToken(JWT)OIDC的一个关键元素是安全身份令牌。它以称为JSONWeb令牌(JWT)的标准格式对有关用户的身份验证声明进行编码。这里的“声明”可以理解为对用户的断言。JWT通常带有数字签名。以下片段是具有一组典型声明的JWT示例:JSON{"sub":"AItOawmwtWwcT0k51BayewNvutrJUqsvl6qs7A4","name":"PriyaRajagopal","email":"priya.rajagopal@example.com","iss":"https://pk-demo.okta.com/OAuth2.0/default","aud":"WuRuBAgABMP7_w4K9L-40Jhh","iat":1622246311,"exp":1624838311,"amr":["pwd"]}其中sub为JWT引用的用户。iss是JWT的发行者。aud是授予令牌的对象。iat是发布的时间戳。exp是设置的过期时间戳。amr是用于颁发令牌的身份验证方法。其他资源jwt.io对于解码和验证JWT非常有用,它的链接是--https://jwt.io/。Okta提供的OIDC和OAuthRange是一个很好的资源,您可以在其中尝试各种流程而无需实际实施它们。原标题:OAuth2.0andOIDCFundamentalsforAuthenticationandAuthorization,作者:PriyaRajagopal
