GitLab API 授权认证及使用

GitLab API 授权认证及使用

授权认证

以GitLab 的 OAuth2 验证方式走一下流程:

1.  创建应用

    在 GitLab Web 界面的 Settings ➡️ Applications中注册用于提供 OAuth 验证的应用。重定向URI(Redirect URI)设为第三方应用(本例中即为公司 Portal 网站)的线上 URI,因现处于开发阶段,设为本地应用运行后的访问路径,如http://localhost:80/prodMgt/transfer。页面还会要求选择 Scopes,表示此应用的授权范围,应根据第三方应用的具体需求选择,我选 api,应用成功创建后会显示其具体信息,包括应用 Application Id应用密钥Secret、回调 URLCallback url和权限Scopes

2.  请求授权码

页面初始化时,使用 location.href 跳转至授权页面:

https://gitlab.example.com/oauth/authorize?client_id=4e1fe77ba1d43b151428d907574er866a48af8dbc8766ea839a84a88c6dace39&redirect_uri=http://localhost:80//prodMgt/transfer&response_type=code&state=linda&scope=api

URI 中的参数包括:

参数 是否必须 含义
client_id true 注册 GitLab 应用成功后的 Application Id
redirect_uri true 注册应用时设置的重定向 URI
response_type true 返回的类型,授权码模式即为code
state false 用于确认请求和回调的状态,OAuth 建议以此来防止 CSRF 攻击[3]
scope false 权限设置,范围不得超出创建应用时的配置,以空格分隔

 

3. 用户授权

发送请求后网页会跳转到 GitLab 的授权页面,先要求用户登录 GitLab,然后询问用户是否同意授权。用户点击同意后页面便会返回一个包含授权码 code 参数 state(如果你传了它的话)的重定向 URI 并跳转至对应的网页,即网页的地址栏变成了这样:

GitLab API 授权认证及使用_第1张图片

4. 获取令牌 Token

既然拿到了 code,只需要一个请求就能拿到Access Token。要注意的是,获取 Token 的操作是需要在第三方应用的后台完成的,以保证数据的安全性。

POST https://gitlab.example.com/oauth/token

参数包括:

参数 是否必须 含义
client_id true 注册应用的 Application Id
client_secret true 注册应用的 Secret
code true 上面获取到的授权码,但是其有效期很短,一般为10min
grant_type true 授权方式,authorization_code
redirect_uri true 颁发令牌后的回调网址

GitLab 收到此请求后便会向参数中的redirect_uri网址发送一段 JSON 数据,Token在此:

{
    "access_token": "a7e514632722f45a9edfe4e8624ec3fcd826ebbcb830055f180efee4533a50dd",
    "token_type": "bearer",
    "refresh_token": "360c6864b42247fafeaac4715fc524f939ca4545f8400126705144d7e37b5042",
    "scope": "api",
    "created_at": 1577427939
}

使用

有了 Token,就有了使用 GitLab API 的,但是不同 Token 的使用方式也不同:

  1. AOuth 2.0获取的 Token 类型是 bearer-tokens,需要在 GitLab API 请求中加入 Key 为Authorization,Value 为 Bearar 的 Header。

  2. Personal access tokens 获取的是 Private-Token,需要加入 Key 为Private-Token、Value 为 Token 值的请求 Header。

所有的 GitLab API 前缀均为https://gitlab.example.com/api/v4/,使用方式与常见 API 无异,例:

   1. 获取到用户在 GitLab 上所有的可见项目列表:


https://git.example.com/api/v4/projects/

  2. 获取某项目下的issues:


https://git.example.com/api/v4/projects/projects_id/issues

你可能感兴趣的:(Others,Gitlab,API)