3.8 KiB
date | title | slug | sidebar_position | toc | draft | aliases | menu | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2019-04-19:44:00+01:00 | OAuth2 提供者 | oauth2-provider | 41 | false | false |
|
|
OAuth2 提供者
目錄
Gitea 支援作為 OAuth2 提供者,能讓第三方程式能在使用者同意下存取 Gitea 的資源。此功能自 1.8.0 版開始提供。
Endpoint
Endpoint | URL |
---|---|
Authorization Endpoint | /login/oauth/authorize |
Access Token Endpoint | /login/oauth/access_token |
支援的 OAuth2 Grant
目前 Gitea 只支援 Authorization Code Grant 標準並額外支援下列擴充標準:
若想要讓第三方程式使用 Authorization Code Grant,需先在「設定」(/user/settings/applications
)中註冊一個新的應用程式。
Scope
目前 Gitea 尚未支援 scope (參見 #4300),所有的第三方程式都可獲得該使用者及他所屬的組織中所有資源的存取權。
範例
備註: 此範例未使用 PKCE。
-
重新導向使用者到 authorization endpoint 以獲得他同意授權存取資源:
https://[YOUR-GITEA-URL]/login/oauth/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI& response_type=code&state=STATE
在設定中註冊應用程式以獲得
CLIENT_ID
。STATE
是一個隨機的字串,它將在使用者授權後發送回您的應用程式。state
參數是選用的,但應該要用它來防止 CSRF 攻擊。使用者將會被詢問是否授權給您的應用程式。如果它們同意了,使用者將被重新導向到
REDIRECT_URL
,例如:https://[REDIRECT_URI]?code=RETURNED_CODE&state=STATE
-
使用重新導向提供的
code
,您可以要求一個新的應用程式和 Refresh Token。Access Token Endpoint 接受 POST 請求使用application/json
或application/x-www-form-urlencoded
類型的請求內容,例如: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
。 -
發送 API requests 時使用
access_token
以存取使用者的資源。