首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用golang登录Azure ACR

用golang登录Azure ACR
EN

Stack Overflow用户
提问于 2021-12-12 09:10:57
回答 1查看 399关注 0票数 0

我正在寻找一种使用golang获取Azure访问令牌的方法。类似于以下控制台命令的结果:

代码语言:javascript
复制
az login --service-principal -u <app-id> -p <password-or-cert> --tenant <tenant>
az acr login --name <registry id> --expose-token --only-show-errors
EN

回答 1

Stack Overflow用户

发布于 2022-06-17 21:44:55

这是我的解决办法。只需设置tenantIdacrService并运行它。输出将为您提供用户和密码(令牌),以便在docker登录命令中使用。请注意:用户的字面意思是"00000000-0000-0000-0000-000000000000“。别把它换掉。

代码语言:javascript
复制
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"])
}

然后,只需登录到注册表:

代码语言:javascript
复制
docker login -u "00000000-0000-0000-0000-000000000000" -p "<TOKEN FROM OUTPUT>" crmichitest.azurecr.io
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70322259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档