我在 Azure 中有一个应用程序注册:
Application (client) ID: aeb***f61
Object ID: f3f***1d9
Directory (tenant) ID: 937***7d1
我正在使用 Postman 制作客户端原型。我可以通过以下授权设置成功获取令牌:
Grant type: Client Credentials
Access Token URL: https://login.microsoftonline.com/{{tenantid}}/oauth2/v2.0/token
Client ID: {{clientid}}
Client Secret: {{clientsecret}}
Scope: {{scope}}
在生成的令牌中有一个“oid”声明,我知道它代表对象 ID,但这既不是应用程序 id,也不是应用程序的对象 id,也不是我的 Entra ID 用户 id(顺便说一句,在 Postman 中没有配置) )
{
"aud": "https://service.flow.microsoft.com/",
"iss": "https://sts.windows.net/937***7d1/",
"iat": 1714630709,
"nbf": 1714630709,
"exp": 1714634609,
"aio": "E2N***AQA=",
"appid": "aeb***f61",
"appidacr": "1",
"idp": "https://sts.windows.net/937***7d1/",
"idtyp": "app",
"oid": "266***b55",
"rh": "0.A***QA.",
"sub": "266***b55",
"tid": "937***7d1",
"uti": "OVe***LAA",
"ver": "1.0"
}
这个“
266***b55
”GUID 是从哪里来的?
我为什么问这个?
我想保护此服务(这是一个电力自动化云流,由 http 请求触发)。在“收到 HTTP 请求时”步骤中,我可以将“谁可以触发流”设置为“我的租户中的特定用户” ”,在这种情况下,当我将“允许的用户”设置为“
266***b55
”时,它起作用了,所有其他情况我都得到了 403。所以 Cloud Flow 的实现会寻找这个声明,我只是不知道它来自哪里....所以我不能以此为基础制定安全策略(也许对于所有应用程序或某些Azure内置服务对象ID来说都是通用的)
它是调用服务主体的objectID,可以在Entra/Azure Portal中应用程序注册的“企业应用程序端”中找到。
进一步说明:在其他授权类型(例如授权码流)的情况下,它将是发出请求的用户的 objectID,如“oid”的描述所示。 回到客户端凭证流的情况;有根据的猜测是,与应用程序注册相比,企业应用程序是面向外部的,并使用更“全局”的 GUID 来标识自己,应用程序注册是与租户相关的信任。