Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql OAuth最佳实践-当用户属于多个应用程序时的DB设计_Mysql_Oauth_Oauth 2.0_Scopes - Fatal编程技术网

Mysql OAuth最佳实践-当用户属于多个应用程序时的DB设计

Mysql OAuth最佳实践-当用户属于多个应用程序时的DB设计,mysql,oauth,oauth-2.0,scopes,Mysql,Oauth,Oauth 2.0,Scopes,我正在设计一个RESTful API,它将作为几个移动应用程序的公共后端。到目前为止,它包括: 用户表:id(主)、姓名、电子邮件、密码 应用程序表:id(主)、名称、描述 只是独立的表格 我想实现OAuth密码授予方法从移动应用程序请求OAuth访问令牌,在每种情况下都使用电子邮件/密码表单,以便我可以使用OAuth范围来利用访问级别 我只是想知道设计数据库模式的最佳方法是什么 迄今为止,我的努力: 将应用程序id字段添加到用户表中,并使电子邮件字段唯一,但这将限制他们仅使用注册的第一个应

我正在设计一个RESTful API,它将作为几个移动应用程序的公共后端。到目前为止,它包括:

  • 用户表:id(主)、姓名、电子邮件、密码
  • 应用程序表:id(主)、名称、描述
只是独立的表格

我想实现OAuth密码授予方法从移动应用程序请求OAuth访问令牌,在每种情况下都使用电子邮件/密码表单,以便我可以使用OAuth范围来利用访问级别

我只是想知道设计数据库模式的最佳方法是什么

迄今为止,我的努力:

  • 应用程序id字段添加到用户表中,并使电子邮件字段唯一,但这将限制他们仅使用注册的第一个应用程序。因此,这不是一个解决方案。但是,通过这种方法,我可以用简单的方法实现OAuth基于范围的许可系统:(

  • 应用程序id字段添加到用户表中,但不使电子邮件字段唯一。这样我就可以有两行具有相同电子邮件和不同的应用程序ids。但是在这种情况下,基于OAuth范围的权限的实现将不一致,因为我可能有两行具有相同的em当我调用“oauth/token”路由时,返回邮件/密码

  • 由于许多用户可以在许多应用程序中注册,另一个想法是在应用程序用户应用程序用户)之间创建一个数据透视表。该表将具有:

    • 应用程序id用户id,以及指定每个应用程序中每个用户的角色的角色字段。到目前为止,这方面做得还不错,但当一个应用程序中具有高权限的用户使用其黄金访问令牌在另一个应用程序中执行禁止的操作时,问题就来了…:(
  • 拜托,有人能解释一下这个话题吗


    非常感谢。

    选项3是一个不错的选择。基本上,此表中的一个用户将有多行(每个应用程序一行),并且每行可以有不同的角色值。那么,有什么问题吗?首先,感谢您的回复;)将OAuth访问令牌分配给用户时会出现问题,因为“OAuth/token”路由只需要一个“username/password”对来返回令牌…并且它不查找应用程序id…因此,例如,App1中的管理员用户(以及App2中的普通用户)当点击“oauth/Token”路由时,将获得一个“admin”访问令牌,然后可以使用它在App2中执行管理级别的操作…(…有什么建议吗?再次感谢。我明白了…这是因为oauth是一个授权协议,而不是一个身份验证协议。好的,这部分称为“缺少访问限制”正在解决您的问题。基本上,您需要在服务调用中传递另一个参数,用于访问限制。请查看此链接:好的,非常感谢您的时间。这正是我所想的。然后,我不能使用OAuth作用域来利用特权。相反,我将使用OAuth令牌仅用于授权用户(检查他们的凭据)然后,一旦他们使用OAuth登录,我将在后台实现一个角色用户权限系统,该系统将在每种情况下检查哪个应用程序正在访问每个用户:(……我认为您应该使用OpenID Connect()。它构建在OAuth 2的基础上。选项3是一种方式。基本上,此表中的一个用户将有多行(每个应用程序一行),并且每行可以有不同的角色值。那么,有什么问题吗?首先,感谢您的回复;)将OAuth访问令牌分配给用户时会出现问题,因为“OAuth/token”路由只需要一个“username/password”对来返回令牌…并且它不查找应用程序id…因此,例如,App1中的管理员用户(以及App2中的普通用户)当点击“oauth/Token”路由时,将获得一个“admin”访问令牌,然后可以使用它在App2中执行管理级别的操作…(…有什么建议吗?再次感谢。我明白了…这是因为oauth是一个授权协议,而不是一个身份验证协议。好的,这部分称为“缺少访问限制”正在解决您的问题。基本上,您需要在服务调用中传递另一个参数,用于访问限制。请查看此链接:好的,非常感谢您的时间。这正是我所想的。然后,我不能使用OAuth作用域来利用特权。相反,我将使用OAuth令牌仅用于授权用户(检查他们的凭据)然后,一旦他们使用OAuth登录,我将在后台实现一个角色用户权限系统,该系统将在每种情况下检查哪个应用程序正在访问每个用户:(……我认为您应该使用OpenID Connect()。它构建在OAuth 2之上。