Skip to content

Commit b2ec116

Browse files
authored
Add oauth Chinese document for v1.19 (go-gitea#25020)
1 parent edfa2c5 commit b2ec116

File tree

1 file changed

+141
-0
lines changed

1 file changed

+141
-0
lines changed
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
---
2+
date: "2019-04-19:44:00+01:00"
3+
title: "OAuth2 提供者"
4+
slug: "oauth2-provider"
5+
weight: 41
6+
toc: false
7+
draft: false
8+
aliases:
9+
- /zh-cn/oauth2-provider
10+
menu:
11+
sidebar:
12+
parent: "development"
13+
name: "OAuth2 提供者"
14+
weight: 41
15+
identifier: "oauth2-provider"
16+
---
17+
18+
# OAuth2 提供者
19+
20+
**目录**
21+
22+
{{< toc >}}
23+
24+
Gitea 支持作为 OAuth2 提供者,允许第三方应用程序在用户同意的情况下访问其资源。此功能自 1.8.0 版起可用。
25+
26+
## 端点
27+
28+
| 端点 | URL |
29+
| ------------------------ | ----------------------------------- |
30+
| OpenID Connect Discovery | `/.well-known/openid-configuration` |
31+
| Authorization Endpoint | `/login/oauth/authorize` |
32+
| Access Token Endpoint | `/login/oauth/access_token` |
33+
| OpenID Connect UserInfo | `/login/oauth/userinfo` |
34+
| JSON Web Key Set | `/login/oauth/keys` |
35+
36+
## 支持的 OAuth2 授权
37+
38+
目前 Gitea 仅支持 [**Authorization Code Grant**](https://tools.ietf.org/html/rfc6749#section-1.3.1) 标准,并额外支持以下扩展:
39+
40+
- [Proof Key for Code Exchange (PKCE)](https://tools.ietf.org/html/rfc7636)
41+
- [OpenID Connect (OIDC)](https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth)
42+
43+
要将 Authorization Code Grant 作为第三方应用程序,您需要通过在设置中添加一个新的 "应用程序" (`/user/settings/applications`)。
44+
45+
## 范围
46+
47+
Gitea 支持以下令牌范围:
48+
49+
| 名称 | 介绍 |
50+
| ---- | ----------- |
51+
| **(no scope)** | 授予对公共用户配置文件和公共存储库的只读访问权限 |
52+
| **repo** | 完全控制所有存储库 |
53+
| &nbsp;&nbsp;&nbsp; **repo:status** | 授予对所有存储库中提交状态的读/写访问权限 |
54+
| &nbsp;&nbsp;&nbsp; **public_repo** | 仅授予对公共存储库的读/写访问权限 |
55+
| **admin:repo_hook** | 授予对所有存储库的 Hooks 访问权限,该权限已包含在 `repo` 范围中 |
56+
| &nbsp;&nbsp;&nbsp; **write:repo_hook** | 授予对存储库 Hooks 的读/写访问权限 |
57+
| &nbsp;&nbsp;&nbsp; **read:repo_hook** | 授予对存储库 Hooks 的只读访问权限 |
58+
| **admin:org** | 授予对组织设置的完全访问权限 |
59+
| &nbsp;&nbsp;&nbsp; **write:org** | 授予对组织设置的读/写访问权限 |
60+
| &nbsp;&nbsp;&nbsp; **read:org** | 授予对组织设置的只读访问权限 |
61+
| **admin:public_key** | 授予公钥管理的完全访问权限 |
62+
| &nbsp;&nbsp;&nbsp; **write:public_key** | 授予对公钥的读/写访问权限 |
63+
| &nbsp;&nbsp;&nbsp; **read:public_key** | 授予对公钥的只读访问权限 |
64+
| **admin:org_hook** | 授予对组织级别 Hooks 的完全访问权限 |
65+
| **admin:user_hook** | 授予对用户级别 Hooks 的完全访问权限 |
66+
| **notification** | 授予对通知的完全访问权限 |
67+
| **user** | 授予对用户个人资料信息的完全访问权限 |
68+
| &nbsp;&nbsp;&nbsp; **read:user** | 授予对用户个人资料的读取权限 |
69+
| &nbsp;&nbsp;&nbsp; **user:email** | 授予对用户电子邮件地址的读取权限 |
70+
| &nbsp;&nbsp;&nbsp; **user:follow** | 授予访问权限以关注/取消关注用户 |
71+
| **delete_repo** | 授予删除存储库的权限 |
72+
| **package** | 授予对托管包的完全访问权限 |
73+
| &nbsp;&nbsp;&nbsp; **write:package** | 授予对包的读/写访问权限 |
74+
| &nbsp;&nbsp;&nbsp; **read:package** | 授予对包的读取权限 |
75+
| &nbsp;&nbsp;&nbsp; **delete:package** | 授予对包的删除权限 |
76+
| **admin:gpg_key** | 授予 GPG 密钥管理的完全访问权限 |
77+
| &nbsp;&nbsp;&nbsp; **write:gpg_key** | 授予对 GPG 密钥的读/写访问权限 |
78+
| &nbsp;&nbsp;&nbsp; **read:gpg_key** | 授予对 GPG 密钥的只读访问权限 |
79+
| **admin:application** | 授予应用程序管理的完全访问权限 |
80+
| &nbsp;&nbsp;&nbsp; **write:application** | 授予应用程序管理的读/写访问权限 |
81+
| &nbsp;&nbsp;&nbsp; **read:application** | 授予应用程序管理的读取权限 |
82+
| **sudo** | 允许以站点管理员身份执行操作 |
83+
84+
## 客户端类型
85+
86+
Gitea 支持私密和公共客户端类型,[参见 RFC 6749](https://datatracker.ietf.org/doc/html/rfc6749#section-2.1).
87+
88+
对于公共客户端, 允许在本地回环地址的重定向 URI 中使用任意端口,例如 `http://127.0.0.1/`。根据 [RFC 8252 的建议](https://datatracker.ietf.org/doc/html/rfc8252#section-8.3),请避免使用 `localhost`
89+
90+
## 示例
91+
92+
**注意:** 该示例中尚未使用 PKCE。
93+
94+
1. 将用户重定向到授权端点,以获得他们的访问资源授权:
95+
96+
```curl
97+
https://[YOUR-GITEA-URL]/login/oauth/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI& response_type=code&state=STATE
98+
```
99+
100+
在设置中注册应用程序以获得 `CLIENT_ID``STATE` 是一个随机字符串,它将在获得用户授权后发送回您的应用程序。`state` 参数是可选的,但您应该使用它来防止 CSRF 攻击。
101+
102+
![Authorization Page](/authorize.png)
103+
104+
用户将会被询问是否授权给您的应用程序。如果他们同意了授权,用户将会被重定向到 `REDIRECT_URL`,例如:
105+
106+
```curl
107+
https://[REDIRECT_URI]?code=RETURNED_CODE&state=STATE
108+
```
109+
110+
2. 使用重定向提供的 `code`,您可以请求一个新的应用程序和 Refresh Token。Access Token Endpoint 接受 `application/json``application/x-www-form-urlencoded` 类型的 POST 请求,例如:
111+
112+
```curl
113+
POST https://[YOUR-GITEA-URL]/login/oauth/access_token
114+
```
115+
116+
```json
117+
{
118+
"client_id": "YOUR_CLIENT_ID",
119+
"client_secret": "YOUR_CLIENT_SECRET",
120+
"code": "RETURNED_CODE",
121+
"grant_type": "authorization_code",
122+
"redirect_uri": "REDIRECT_URI"
123+
}
124+
```
125+
126+
返回:
127+
128+
```json
129+
{
130+
"access_token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJnbnQiOjIsInR0IjowLCJleHAiOjE1NTUxNzk5MTIsImlhdCI6MTU1NTE3NjMxMn0.0-iFsAwBtxuckA0sNZ6QpBQmywVPz129u75vOM7wPJecw5wqGyBkmstfJHAjEOqrAf_V5Z-1QYeCh_Cz4RiKug",
131+
"token_type": "bearer",
132+
"expires_in": 3600,
133+
"refresh_token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJnbnQiOjIsInR0IjoxLCJjbnQiOjEsImV4cCI6MTU1NzgwNDMxMiwiaWF0IjoxNTU1MTc2MzEyfQ.S_HZQBy4q9r5SEzNGNIoFClT43HPNDbUdHH-GYNYYdkRfft6XptJBkUQscZsGxOW975Yk6RbgtGvq1nkEcklOw"
134+
}
135+
```
136+
137+
`CLIENT_SECRET` 是生成给应用程序的唯一密钥。请注意,该密钥只会在您使用 Gitea 创建/注册应用程序后出现一次。如果您丢失了密钥,您必须在应用程序设置中重新生成密钥。
138+
139+
`access_token` 请求中的 `REDIRECT_URI` 必须与 `authorize` 请求中的 `REDIRECT_URI` 相符。
140+
141+
3. 使用 `access_token` 来构造 [API 请求](https://docs.gitea.io/en-us/api-usage#oauth2) 以读写用户的资源。

0 commit comments

Comments
 (0)