c# - 政策未检查客户索赔
问题描述
我们有一个使用 C# Core 2.1、IdentityServer4 和 Identity 对用户进行身份验证的系统。其他各种项目使用该系统进行授权。我可以在我的 API 中创建检查用户声明的策略;并使用这些策略来保护资源。我在 API Sartup.cs 中添加了类似的代码:
services.AddAuthorization(options =>
{
options.AddPolicy("example",
policy => policy.RequireClaim("claim", "data"));
});
并在我的 API 控制器或特定任务之前添加以下代码:
[Authorize(policy: "example")]
我们已经使用这个系统很长时间了。现在我们要锁定一个操作,以便只有特定的客户端(而不是他们的用户)可以执行此操作。但是通过授权类型 client_credentials 获得的声明要么没有被添加到访问令牌中,要么没有被授权服务看到。
当令牌没有 openid 作为范围时,有没有办法可以查看令牌中的声明?
假设声明存在,为什么授权服务看不到它?
还有其他选择吗?我们想锁定一个动作,这样只有客户端应用程序自己才能做到。
解决方案
首先,您始终可以使用Fiddler捕获原始令牌,以查看实际传递给令牌接收者的声明。然后检查由身份验证处理程序创建的用户 (ClaimsPrincipal) 包含的声明。
然后,您需要显式映射/添加缺少的声明,以便预期的声明进入 claimPrincipal 用户对象。默认情况下,在该过程中会删除一些声明。
推荐阅读
- java - 如何从 GKE 上运行的 Java 应用程序获取 GCP 错误报告(谷歌 kubernetes 引擎)
- python - 大输入导致拓扑排序崩溃
- python - 为什么将 csv 文件通过 spark 推送到 HIVE 抛出 IndexError?
- javascript - 谷歌图表:时间线比例
- html - 在 Android 上显示时如何减小网页的字体大小?
- css - CSS Grid - grid-gap 导致容器变得太小
- c - UNIX 域套接字 (PF_UNIX) 上的 send() 失败并出现 ENOBUFS 错误
- azure - Azure 搜索未缩放
- python - 使用 os rename 根据 python 中的变量重命名文件
- python - 从烧瓶中的用户那里获取正确的 IP 地址