Azure Go SDK实现az ad app credential list等价代码及相关疑问
解答
1. 替代az ad app credential list的Go实现
az ad app credential list本质是调用Microsoft Graph API的GET /applications/{application-id}接口,拉取应用的证书凭据(keyCredentials)和密码凭据(passwordCredentials)。旧的services/graphrbac包已经弃用,现在推荐用Microsoft Graph Go SDK,而且能直接复用你已有的azidentity.NewDefaultAzureCredential认证逻辑。
具体步骤:
- 安装所需依赖:
go get github.com/microsoftgraph/msgraph-sdk-go go get github.com/microsoftgraph/msgraph-sdk-go/applications go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
- 示例代码:
package main import ( "fmt" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/microsoftgraph/msgraph-sdk-go/applications" "github.com/microsoftgraph/msgraph-sdk-go/models/odataerrors" ) func main() { // 复用你已有的认证方式 cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { fmt.Printf("创建凭据失败: %v\n", err) return } // 创建Microsoft Graph客户端,需要申请Application.Read.All权限 graphClient, err := applications.NewApplicationsClientWithCredentials(cred, []string{"Application.Read.All"}) if err != nil { fmt.Printf("创建Graph客户端失败: %v\n", err) return } // 替换为你的目标应用ID appID := "your-app-id-here" // 获取应用的凭据信息,对应az ad app credential list的结果 app, err := graphClient.GetByAppId(appID, nil) if err != nil { if odataErr, ok := err.(*odataerrors.ODataError); ok { fmt.Printf("Graph API调用错误: %v\n", odataErr.Error()) } else { fmt.Printf("获取应用信息失败: %v\n", err) } return } // 输出证书凭据 fmt.Println("证书凭据:") for _, cred := range app.GetKeyCredentials() { fmt.Printf(" ID: %v\n", *cred.GetId()) fmt.Printf(" 类型: %v\n", *cred.GetType()) fmt.Printf(" 生效时间: %v\n", *cred.GetStartDateTime()) fmt.Printf(" 过期时间: %v\n", *cred.GetEndDateTime()) fmt.Println("---") } // 输出密码凭据 fmt.Println("密码凭据:") for _, cred := range app.GetPasswordCredentials() { fmt.Printf(" ID: %v\n", *cred.GetId()) fmt.Printf(" 显示名称: %v\n", *cred.GetDisplayName()) fmt.Printf(" 生效时间: %v\n", *cred.GetStartDateTime()) fmt.Printf(" 过期时间: %v\n", *cred.GetEndDateTime()) fmt.Println("---") } }
注意:你的认证主体(当前CLI用户或服务主体)需要有Application.Read.All权限(如果只操作自己拥有的应用,用Application.ReadWrite.OwnedBy权限更安全)。
2. secretClient.ListKeyCredentials是否可用?
这个方法属于旧版Azure SDK for Go(v1)的graphrbac包,已经被官方弃用,不再维护,不推荐继续使用。直接切换到上面的Microsoft Graph SDK方案即可。
3. 标签选择:azure-sdk-for-go vs azure-sdk-go
azure-sdk-go:对应旧版SDK(v1),现在只做bug修复,不再开发新功能。azure-sdk-for-go:对应新版SDK(v2),是官方当前主推的版本,所有新服务、新特性都在这个版本迭代。
你现在用的azidentity属于新版SDK,所以提问时应该选azure-sdk-for-go标签;如果涉及旧版services/下的包,才用azure-sdk-go。另外,涉及Microsoft Graph的问题,还可以加上microsoft-graph标签。
内容的提问来源于stack exchange,提问作者DazWilkin
相关产品推荐
相关产品推荐

