如何获取具有 client_credentials 授予类型的客户端元数据?

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

我的 API 支持最终用户和机器客户端。我使用外部 IDP,其中配置了用户和计算机客户端。

对于最终用户,我可以使用

/userinfo
端点检索有关他们的信息。例如,当用户通过我的 API 提交订单并且我想获取有关该用户的详细信息时,这非常有用。

但是如果机器通过我的 API 下订单怎么办?我应该如何收集有关下订单的机器的信息?使用其访问令牌,我只能访问一些声明,例如

sub
。我无法访问提供有关客户端的任何其他信息的端点。我应该在令牌中添加自定义声明吗?我想知道是否有更规范的方法。

authentication security oauth openid-connect
1个回答
0
投票

OAuth 没有为此提供标准化解决方案,因此您需要设计自己的解决方案。

要求

我会这样推理:

  • 确保您的 API 可以区分客户端,以便您可以在需要时对它们进行不同的授权。

  • 确保为机器客户端和面向用户的客户端设计具有最低权限的访问令牌。

  • 确保您的 API 对两种类型的客户端应用所有正确的授权规则。

技术

这些是我会考虑的技术:

  • 将客户端 ID 映射到您自己的客户端元数据。有时,这是在访问令牌之外更容易管理的业务权限。

  • 机器客户端使用客户端凭据流来获取访问令牌。你可以 向令牌发出自定义声明以代表主要身份值。例如,如果机器客户来自业务合作伙伴,您可能会发出

    partner_id
    索赔。

  • 有时,每个计算机客户端都会获得自己的 OAuth 客户端 ID,以便您可以拒绝对其中一台计算机的访问,而不会影响其他计算机。

  • 有时,为机器客户端和面向用户的应用程序使用不同的 API 入口点是有意义的。例如。用于夜间批处理作业的计算机客户端可能会使用未暴露于互联网的端点进行连接,并提供比面向用户的应用程序具有更高权限的令牌。像

    /batch/orders
    这样的独特 API 端点有时对于处理这些差异很有用。

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