WebAPI 混合隐式流程和客户端凭证流程

2024-01-21

我有一个 WebAPI 解决方案,可以通过 [Authorize] 属性保护其控制器方法。它验证给定用户是否具有适当的角色,这些角色基本上是来自 IdentityServer3 的声明。

有多个单页应用程序客户端与此 WebAPI 交互,并且使用隐式流对客户端用户进行身份验证/授权。

到目前为止非常标准和简单,一切都很好......

现在我需要后台进程来调用同一个 WebAPI。这实际上成为机器对机器的通信。根据我读过的所有文档,这是客户端凭据流程的情况。没有用户参与。

问题...

鉴于不涉及任何用户,这也意味着没有主题、没有声明,显然也没有角色。如果我没记错的话,客户没有索赔。由于我的控制器方法是由角色保护的,那么如何授权这样的客户端使用服务/资源呢?

我读到客户端应该只有一个流,但是资源呢?客户端使用的流对于资源来说应该不重要,除了访问令牌不会根据客户端流进行声明。因此,在这种情况下,当资源受到声明保护时,流程也与资源相关。我很困惑吗?

我应该专门为客户端凭据流创建一项新服务吗?操纵身份服务器来支持客户端的声明?

我在这里寻找最佳实践。

Edit

另请参阅此 Github 讨论...Issue 76 https://github.com/IdentityServer/IdentityServer3/issues/76

如果主体为空——则没有人参与。

我们不打算为客户提出索赔。客户身份 并且范围应该足够了。

最低权限

另请参阅...Issue 79 https://github.com/IdentityServer/IdentityServer3/issues/79#issue-33235316

嗯 - 一般来说,客户端应该只有一个流,因为它可以 如果错误的流组合会导致安全问题 配置(例如代码和隐式)。

最低权限


