You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 19:32:47