Azure B2C认证中的“作用域”有什么用处?

22
我不理解Azure B2C中的“Scopes”应该如何使用。它们与API相关联,而不是用户。我确信我错过了什么,但我看不出与API关联的实际用途。我已经使用和实现了基于用户在数据库中角色的声明验证。
例如:API的普通用户不应该有删除对象的权限,但管理员则应该具备此权限。是否有人可以提供一个实际的例子,说明如何使用这些B2C“Scopes”来限制用户访问API的权限?
2个回答

21
它们与API相关联,但不与用户相关。将关联到API视为定义API的“表面积”。例如,这个API定义了2个作用域:read和write。现在,你可以定义两个应用程序。一个只具有读取权限,另一个具有读取和写入权限。对于一个Web App和一个Web API的常见用例而言,它没有任何价值。在这种情况下,我使用no-op作用域。
我已经使用并实施了基于声明的身份验证,基于用户在数据库中的角色。
您可以使用自定义属性为用户分配“角色”。 您可以通过Azure AD Graph API设置它们以保持安全。 您还可以在注册期间设置它们(尽管这需要更多工作)。
当您请求该用户的访问令牌时,您定义和设置的自定义属性将在API中可读,以检查权限。

评论反馈

如果我晋升或降级一个用户,我需要更改他们在客户端访问的端点(策略)。

无需更改策略。您可以通过Azure AD Graph API更新该用户的自定义属性。

我的问题是,我对授权终节点(“范围”)而不是用户的身份验证系统感到困惑

是啊,我也是!我认为这可能与产品目的有关。B2C是关于自助注册、密码重置和与其他IDP(如FB、Google等)联合。也许Azure AD是一种更好的解决方案,当您想要控制用户权限时。不确定,还在学习!

我仍然看不出根据安全性将API拆分成几个不同部分的实用性。API应该是一组功能相关的服务

您不需要拆分API。您可以拆分使用API的应用程序。参见上文。


文档参考:请求访问令牌, GitHub问题以改进文档。


谢谢提供信息,但是它并没有解决问题。在实际场景中如何使用呢?如果我晋升或降级一个用户,我需要更改客户端访问的端点(策略)。这有什么用处或实际意义呢? - Quark Soup
我理解用户自定义属性的工作原理,但使用Graph API会有很大的开销。我的问题是,我对授权端点(“范围”)而不是用户的身份验证系统感到困惑。我仍然看不出根据安全性将API拆分为几个不同部分的实用性。API应该是一组功能相关的服务。按安全性将它们分开似乎不切实际和人为。 - Quark Soup
我同意 - 你对这个问题有进展吗?我也有同样的问题。 - user2294382
@user2294382 不是的 - spottedmahn
1
谢谢,这真的为我解决了“为什么需要使用作用域”的问题。将其与创建多个应用程序或仅使用读/写作用域进行比较是一个“啊哈”时刻,因为这正是我难以理解的地方。 - Architekt
我并不特别理解将范围分配给多个客户端如何增加安全性。这只是把问题推到了前面。假设两个应用程序都使用B2C作为身份/访问管理器,可以登录“读取”客户端应用程序的用户实际上也可以登录“写入”客户端应用程序。通过SSO,他们甚至不必物理登录。客户端应用程序如何区分谁可以登录,谁不能? - Krishna Moniz

12

角色和范围提供了用户访问控制的两个方面。

角色,例如 管理员成员访客,决定了经过身份验证的用户是否有权限删除对象。

范围,例如 读取写入删除,确定经过授权的应用程序是否可以代表授权/同意的用户删除对象,如果该用户通过其角色分配/赋予有这样的权限。

Azure AD B2C 目前不支持管理角色及其分配给用户的权限。

但是,它支持管理范围及其分配给应用程序的权限。


这并没有回答问题,只是描述了问题。我想让一些用户具有“删除”访问权限,而不希望其他用户在完全相同的API上具有“删除”访问权限。这些策略如何帮助我实现这个目标? - Quark Soup
已确认@MikeDoonsebury,我已更新上述答案以更清楚地阐述。 - Chris Padgett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接