您可能与客户端凭据流程中的用户角色声明(细粒度授权)不完全匹配,但有一些解决方法:

  • 使用向客户端发出的范围声明来做出授权决策(请参阅此 Identity Server文档 https://identityserver.github.io/Documentation/docs/overview/mvcGettingStarted.html- 具体在注册 Web API 下)
  • 根据访问令牌中的受众(“aud”)声明,您可以放弃通常检查用户令牌的授权决策

还可以看看代币自省 https://leastprivilege.com/2015/11/25/reference-tokens-and-introspection/(以及多米尼克发布的相关视频)以供进一步了解。这也概括了资源服务器的作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebAPI 混合隐式流程和客户端凭证流程 的相关文章

随机推荐

  • WPF Datepicker 使用 MVVM 返回先前选择的日期

    我正在开发一个 WPF 项目 其中窗口上有一个 Datepicker 控件 我使用 MVVM 模式进行数据绑定 我已经在日期选择器的 SelectedDate 更改事件上设置了一个命令 问题是 例如 当我第一次更改我得到的日期时NULL在命
  • 通过 Rest API 以 csv 格式导出 PowerBI 报告

    PowerBI 仅为分页报表提供了 CSV 格式导出 API 不适用于通过导出 API 仅支持 pbix ppt png 格式的普通报表 参考 https learn microsoft com en us rest api power b
  • 无法使用 Node.js 连接到 Apache ActiveMQ

    背景 尝试使用 AMQP 1 0 协议通过以下方式连接到我的 Apache ActiveMQ 代理amqp10 https www npmjs com package amqp10 我使用以下代码 改编自自述文件中的原始示例 const A
  • pyplot savefig 分配太多块

    我试图绘制一个包含数百万个三角形的图形 但 matplotlib 似乎无法处理它 当我尝试使用保存图形时savefig file png dpi 100 我收到以下错误 OverflowError Allocated too many bl
  • 使用 Command-Click 声明时,Xcode 11 (11A420a) 不显示“嵌入 H/VStack”菜单项

    我一直在使用 SwiftUI 我注意到所有这些教程都提到了 Command ClickText例如 并期望出现以下菜单项 以便嵌入HStack例如 问题是我没有看到这些 嵌入H VStack出现菜单项 即使我搜索 嵌入 它也不会返回任何内容
  • 重复事件、SQL 查询

    我知道有关重复事件的问题很常见 但除了与日历应用程序有关的事件之外 我还无法找到有关重复事件的特定问题的答案 主要区别在于我们应用程序中的事件 只能在报告中或单独出现 而不是以日历格式出现 尽管它们在很多方面非常相似 也许只是与日历相关的包
  • 如何在sql server中执行另一个存储过程中的存储过程

    我正在 sql server 2008 上工作 我有一个存储过程 在其中我正在执行另一个 usp 这里我想获取第二个usp的输出并相应地返回主usp输出参数 但我的主要 USP 总是返回第二个 USP 值和主要 USP 值 但我只想返回主要
  • Python subprocess.Popen 作为 Windows 上的不同用户

    在 Windows 上的 Python 中以不同用户身份启动子进程的最佳方式是什么 最好是 XP 及更高版本 但如果它只能在 Vista 和 7 上运行 我也可以接受 我不确定你是否可以使用标准 python 库来做到这一点 但是 那pyw
  • 打印 Python 函数参数的名称和值

    我想做一个debug print 它将输出调用者变量和值 稍后我会将其扩展为仅部分打印列表和字典等 这篇文章仅关注打印调用者变量和值的第一部分 这篇文章有以下几个部分 当前版本debug print 构建的测试用例 测试用例的输出 我想要的
  • Symfony 多次渲染同一个表单

    我想多次渲染同一个表单为两个不同的选项卡处理相同的操作 问题是 当我尝试时 仅显示第一个选项卡的形式 如果我更改id and name的形式 我发现这是 symfony 的预期行为 但我仍然需要它才能工作 我发现它可能适用于集合 但不知道它
  • 如何在一个Makefile中生成多个可执行文件?

    我的目录包含2源文件 a c and b c 我想生成可执行文件a from a c and b from b c 现在我只能想出一种写Makefile的方法 all gcc o a a c gcc o b b c 看起来有点尴尬 有更好的
  • Shopify API 如何使用 like 进行搜索查询

    嘿伙计们 我尝试做一些搜索功能 但使用 shopifyAPI gem 是不可能的 ShopifyAPI Product find all conditions title LIKE search params limit 20 page 1
  • 使用正则表达式从字符串中删除数字

    我正在尝试从字符串中删除未附加到单词的所有数字 例子 python 3 gt python python3 gt python3 1something gt 1something 2 gt 434 gt python 35 gt pytho
  • Rails 3:如何使用 Rails 在数据库中插入记录

    我是 Rails 新手 我正在尝试学习这项技术 所以如果问题很愚蠢 请原谅 我正在使用 Rails 3 请让我知道如何在数据库中插入记录 我正在使用 postgresql 下面是学生表的表结构 SELECT column name FROM
  • 如何启用 mongodb cli 漂亮打印? - db.col.find().pretty() 不工作

    使用 mongo v2 4 5 shell db col find pretty 在 osx 控制台或 linux ubuntu 12 04 bash 上都不能很好地打印 使用和不使用 Pretty 的输出没有差异 gt db people
  • 使用 C# 填充引导下拉列表

    如何从代码隐藏填充引导下拉列表 现在我正在尝试这个 HtmlGenericControl li for int x 3 x lt 10 x li new HtmlGenericControl li li Attributes Add cla
  • 在 TypeScript 中将 JSON 文件导入为 const

    我想从数组元素的属性创建一个联合类型 如果数组是内联的 那么使用常量断言就非常简单 const arr name One name Two as const type name typeof arr number name name One
  • ply lexmatch 正则表达式与通常的 re 有不同的组

    我正在使用 ply 并注意到存储在 t lex lexmatch 中的令牌 re 匹配与 re 模块以通常方式定义的 sre pattern 之间存在奇怪的差异 组 x 似乎偏离了 1 我定义了一个简单的词法分析器来说明我所看到的行为 im
  • 查找邮政编码指定距离内的所有邮政编码

    我知道这个问题听起来像是这里几个问题的重复 但这些问题都没有回答我想要的 我有兴趣知道是否有人知道如何在指定邮政编码的半径内找到其他邮政编码 我有带有纬度和经度的邮政编码数据库 但我不知道如何在 VB net 中执行此操作 例如 90069
  • WebAPI 混合隐式流程和客户端凭证流程

    我有一个 WebAPI 解决方案 可以通过 Authorize 属性保护其控制器方法 它验证给定用户是否具有适当的角色 这些角色基本上是来自 IdentityServer3 的声明 有多个单页应用程序客户端与此 WebAPI 交互 并且使用