2016-11-04 64 views
1

我想使用這裏記錄的API:https://docker.github.io/registry/spec/auth/oauth/爲什麼刷新標記請求auth.docker.io返回404?

發帖時爲在文檔描述的服務,始終返回404

我這個用我自己的帳戶,也試過使用文檔中的確切查詢。

下面是一個例子:

[prompt]$ curl -v \ 

-H 'Content-Type: application/x-www-form-urlencoded' \ 
-X POST -d 'grant_type=password&username=johndoe&password=A3ddj3w&service=hub.docker.io&client_id=dockerengine&access_type=offline' \ 
https://auth.docker.io/token 
* Trying 52.5.234.85... 
* Connected to auth.docker.io (52.5.234.85) port 443 (#0) 
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 
* Server certificate: *.docker.io 
* Server certificate: RapidSSL SHA256 CA - G3 
* Server certificate: GeoTrust Global CA 
POST /token HTTP/1.1 
Host: auth.docker.io 
User-Agent: curl/7.43.0 
Accept:/
Content-Type: application/x-www-form-urlencoded 
Content-Length: 118 

upload completely sent off: 118 out of 118 bytes 
< HTTP/1.1 404 Not Found 
< Content-Type: text/plain; charset=utf-8 
< X-Content-Type-Options: nosniff 
< Date: Fri, 04 Nov 2016 01:10:14 GMT 
< Content-Length: 19 
< Strict-Transport-Security: max-age=31536000 
< 
404 page not found 
Connection #0 to host auth.docker.io left intact 

相同的響應是使用憑證有效的帳戶時返回。 似乎我應該至少收到401如果該帳戶未經過身份驗證。

此服務不再受支持嗎?

有一個GET api,我可以用來獲取一個短暫的不記名令牌,但我需要一個刷新令牌。 GET GET api記錄在這裏:https://docs.docker.com/registry/spec/auth/jwt/

回答

1

我遇到了同樣的問題。我會先解決方案,稍後再提供額外信息。

DOCKER_HUB_USERNAME=$1 
DOCKER_HUB_PASSWORD=$2 
DOCKER_REPO=$3 

AUTH_64=$(echo -n $DOCKER_HUB_USERNAME:$DOCKER_HUB_PASSWORD | base64) 

TOKEN=$(curl -s -H "Authorization: Basic $AUTH_64" \ 
       -H 'Accept: application/json' \ 
       "https://auth.docker.io/token?service=registry.docker.io&scope=repository:$DOCKER_REPO:pull" | jq -r .token) 

curl -s -H "Authorization: Bearer $TOKEN" -H "Accept: application/json" \ 
    "https://index.docker.io/v2/$DOCKER_REPO/tags/list" | jq -r .tags 

我做了一些挖掘和發現this answer這需要你使用泊塢窗登錄,這不是我想要的東西。在查看他正在從中提取的docker conf文件後,我發現數值爲user:pass的base64編碼。所以我只是避免嘗試獲取刷新令牌。

我用jq來獲取json值。 Here is a download link。不管你想要什麼,你都可以檢索它們我以第二個命令爲例,儘管這應該適用於the v2 API。我想你甚至可以用任何碼頭註冊表替換index.docker.io

哦,如果你需要推訪問一定要改變$DOCKER_REPO:pull$DOCKER_REPO:pull,push

+0

我已經用GET API,它提供了一個短暫的承載令牌實驗。問題是要求獲得刷新令牌的解決方案。 –

+0

是的,抱歉,我無法直接回答。我相信它目前已經破裂或貶值。 docker apis似乎有很多過時或衝突的信息。我不確定是否只需要能夠根據用戶帳戶運行命令和進行身份驗證,或者是否需要刷新令牌。我希望它很快得到解決。 –