如何从应用程序(客户端)ID 和目录(租户)ID 获取对象 ID?

使用azure go sdk,是否可以使用Application (client) IDDirectory (tenant) ID和 有效Client secret获取Object IDAzure Active Directory应用程序的 ?如何?

以下是 Azure 门户的屏幕截图,可帮助阐明这三个字段。

http://img1.sycdn.imooc.com/64993c920001664803960244.jpg

我尝试使用graphrbac 中的以下函数,但*result.Value与上面的屏幕截图中的不匹配Object ID

func (client ApplicationsClient) GetServicePrincipalsIDByAppID(ctx context.Context, applicationID string) (result ServicePrincipalObjectResult, err error)


qq_遁去的一_1
浏览 213回答 2
2回答

梵蒂冈之花

您问题中的功能是获取服务主体的ID(位于门户中),而不是屏幕截图中的Enterprise applications天蓝色广告应用程序(位于) 。App registrations似乎没有这样的函数可以objectid通过您想要使用的属性来获取应用程序的信息。(我对go不太熟悉,如果有什么错误,请指正。)最相似的是func (ApplicationsClient) Get需要objectid, 或 来func (ApplicationsClient) List 列出应用程序。

撒科打诨

我想你现在可能不需要这个,但以防万一有人试图做同样的事情。下面是我目前的做法,但感觉超级老套(这就是为什么我试图查找是否有人可以通过 MSGraph 或更优雅的东西来实现它)。它依赖于以下机制:使用azure-sdk-for-go 的 模块创建客户端azidentity。所有客户端类型都实现 azcore 的TokenCredential接口。这样你就可以获得客户端的 JWT 令牌。使用客户端获取令牌,然后提取对象 ID (claim oid)。您可以用来golang-jwt执行此操作。以下是我如何将其组合在一起(警告:不完整且不安全):    client, _:= azidentity.NewClientSecretCredential(tenantId, clientId, clientSecret,        &azidentity.ClientSecretCredentialOptions{            ClientOptions: azcore.ClientOptions{                Cloud: cloud.AzurePublic,            },        })    tokenString, _:= client.GetToken(context.Background(), policy.TokenRequestOptions{Scopes: []string{"https://management.azure.com/.default"}})    type custom struct {        ObjectId string `json:"oid"`        jwt.StandardClaims    }    p := jwt.NewParser(jwt.WithoutClaimsValidation())    c := &custom{}    p.ParseUnverified(tokenString.Token, c)    fmt.Println(c.ObjectId)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go