我设置了我的 Azure 函数来针对我自己的租户进行身份验证,如下所示...
这样做之后,如果我在浏览器中点击它,就像我自己一样,它会要求我进行身份验证,然后才能工作。伟大的!我现在尝试在 Postman 中执行此操作,但无论我做什么,都会收到 401。
postman 正在以其自己的服务主体身份登录 (1ec5483f-8eb9-4851-af81-ff89eb3e25ad) API权限是这样设置的
然后我在 POSTMAN 客户端中设置了一个 OATH 2 token - 它得到了一个似乎有效的 token
我显然是故意把 secret 删掉的。范围设置为 api://31f5b60c-5de3-4135-85ec-08edfbce042e/General.Read。访问 token URL = https://login.microsoftonline.com/mytenant/oauth2/v2.0/authorize 。 token URL = https://login.microsoftonline.com/my租户/oauth2/v2.0/授权
解密后的 token 如下所示:
{
"aud": "api://31f5b60c-5de3-4135-85ec-08edfbce042e",
"iss": "https://sts.windows.net/mytenant/",
"iat": 1695814282,
"nbf": 1695814282,
"exp": 1695818220,
"acr": "1",
"aio": "ATQAy/8UAAAAS8sRzKTgrNlGhofLEKYO7xweUqSUmLrqQWFN8i0o/qsoeBqavqK7oQXJt19EOeBk",
"amr": [
"pwd"
],
"appid": "1ec5483f-8eb9-4851-af81-ff89eb3e25ad",
"appidacr": "1",
"family_name": "XXX",
"given_name": "XXX",
"ipaddr": "XXX",
"name": "XXX",
"oid": "1c11db5e-dc85-4c4b-882e-b8dd40206255",
"onprem_sid": "S-1-5-21-57989841-1450960922-725345543-4904",
"rh": "0.ARcAdKQVoiCS8E-TJSBRMiYmswy29THjXTVBhewI7fvOBC4XACo.",
"roles": [
"Trigger.Function"
],
"scp": "General.Read",
"sub": "q7tSjCuR5mf56ekcpYI4xEZ6Kdo_zfXkT2oBYEsyohQ",
"tid": "a215a474-9220-4ff0-9325-2051322626b3",
"unique_name": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="237b7b7b637b7b7b0d404c4e" rel="noreferrer noopener nofollow">[email protected]</a>",
"upn": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9ac2c2c2dac2c2c2b4f9f5f7" rel="noreferrer noopener nofollow">[email protected]</a>",
"uti": "0W4WOPhO406S8ahy4GkmAA",
"ver": "1.0"
}
这又引起了我的注意。但是当我打电话时
总是401。我哪里出错了?
最佳答案
我创建了一个Azure AD Function 应用并启用了身份验证,如下所示:
在 Azure AD 应用程序中,公开了一个 API:
添加了 API 权限:
现在,我尝试使用以下参数生成访问 token 并验证函数应用程序:
GET https://testrukfunctapp1.azurewebsites.net/api/HttpTrigger1
Callback URL : RedirectURL
Auth URL : https://login.microsoftonline.com/TenantID/oauth2/v2.0/authorize
Access Token URL : https://login.microsoftonline.com/TenantID/oauth2/v2.0/token
ClientID : ClientID
Client Secret : ***
Scope : api://xxx/user_impersonation
我遇到了同样的错误(401 未经授权),如下所示:
要解决错误,请确保传递 x-functions-key
header :
x-functions-key
值是函数 URL 中的代码值:
传递 header 后,我能够使用访问 token 成功验证 Function 应用,如下所示:
GET https://testrukfunctapp1.azurewebsites.net/api/HttpTrigger1
x-functions-key : FunctionURLCodeValue
Content-Type : application/json
关于azure - 无法让 Postman 在 Azure Function 上成功针对 Entra/Azure AD 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77187333/