有没有办法为 Azure 中的每个用户获取不记名令牌并用于针对 Web API 进行身份验证?

问题描述 投票:0回答:1

这似乎是一个非常简单的问题,很难想象微软没有解决方案,但在谷歌搜索几天后我找不到答案,至少不是一个简单的答案。我正在使用 fastAPI 开发一组 API,以根据请求在后端运行一些作业。我们公司的每个用户都应该能够调用这些 API。此外,其中一些 API 需要从 Jenkins 作业和其他一些类似工具调用。通常,我会使用 LDAP 进行身份验证,并为每个用户生成一个令牌,将其存储在数据库中,并允许用户使用其令牌调用函数。令牌可能会在 6 个月左右后过期。

公司的新政策是放弃 LDAP 并使用 Azure Active Directory 和 OIDC 协议。我虽然也许可以利用这个机会将令牌身份验证和维护工作转移到 Azure,但经过一周的谷歌搜索,仍然找不到我应该如何做到这一点,即使 Azure 可以做到这一点。我发现的每个解决方案要么需要将客户端密钥传递给最终用户/Jenkins 作业,这是不可接受的,要么以交互方式获取令牌,这可能适用于人类用户,但不适用于 Jenkins 作业和管道。此外,几乎所有这些都需要在客户端编写脚本/编码并使用 MSAL 或身份库。有什么方法可以让最终用户从 Azure 获取令牌,将其传递给我的 API,然后我使用该令牌进行身份验证?希望令牌具有较长的生命周期,以便可以将其添加到管道中。

我看过:
用户名-密码流程。微软不推荐它,而且看起来不太好,因为它需要在命令行/脚本中输入密码 设备代码流。需要交互式用户并需要在客户端编写一些脚本。 (至少这是我的理解)。 管道的服务主体,但如果我理解正确的话,它需要客户端密钥,并且令牌的寿命很短。

基本上,我正在寻找一种方法,最终用户可以从某处获取令牌并使用curl命令将其发送到API,然后我在后端进行身份验证并运行作业。 Azure 可以吗?

azure-active-directory openid-connect bearer-token
1个回答
0
投票

后端作业不应使用用户级访问令牌进行操作。相反,它应该提供自己的工作负载凭证来获取访问令牌,然后使用它来调用 API。建立自己的代币商店也存在安全风险。

作业应使用客户端凭据流程并提供以下凭据类型之一来获取自己的访问令牌:

  • 难以猜出的密码
  • 客户证书
  • 客户端断言(JWT)

感觉你的设计有问题。作业需要使用的数据和最终用户需要使用的数据几乎肯定是不一样的。

如果您能详细说明用户使用令牌访问哪些数据、作业使用令牌访问哪些数据以及为什么作业需要用户级令牌,我可以给您一个改进的答案。

© www.soinside.com 2019 - 2024. All rights reserved.