跳至主要内容
版本:1.24.6

OAuth2 提供者

Gitea 支持作為 OAuth2 提供者,允许第三方應用程序在使用者同意的情况下访问其资源。此功能自 1.8.0 版起可用。

端点

端点URL
OpenID Connect Discovery/.well-known/openid-configuration
Authorization Endpoint/login/oauth/authorize
Access Token Endpoint/login/oauth/access_token
OpenID Connect UserInfo/login/oauth/userinfo
JSON Web Key Set/login/oauth/keys

支持的 OAuth2 授权

目前 Gitea 僅支持 Authorization Code Grant 标准,並额外支持以下扩展:

要将 Authorization Code Grant 作為第三方應用程序,您需要通過在设置中添加一个新的 "應用程序" (/user/settings/applications)。

范围

Gitea 支持以下令牌范围:

名稱介绍
(no scope)授予对公共使用者配置文件和公共存儲库的只读访问权限
repo完全控制所有存儲库
    repo:status授予对所有存儲库中提交状态的读/写访问权限
    public_repo僅授予对公共存儲库的读/写访问权限
admin:repo_hook授予对所有存儲库的 Hooks 访问权限,該权限已包含在 repo 范围中
    write:repo_hook授予对存儲库 Hooks 的读/写访问权限
    read:repo_hook授予对存儲库 Hooks 的只读访问权限
admin:org授予对組織设置的完全访问权限
    write:org授予对組織设置的读/写访问权限
    read:org授予对組織设置的只读访问权限
admin:public_key授予公钥管理的完全访问权限
    write:public_key授予对公钥的读/写访问权限
    read:public_key授予对公钥的只读访问权限
admin:org_hook授予对組織级别 Hooks 的完全访问权限
admin:user_hook授予对使用者级别 Hooks 的完全访问权限
notification授予对通知的完全访问权限
user授予对使用者个人资料信息的完全访问权限
    read:user授予对使用者个人资料的读取权限
    user:email授予对使用者电子邮件地址的读取权限
    user:follow授予访问权限以关注/取消关注使用者
delete_repo授予删除存儲库的权限
package授予对托管包的完全访问权限
    write:package授予对包的读/写访问权限
    read:package授予对包的读取权限
    delete:package授予对包的删除权限
admin:gpg_key授予 GPG 密钥管理的完全访问权限
    write:gpg_key授予对 GPG 密钥的读/写访问权限
    read:gpg_key授予对 GPG 密钥的只读访问权限
admin:application授予應用程序管理的完全访问权限
    write:application授予應用程序管理的读/写访问权限
    read:application授予應用程序管理的读取权限
sudo允许以站点管理员身份執行操作

客户端類型

Gitea 支持私密和公共客户端類型,参见 RFC 6749.

對於公共客户端, 允许在本地回环地址的重定向 URI 中使用任意端口,例如 http://127.0.0.1/。根据 RFC 8252 的建议,請避免使用 localhost

示例

注意: 該示例中尚未使用 PKCE。

  1. 将使用者重定向到授权端点,以获得他们的访问资源授权:

    https://[YOUR-GITEA-URL]/login/oauth/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI& response_type=code&state=STATE

    在设置中注册應用程序以获得 CLIENT_IDSTATE 是一个随机字符串,它将在获得使用者授权后发送回您的應用程序。state 參數是可選的,但您應該使用它来防止 CSRF 攻擊。

    Authorization Page

    使用者将会被询问是否授权给您的應用程序。如果他们同意了授权,使用者将会被重定向到 REDIRECT_URL,例如:

    https://[REDIRECT_URI]?code=RETURNED_CODE&state=STATE
  2. 使用重定向提供的 code,您可以請求一个新的應用程序和 Refresh Token。Access Token Endpoint 接受 application/jsonapplication/x-www-form-urlencoded 類型的 POST 請求,例如:

    POST https://[YOUR-GITEA-URL]/login/oauth/access_token
    {
    "client_id": "YOUR_CLIENT_ID",
    "client_secret": "YOUR_CLIENT_SECRET",
    "code": "RETURNED_CODE",
    "grant_type": "authorization_code",
    "redirect_uri": "REDIRECT_URI"
    }

    返回:

    {
    "access_token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJnbnQiOjIsInR0IjowLCJleHAiOjE1NTUxNzk5MTIsImlhdCI6MTU1NTE3NjMxMn0.0-iFsAwBtxuckA0sNZ6QpBQmywVPz129u75vOM7wPJecw5wqGyBkmstfJHAjEOqrAf_V5Z-1QYeCh_Cz4RiKug",
    "token_type": "bearer",
    "expires_in": 3600,
    "refresh_token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJnbnQiOjIsInR0IjoxLCJjbnQiOjEsImV4cCI6MTU1NzgwNDMxMiwiaWF0IjoxNTU1MTc2MzEyfQ.S_HZQBy4q9r5SEzNGNIoFClT43HPNDbUdHH-GYNYYdkRfft6XptJBkUQscZsGxOW975Yk6RbgtGvq1nkEcklOw"
    }

    CLIENT_SECRET 是生成给應用程序的唯一密钥。請注意,該密钥只会在您使用 Gitea 建立/注册應用程序后出現一次。如果您丢失了密钥,您必須在應用程序设置中重新生成密钥。

    access_token 請求中的 REDIRECT_URI 必須与 authorize 請求中的 REDIRECT_URI 相符。

  3. 使用 access_token 来构造 API 請求 以读写使用者的资源。