我正在寻找一种使用golang获取Azure访问令牌的方法。类似于以下控制台命令的结果:
az login --service-principal -u <app-id> -p <password-or-cert> --tenant <tenant>
az acr login --name <registry id> --expose-token --only-show-errors发布于 2022-06-17 21:44:55
这是我的解决办法。只需设置tenantId和acrService并运行它。输出将为您提供用户和密码(令牌),以便在docker登录命令中使用。请注意:用户的字面意思是"00000000-0000-0000-0000-000000000000“。别把它换掉。
package main
import (
"context"
"encoding/json"
"fmt"
"net/http"
"net/url"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
)
func main() {
tenantId := "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
acrService := "crmichitest.azurecr.io"
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
panic(err)
}
ctx := context.Background()
aadToken, err := cred.GetToken(ctx, policy.TokenRequestOptions{Scopes: []string{"https://management.azure.com/.default"}})
if err != nil {
panic(err)
}
formData := url.Values{
"grant_type": {"access_token"},
"service": {acrService},
"tenant": {tenantId},
"access_token": {aadToken.Token},
}
jsonResponse, err := http.PostForm(fmt.Sprintf("https://%s/oauth2/exchange", acrService), formData)
if err != nil {
panic(err)
}
var response map[string]interface{}
json.NewDecoder(jsonResponse.Body).Decode(&response)
fmt.Println("User: 00000000-0000-0000-0000-000000000000")
fmt.Println("Token:", response["refresh_token"])
}然后,只需登录到注册表:
docker login -u "00000000-0000-0000-0000-000000000000" -p "<TOKEN FROM OUTPUT>" crmichitest.azurecr.iohttps://stackoverflow.com/questions/70322259
复制相似问题