【发布时间】:2018-08-31 14:21:33
【问题描述】:
我有一个使用身份服务器 4 构建的身份服务器。有一个主 API,其中包含由访问此 API 端点的第三方客户构建的多个 Angular Web 应用程序。
现在我想创建第二个 API,但它只供 OUR 官方插件在内部使用。我试图弄清楚如何将其锁定,以便只有我们的应用程序可以访问它。我不是默默无闻的粉丝安全,并假设第三方不知道它在那里,所以不会尝试访问它。
我的第一个想法是为这个 API 添加一个新范围,但这样做会弹出并要求用户访问不需要的数据。
我唯一能想到的就是在 API 中检查客户端 ID 并为其添加策略。就我的理解而言,这确实不是正确的 polciy 应该检查用户的统计信息,而不是客户端本身。
services.AddAuthorization(
options => {
options.AddPolicy("DevConsole", policy => IsClientId(xxxx)
}
);
是否可以根据单个客户端 ID 锁定 API?还是我走错路了。
我的另一个想法是添加另一个声明,如果他们使用这个客户端 ID 登录,这对我来说有点矫枉过正。
示例:
假设我有一个 API 端点,允许您更新用户名。所有用户都可以访问他们的名字,这不是范围问题。但是,只有我们的官方应用程序有权更新用户名。第三方开发者创建的任何应用都无权访问端点来更新用户名。
所以我们的官方插件的客户端 ID 为 123,而您的客户端 ID 为 321。通过客户端 ID 321 登录的用户无法访问此端点。通过客户端 id 123 登录的用户可以。
我开始认为这是不可能的,因为 Oauth 和 Openid 完全基于用户。无法根据用户进行身份验证的客户端来验证用户。
【问题讨论】:
-
你说的"是什么意思...要求用户访问那些不是真正需要的数据"?我认为您的官方插件的用户只需要批准(在同意页面上)将新范围权限委派给插件。这是一个问题还是为什么不需要它?
-
任何登录的人都可以访问这些数据。用户登录的客户端可能有权或可能无权请求数据。范围是基于用户的,它请求访问每个人都可以访问此数据的用户数据。但是,如果您创建一个应用程序并且我给您一个客户端 ID,您将无权使用此 api。
-
@JánHalaša 检查我的更新我添加了一个我正在尝试做的示例。
-
你能解释一下你对范围的关注吗?我通过访问获得了这个,但它与 API 限额无关。通用 API 可以读取数据,但只有您自己可以编辑。只有拥有您的范围的客户端才能访问您的 API。我错过了什么吗?
-
主要问题是管理层不想向用户显示额外的范围。因为它会迫使每个人都集中注意力,而且当数据在第一个范围内已经可以访问时,拥有第二个范围是愚蠢的
标签: oauth oauth-2.0 openid identityserver4