如何使用Go SDK以编程方式创建Azure AD用户
Azure Go SDK 编程创建Azure AD用户实现方案
该需求可完全实现,我在实际业务中落地过相同逻辑,以下是可直接参考的实现步骤和代码:
前置依赖准备
- 安装所需的Go SDK包,注意不要使用已废弃的旧版Azure AD Graph SDK,统一使用官方维护的新版Microsoft Graph相关SDK:
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity go get github.com/microsoftgraph/msgraph-sdk-go go get github.com/microsoftgraph/msgraph-sdk-go/models
- 提前在Azure AD中注册服务主体,为该服务主体分配Microsoft Graph的应用权限
User.ReadWrite.All,并完成管理员授权同意 - 收集好认证所需的三个核心参数:租户ID(Tenant ID)、服务主体客户端ID(Client ID)、服务主体客户端密钥(Client Secret)
示例代码
package main import ( "context" "log" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/microsoftgraph/msgraph-sdk-go" "github.com/microsoftgraph/msgraph-sdk-go/models" ) func main() { // 替换为你自己的参数 tenantID := "你的Azure租户ID" clientID := "你的服务主体客户端ID" clientSecret := "你的服务主体客户端密钥" // 客户端密钥凭据认证 cred, err := azidentity.NewClientSecretCredential(tenantID, clientID, clientSecret, nil) if err != nil { log.Fatalf("初始化认证凭据失败: %v", err) } // 初始化Graph客户端 graphClient, err := msgraphsdk.NewGraphServiceClientWithCredentials(cred, []string{"https://graph.microsoft.com/.default"}) if err != nil { log.Fatalf("初始化Graph客户端失败: %v", err) } // 构造待创建的用户对象 newUser := models.NewUser() // 用户主体名,后缀必须是租户下已验证的域名 upn := "testuser01@你的租户默认域名.onmicrosoft.com" newUser.SetUserPrincipalName(&upn) displayName := "测试用户01" newUser.SetDisplayName(&displayName) mailNickname := "testuser01" newUser.SetMailNickname(&mailNickname) // 账号启用状态 accountEnabled := true newUser.SetAccountEnabled(&accountEnabled) // 初始密码配置,密码必须满足Azure AD复杂度要求 passwordProfile := models.NewPasswordProfile() initPassword := "你的初始密码@123456" passwordProfile.SetPassword(&initPassword) // 首次登录是否强制修改密码,按需配置 forceChangePasswordNextSignIn := true passwordProfile.SetForceChangePasswordNextSignIn(&forceChangePasswordNextSignIn) newUser.SetPasswordProfile(passwordProfile) // 发起创建用户请求 createdUser, err := graphClient.Users().Post(context.Background(), newUser, nil) if err != nil { log.Fatalf("创建Azure AD用户失败: %v", err) } log.Printf("用户创建成功,用户ID: %s,用户主体名: %s", *createdUser.GetId(), *createdUser.GetUserPrincipalName()) }
常见注意事项
- 不要导错包:旧版
github.com/Azure/azure-sdk-for-go/services/activedirectory是管理Azure资源层面AD相关资源的包,无法操作目录下的用户对象,必须使用Microsoft Graph SDK - 权限配置不要选成委托权限,服务主体后台调用必须使用应用类型的
User.ReadWrite.All权限,配置后一定要点「授予管理员同意」,否则调用会返回403 - 用户主体名的后缀必须是你租户下已经完成验证的域名,使用未验证的自定义域名会直接创建失败
- 初始密码必须满足复杂度要求:长度不小于8位,同时包含大小写字母、数字、特殊字符,不能包含用户显示名、用户名里的连续字段
内容的提问来源于stack exchange,提问作者Panda6754
相关产品推荐
相关产品推荐

