为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
qq_遁去的一_1 2023-06-26 15:21:26
使用azure go sdk,是否可以使用Application (client) ID、Directory (tenant) ID和 有效Client secret获取Object IDAzure Active Directory应用程序的 ?如何?以下是 Azure 门户的屏幕截图,可帮助阐明这三个字段。我尝试使用graphrbac 中的以下函数,但*result.Value与上面的屏幕截图中的不匹配Object ID。func (client ApplicationsClient) GetServicePrincipalsIDByAppID(ctx context.Context, applicationID string) (result ServicePrincipalObjectResult, err error)
查看完整描述

2 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

您问题中的功能是获取服务主体的ID(位于门户中),而不是屏幕截图中的Enterprise applications天蓝色广告应用程序(位于) 。App registrations

似乎没有这样的函数可以objectid通过您想要使用的属性来获取应用程序的信息。(我对go不太熟悉,如果有什么错误,请指正。)最相似的是func (ApplicationsClient) Get需要objectid, 或 来func (ApplicationsClient) List 列出应用程序。


查看完整回答
反对 回复 2023-06-26
?
撒科打诨

TA贡献1934条经验 获得超2个赞

我想你现在可能不需要这个,但以防万一有人试图做同样的事情。下面是我目前的做法,但感觉超级老套(这就是为什么我试图查找是否有人可以通过 MSGraph 或更优雅的东西来实现它)。

它依赖于以下机制:

  1. 使用azure-sdk-for-go 的 模块创建客户端azidentity。所有客户端类型都实现 azcore 的TokenCredential接口。这样你就可以获得客户端的 JWT 令牌。

  2. 使用客户端获取令牌,然后提取对象 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)


查看完整回答
反对 回复 2023-06-26
  • 2 回答
  • 0 关注
  • 208 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信