OAuth浅析及NCE应用

前言

NCE最新的持续集成需求中使用到了第三方仓库授权的特性,这里采用了OAuth授权及认证的技术。本文粗浅的介绍一下OAuth的介绍及基本原理和授权流程。

OAuth协议是什么

OAuth是一个开放标准。它允许第三方网站在用户授权的前提下访问用户在服务商那里存储的信息。例如我们微信登录后通过一些链接访问其他的应用,例如大众点评,它会提示是否通过微信授权访问,如果用户确认ok,则大众点评的app就可以拿到微信中的账户信息甚至联系人列表等信息。 这种授权无需将用户提供用户名和密码提供给该第三方网站。 OAuth允许用户提供一个令牌给第三方网站,一个令牌对应一个特定的第三方网站,同时该令牌只能在特定的时间内访问特定的资源。

OAuth原理

在认证和授权的过程中涉及的三方包括: 服务提供方, 用户使用服务提供方来存储受保护的资源,如照片,视频,联系人列表 用户, 存放在服务提供方的受保护的资源的拥有者 客户端, 要访问服务提供方资源的第三方应用,通常是网站,如提供照片打印服务的网站。在认证过程之前,客户端要向服务提供者申请客户端标识。

OAuth认证及授权流程

OAuth认证和授权的过程如下:

1.Client请求RO的授权,请求中一般包含:要访问的资源路径,操作类型,Client的身份等信息。

2.RO批准授权,并将“授权证据”发送给Client。典型的做法是,AS提供授权审批界面,让RO显式批准。

3.客户端使用上一步的token,向服务器申请令牌。

4.认证服务器对客户端进行认证后,确认ok同意发放令牌。

5.Client携带“访问令牌”访问RS上的资源。在令牌的有效期内,Client可以多次携带令牌去访问资源。

6.RS验证令牌的有效性,比如是否伪造、是否越权、是否过期,验证通过后,才能提供服务。

客户端的授权模式

客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。OAuth 2.0定义了四种授权方式。 授权码模式(authorization code) 简化模式(implicit) 密码模式(resource owner password credentials) 客户端模式(client credentials)

授权码模式是功能最完整、流程最严密的授权模式。它的特点就是通过客户端的后台服务器,与"服务提供商"的认证服务器进行互动。 流程图如下:

步骤如下:

(A)用户访问客户端,后者将前者导向认证服务器。

(B)用户选择是否给予客户端授权。

(C)假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码。

(D)客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。

(E)认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。

OAuth在NCE中的应用

web登录蜂巢后,在镜像仓库页面有一个源码托管按钮,跳转以后第一次需要进行第三方代码仓库的关联。 步骤如下:

1.OAuth跳转入口:跳转至 GitHub,使用户能够继续授权相关操作

2.Github授权后回调至蜂巢web,通知页面更新为跟账号信息一致的内容。

授权之前的页面展示:

跳转到github进行登录及授权操作, 授权并回调成功的页面展示:

本文来自网易实践者社区,经作者崔晓晴授权发布。