RESTful API中的多个身份验证级别

脚本

我们正在为我们的Web应用程序构建一个新的RESTful API.此API将为我们的移动应用程序,我们的Web应用程序和授权客户提供服

我们正在使用Apigility构建API,并正在使用它提供的OAuth2实现.

目前,我们的Web应用程序依赖于用户表,并为每个用户分配权限.这些用户只需使用Web表单登录,然后存储会话并在访问时检查适当的权限.

我们希望能够对API访问进行身份验证(例如我们的Web应用程序和授权客户),因此不会对API进行未经授权的访问.但是,我们还希望在用户级别授权权限,因此也必须进行某种用户身份验证.

对API的任何授权访问可以使用不同的用户,因此依赖于每个客户端的单个用户将不起作用,尤其是因为权限是基于每个用户的.我们也不希望任何用户在没有事先验证的情况下使用API​​,因此希望避免将每个用户作为客户端添加到OAuth2.

例如:

Web应用程序使用API​​进行身份验证,两个用户使用它:

UserA具有用户管理权限

UserB没有用户管理权限

因此,UserA可以POST / user并收到200 OK,而UserB应该收到403 Forbidden.

我们尝试了什么

我们已经创建了一个示例应用程序,并已成功为高级客户端使用OAuth2设置身份验证,并可以按预期进行调用.但是我们无法基于此为我们的用户创建授权模型.

我们添加了一个自定义HTTP标头,其中包含在对/ user / login进行身份验证调用后提供的用户令牌.但我们不确定这是否是正确的方法.

这个问题

我们如何验证高级客户端(例如我们的Web应用程序或授权客户),然后根据实际使用系统的用户授权访问?

最佳答案 您有几个选项可供选择:

令牌级权限

您可以为每个用户帐户提供不同的令牌,并将权限绑定到令牌.这会冒错误令牌与错误用户混在一起的风险.然而,这还具有不必维持用户< – >令牌关系的优点,因为在令牌级别确定了许可.你如何决定生成哪个令牌可能会很棘手.

用户级权限

您可以将用户帐户绑定到令牌,然后可以为该用户授予读/写权限.这降低了用户在链接时出现错误令牌的风险.使用此方法,您可以对所有用户帐户使用相同的令牌生成方法,因为令牌不知道权限,但允许他们“访问”API(从而防止未经授权的访问).

我故意避免提及特定类型的身份验证令牌,因为这两个概念可以应用于Web上的大多数流行选择(基于令牌,基于OAuth).

点赞