gpt4 book ai didi

azure - 资源所有者密码凭据 token 在 Azure Function App 上导致 401

转载 作者:行者123 更新时间:2023-12-02 08:25:35 24 4
gpt4 key购买 nike

我想将 Azure AD 的资源所有者密码凭据流用于我的函数应用。功能应用程序已启动并正在运行。为应用程序配置 Azure AD 身份验证后,我的请求会被拒绝,并显示 401 Unauthorized但没有有关错误的更多详细信息。

我还应该强调,我可以从租户的身份验证端点获取新 token 。只是当我尝试从 curl 调用该函数时,这些 token 被拒绝。 。当我使用浏览器和相同的凭据登录时,我可以访问该功能。

澄清:可以通过 API 获取 token ,但这些 token 随后会被函数应用的 AAD 身份验证拒绝。通过浏览器,我获得了可以登录到函数应用程序的 token 。

<小时/>

我做了什么:

创建函数应用

  • 基本 GET请求,无需授权或通过浏览器授权即可工作。

在 Azure AD 中创建应用注册

  • 隐式授予:访问权限 + ID token
  • 支持的帐户类型:单租户
  • 允许公共(public)客户端流:是
  • 在 list 中:"oauth2AllowImplicitFlow": true,
  • 范围:自定义 user_impersonation我的 API 的范围
  • API:这里我使用 user_impersonation 添加了我的函数应用程序范围

配置函数应用以通过 AAD 对用户进行身份验证

  • 管理模式:高级
  • 客户端 ID:上述应用注册的客户端 ID
  • 允许的 token 受众:我的函数的 URL

重现步骤:

获取新的access_token :

发出POST请求https://login.microsoftonline.com//oauth2/v2.0/token 和以下参数:

  • clientId :Azure AD 中应用注册的客户端 ID
  • scope :user.read openid profile offline_access https://<my-function>.azurewebsites.net/user_impersonation
  • username :用户的电子邮件地址
  • password :用户的密码
  • grant_type :password

这将返回 access_token 。我不会将其发布在这里,但我可以根据要求分享详细信息。

调用 protected API

发出GET请求https://<my-function>.azurewebsites.net/api/test具有以下 header 参数:

  • Authorization :Bearer <access_token>
<小时/>

当然,我们非常感谢任何帮助。值得注意的是,无论如何用户都不应该能够交互登录。我很清楚 ROPC 流程的陷阱和缺点,但这是使用 Azure AD 解决此特定用例的唯一方法。

这是我之前查阅过的一些资源。当然,我可能忽略了一个关键点:

最佳答案

我好像已经修好了。解决方法是多次尝试错误,也许还有更简单的方法。

Azure AD 应用注册

  • 仅选择访问 token ,我们不需要 ID token 。
  • 在 list 中设置"accessTokenAcceptedVersion": 2
  • 使用建议的 api://... 应用 ID

功能应用

  • 将客户端 ID 和允许的 token 受众设置为 AAD 应用注册中的应用程序 ID,但不要使用领先的 api:// 方案。

获取 token

  • 将范围指定为 api://.../user_impersonation

完成上述所有步骤后,我可以成功进行身份验证,然后才能访问我的函数应用程序。下一个挑战是从请求中读取经过身份验证的用户名。但这可能是 SO 上另一个线程的主题。

关于azure - 资源所有者密码凭据 token 在 Azure Function App 上导致 401,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64969500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com