2 回答
TA贡献1900条经验 获得超5个赞
您问题中的功能是获取服务主体的ID(位于门户中),而不是屏幕截图中的Enterprise applications
天蓝色广告应用程序(位于) 。App registrations
似乎没有这样的函数可以objectid
通过您想要使用的属性来获取应用程序的信息。(我对go不太熟悉,如果有什么错误,请指正。)最相似的是func (ApplicationsClient) Get
需要objectid
, 或 来func (ApplicationsClient) List
列出应用程序。
TA贡献1934条经验 获得超2个赞
我想你现在可能不需要这个,但以防万一有人试图做同样的事情。下面是我目前的做法,但感觉超级老套(这就是为什么我试图查找是否有人可以通过 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)
- 2 回答
- 0 关注
- 208 浏览
添加回答
举报