azure - 无法让 Postman 在 Azure Function 上成功针对 Entra/Azure AD 进行身份验证

标签 azure azure-active-directory azure-functions postman

我设置了我的 Azure 函数来针对我自己的租户进行身份验证,如下所示... picture of function auth

资源的应用程序注册有一个像这样公开的API scope api

这样做之后,如果我在浏览器中点击它,就像我自己一样,它会要求我进行身份验证,然后才能工作。伟大的!我现在尝试在 Postman 中执行此操作,但无论我做什么,都会收到 401。

postman 正在以其自己的服务主体身份登录 (1ec5483f-8eb9-4851-af81-ff89eb3e25ad) API权限是这样设置的 postman api permissions

然后我在 POSTMAN 客户端中设置了一个 OATH 2 token - 它得到了一个似乎有效的 token postman set up

我显然是故意把 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"
}

这又引起了我的注意。但是当我打电话时

postman get request

总是401。我哪里出错了?

这是函数 url 的图片...没有代码 No code

最佳答案

我创建了一个Azure AD Function 应用并启用了身份验证,如下所示:

enter image description here

在 Azure AD 应用程序中,公开了一个 API:

enter image description here

添加了 API 权限:

enter image description here

现在,我尝试使用以下参数生成访问 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 未经授权),如下所示:

enter image description here

要解决错误,请确保传递 x-functions-key header :

enter image description here

x-functions-key 值是函数 URL 中的代码值:

enter image description here

传递 header 后,我能够使用访问 token 成功验证 Function 应用,如下所示:

GET https://testrukfunctapp1.azurewebsites.net/api/HttpTrigger1

x-functions-key : FunctionURLCodeValue
Content-Type : application/json

enter image description here

关于azure - 无法让 Postman 在 Azure Function 上成功针对 Entra/Azure AD 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77187333/

相关文章:

azure - Bicep 部署 Linux 应用服务计划,无论定义的种类如何

rest - 为 Azure Rest webapi 应用程序启用 CORS

sql-server - 使用 Keycloak 的 Azure Active Directory 服务主体身份验证配置 SQL Server

c# - Azure AD 错误请求

Azure Functions V2 - BlobStorage FetchAttributes() 构建问题

c# - C# 中修饰符 static 对于此项错误无效

azure - 这些 API 管理操作是否有休息要求?

azure - 如何使用azure逻辑应用程序、函数aps从azure存储(文件共享或BLOB)中读取、写入、删除文件

azure - 逻辑应用在 Blob 上传时触发两次

Azure 中的 Python Web Scraper